mysql - 全文搜索前导加无法正常工作

标签 mysql

我在匹配函数时遇到问题。当我运行以下查询时:

    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/

相关文章:

php - 如何计算完整脚本中代码中的查询

mysql - 清理 AJAX jquery 自动完成脚本

php - mysql读取表数据的字符串分隔符

带有小数列的 MySQL ROUND 在 CONCAT 中无法按预期工作

php - mysql php从多个表中获取数据

php - MySQL跨表触发器

php - 计算总行数

mysql - 如何将正确的日期时间从 mysql 导入到 solr?

SQL GROUP BY 和 NULL 值 : How can I group my results by only non-null values?

php - 如何从 php 将唯一的确认码插入到电子邮件中