我在与功能的比赛中遇到了麻烦。当我运行以下查询时:
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的行。 Isn&#t; t +应该返回包含两个单词的行吗?
编辑:
以下是它返回的一些数据示例:
Cataclysm's Jaws
Catalium
Catalium Rod
Grand Master's Gleaming Catalium Dagger
似乎它永远不会与女王一起回归。所以,我试图将匹配的单词更改为' + 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
答案 0 :(得分:0)
您的查询是正确的。您的数据库没有包含cat*
和queen*
的行。
默认情况下,ft_min_word_len
在sql中的值为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
的字词的行。
只需在此处添加,您就可以找到在全文索引中也被忽略的stop words
列表。 http://mssqltipsandtricks.blogspot.de/2012/07/noisestop-words-in-sql-server.html