2013-02-14 61 views
0

我正在建立一個搜索功能,必須搜索一些表。我首先在所有需要搜索的字段上添加了全文索引(所以在多個字段上有1個索引)。正確的方法來進行全文搜索

然後,在我的PHP,我做下面的查詢

SELECT * FROM table WHERE MATCH (field1, field2, field3) AGAINST('search word') 

這是正確的做法?或者我應該分別在每個字段上添加索引,並分隔查詢(MATCH (field1) AGAINST ... OR MATCH (field2) AGAINST...)。

這兩者之間有什麼區別?

回答

1

據我所知,FULL TEXT index + MATCH方法是有效的,不應該有任何問題。只要確保你的3個字段是CHAR,TEXT或VARCHAR。

也許你會感興趣的是還檢索MATCH的「得分」。它可以這樣做:

SELECT *, MATCH (field1, field2, field3) AGAINST('search word') as score FROM table WHERE MATCH (field1, field2, field3) AGAINST('search word') ORDER BY score 

這個「分數」會告訴你每個匹配找到了多麼好。可能你還應該看看IN BOOLEAN MODE。你必須把它放在AGAINST粒子後面(AGAINST('search word') IN BOOLEAN MODE),它會考慮搜索中的運營商,類似於谷歌搜索。

例如:

+表:單詞「表」必須出現在所有的比賽。

〜表:單詞'table'不能出現在任何匹配中。