我正在构建一个搜索功能,必须搜索一些表格。我首先在需要搜索的所有字段上添加了一个FULL TEXT索引(因此在多个字段上有1个索引)。
然后,在我的PHP中,我执行以下查询
SELECT * FROM table WHERE MATCH (field1, field2, field3) AGAINST('search word')
这是正确的做法吗?或者我应该分别在每个字段上添加索引,还要分隔查询(MATCH (field1) AGAINST ... OR MATCH (field2) AGAINST...
)。
两者之间有什么区别?
答案 0 :(得分:1)
据我所知,FULL TEXT索引+ 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
)之后将其放置,它将考虑搜索中的运算符,类似于Google搜索。
例如:
+ table:'table'一词必须出现在所有比赛中。
~table:'table'一词不得出现在任何匹配中。