2011-11-24 167 views
1

我正在研究一個基於php-mysql的網站,主要用於搜索。我之前在所有查詢中都使用LIKE運算符。但是我的sql變得太大和複雜了,因爲可能有多個關鍵字要通過字段列表進行搜索。我發現FULLTEXT搜索不僅提高了性能,而且查詢變得更具可讀性。但對於全文搜索,我有以下問題:Mysql LIKE或FULLTEXT搜索 - 在這裏使用哪一個?

  1. 我可能必須使用野生人物,至少在年底,如。

$ SQL =請求mysql_query( 「SELECT * FROM表WHERE MATCH(FIELD1,FIELD2, 字段3,字段4)AGAINST( '+ VAL1 * + val2的* + VAL3 *');」);

代替

$ SQL =請求mysql_query(「SELECT * FROM表WHERE(filed1 LIKE '%VAL1%' 或 filed2 LIKE '%VAL1%' 或filed3 LIKE '%VAL1%' OR filed4 LIKE '%VAL1%') AND(filed1 LIKE '%VAL2%' 或filed2 LIKE '%VAL2%' 或filed3 LIKE '% VAL2%' 或filed4 LIKE '%VAL2%')AND(filed1 LIKE' %val3%'OR filed2 LIKE'%val3%'OR filed3 LIKE'%val3%'OR filed4 LIKE'%val3%')「);

以前的查詢是否真的會提高我的性能與第二個查詢的性能?

2. 要進行高級搜索,用戶輸入可以是匹配結果的關鍵字,也可以是與結果不匹配的關鍵字。所以,我的SQL是這樣如下:

$ SQL =請求mysql_query(「SELECT * FROM表WHERE(filed1 LIKE '%VAL1%' 或 filed2 LIKE '%VAL1%' 或filed3 LIKE '%VAL1%' OR filed4 LIKE '%VAL1%') AND(filed1 LIKE '%VAL2%' 或filed2 LIKE '%VAL2%' 或filed3 LIKE '% VAL2%' 或filed4 LIKE '%VAL2%')AND(filed1 LIKE' %VAL3%」或filed2 LIKE '%VAL3%' 或filed3 LIKE '%VAL3%' 或filed4 LIKE '%VAL3%')「) AND(filed1 NOT LIKE '%VAL1%' 或filed2 NOT LIKE「%VAL1 % 'OR filed3 NOT LIKE '%VAL1%' 或filed4 NOT LIKE '%VAL1%')AND(filed1 NOT LIKE '% VAL2%' 或filed2 NOT LIKE '%VAL2%' 或filed3 NOT LIKE' %VAL2% '或(提交1不是'%val3%'或提交2 不是'%val3%'或提交3不是'%val3%'或提交4不是'% val3%') 「);

這不安靜可讀,我覺得會減慢搜索性能。但我不知道是否這可以使用全文搜索來完成。如果是,那麼查詢會是什麼?

最後,我的問題是我應該堅持WHERE/LIKE搜索或到全文檢索?

P.S.我的數據庫是一個只有1000行和10個字段的小數據庫。

+1

這可能有所幫助:http://stackoverflow.com/questions/224714/what-is-full-text-search-vs-like –

+0

如果你的數據庫很小,並且負載很小,它並不真的做出改變。 –

+0

我的第二個查詢沒有給出正確的結果。它根本不考慮** NOT LIKE **部分。這裏出了什麼問題? – thelastray

回答

0

對於基於高級文本的搜索,答案是兩者都不是最優的。相反,您應該使用專用的文本檢索搜索引擎,如LuceneSolR

它們是圍繞這個問題而建立的。更好地使用正確的工具來完成這項工作。