2014-01-09 193 views
0

我正在嘗試編寫一個腳本,它在數據庫中使用用戶提供的查詢的每個單詞進行搜索。編寫SQL搜索引擎查詢

例如查詢可以是: 「耐克黑帽」

在我的腳本字符串由空間分割由PHP,然後傳遞到SQL查詢以這樣的形式:

foreach($query as $word) 
    { 
     $searchQuery[] = " title ILIKE '%".$word."%' ESCAPE '|' "; 
    } 

問題是那些查詢能夠找到像半* 黑色 *或* 帽子 * ed。我不希望所以我所做的就是將空間:

WHERE title ILIKE '% ".$word." %' ESCAPE '|' 

現在的問題是,如果用戶搜索的是「耐克紅色短褲」,腳本會發現什麼,因爲「耐克」沒有空間之前在數據庫中。我不知道如何解決它 - 只能找到整個單詞,包括不以空格開頭或結尾的單詞。

回答

1

您可以在搜索詞後,以及在模式的前添加一個空格:

WHERE ' '||title||' ' ILIKE '% ".$word." %' ESCAPE '|' 
0

使用PostgreSQL的全文搜索支持這樣的工作。

請參閱full text search。顯然,Rails支持很好,但我沒有真正說Rails,也找不到任何好的鏈接。

在SQL中,這將會是這樣的:

to_tsvector(title) @@ to_tsvector('Nike Black Hat')