0

我正在构建一个必须搜索一些表的搜索功能。我首先在所有需要搜索的字段上添加了一个全文索引(因此多个字段上的 1 个索引)。

然后,在我的 PHP 中,我执行以下查询

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

这是正确的方法吗?或者我应该分别在每个字段上添加索引,同时分隔查询(MATCH (field1) AGAINST ... OR MATCH (field2) AGAINST...)。

两者之间会有什么区别?

4

1 回答 1

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) 之后,它会考虑搜索中的运算符,类似于 google 搜索。

例如:

+table:单词“table”必须出现在所有匹配项中。

~table:单词“table”不能出现在任何匹配中。

于 2013-02-14T15:54:29.230 回答