MySQL中使用带引号连字符字符串的布尔模式查询时出现意外行为

MySQL中使用带引号连字符字符串的布尔模式查询时出现意外行为,mysql,hyphen,match-against,Mysql,Hyphen,Match Against,我有一个问题,或者更确切地说是理解一个被引用的连字符搜索字符串的问题 在我的表格中有一个列为“company”的表格。 该列中的一个条目是:A-Z Electro 下面的例子简化了很多(虽然实际查询要复杂得多),但效果仍然相同 当我执行以下搜索时,我没有得到与上述公司的行: SELECT i.* FROM my_table i WHERE MATCH (i.company) AGAINST ('+\"A-Z\" +Electro*' IN BOOLEAN MODE) GROUP BY i.ui

我有一个问题,或者更确切地说是理解一个被引用的连字符搜索字符串的问题

在我的表格中有一个列为“company”的表格。
该列中的一个条目是:A-Z Electro

下面的例子简化了很多(虽然实际查询要复杂得多),但效果仍然相同

当我执行以下搜索时,我没有得到与上述公司的行:

SELECT  i.*
FROM my_table i
WHERE MATCH (i.company) AGAINST ('+\"A-Z\" +Electro*' IN BOOLEAN MODE)
GROUP BY i.uid ORDER BY i.company ASC LIMIT 0, 40;
如果我执行以下搜索,则获取上述公司的行(请注意,仅将\“a-Z\”之前的-更改为a+:

如果我完全删除操作符,我也会得到该行:

SELECT  i.*
FROM my_table i
WHERE MATCH (i.company) AGAINST ('\"A-Z\" +Electro*' IN BOOLEAN MODE)
GROUP BY i.uid ORDER BY i.company ASC LIMIT 0, 40;
有人能给我解释一下这种行为吗?因为我希望,当用a+搜索时,我也会得到结果

编辑

我刚刚用Myisamftdump检查了表索引。 两个字符的单词被正确索引,因为有类似
14f2e8 0.7908264 ab
3a164 0.8613265 dv

还有一个条目:
de340 0.6801047 az

我想这应该是A-Z的条目-所以搜索应该会找到这个条目,不是吗?

ft\u min\u word\u len的默认值是4。有关这方面的信息,请参阅。简言之,您的系统不会索引少于4个字符的单词

为什么这很重要?嗯:

  • A-Z
    长度小于4个字符
  • …因此它不在索引中
  • …但您的第一个查询
    +“A-Z”
    指出,它必须位于索引中才能成功匹配
  • 另外两个(如果它不在索引中,则匹配,如果这个或那个在索引中,则匹配)可以工作,因为它不在索引中

连字符是一种误导-原因是“a-Z”有三个字符长,而您的FT索引忽略了它。

@“Jeremy Smith”抱歉,忘了提到:FT\u min\u word\u len设置为3Did您在将其设置为3后重建索引?该设置没有我最近更改过的内容。该设置设置被设置为2(FT\u stopword\u file=“”)从将近一年开始,索引已经重建了很多次,MySQL服务器也重新启动了很多次。我更新了上面的帖子=>索引还可以,但是搜索仍然不匹配…还有其他想法吗?
SELECT  i.*
FROM my_table i
WHERE MATCH (i.company) AGAINST ('\"A-Z\" +Electro*' IN BOOLEAN MODE)
GROUP BY i.uid ORDER BY i.company ASC LIMIT 0, 40;