我在匹配函数时遇到问题。当我运行以下查询时:
SELECT
i.name,
n.trad,
i.icon_name,
i.quality
FROM strings_item AS n
LEFT JOIN items AS i ON n.name = i.description
WHERE match(n.body_en) against ('+cat*+queen*' IN BOOLEAN MODE)
它返回包含 cat OR queen 的行。 + 不是应该返回包含两个单词的行吗?
编辑:
以下是它返回的一些数据示例:
Cataclysm's Jaws
Catalium
Catalium Rod
Grand Master's Gleaming Catalium Dagger
而且似乎它永远不会返回任何与 queen 相关的内容。因此,我尝试将匹配词更改为“+cat +queen”,显示的内容如下:
Iceheart Queen's Shield
Queen Klaw's Pauldrons
[Playing Card] Queen of Hearts
Cat Queen Egg
Cat Queen Box
PS:我按照与 mysql 中相同的顺序保留这些单词,我要查找的行是 Cat Queen Egg
最佳答案
您的查询是正确的。您的数据库没有同时包含 cat*
和 queen*
的行。
默认情况下,sql 中的ft_min_word_len
值为 4。 (https://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_ft_min_word_len)。
因此sql不会在其全文索引中获取少于4个字符的单词。
例如:
Instructions 1
are 2
applicable 3
to 4
these 5
Adventure 6
在这一行中,sql 不会在其全文索引中获取单词 2,3 和 4。
更改 ft_min_word_len
或添加包含超过 4 个字符且其中包含 cat
的单词的行。
只需在此处添加,您就可以找到在全文索引中也被忽略的停用词
列表。 http://mssqltipsandtricks.blogspot.de/2012/07/noisestop-words-in-sql-server.html
关于mysql - 全文搜索前导加无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29408625/