我对引用的带连字符的搜索字符串有疑问或者说是理解问题。
在我的表格中有一个表格,其中包含一个专栏'公司' 该列中的一个条目是: 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;
如果我执行以下搜索,请获取上述公司的行(通知仅更改 - 在\&#34之前的+ +; A-Z \":
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;
如果我完全删除操作符,我也会获得该行:
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;
任何人都可以向我解释这种行为吗?因为我希望,当用+搜索时,我也应该得到结果......
修改
我刚用myisam_ftdump检查了表索引。
双字符字被正确编入索引,因为有像
这样的条目
14f2e8 0.7908264 ab
3a164 0.8613265 dv
还有一个条目:
de340 0.6801047 az
我想这应该是A-Z的条目 - 所以搜索应该找到这个条目,不应该吗?
答案 0 :(得分:0)
ft_min_word_len
的默认值为4.有关相关信息,请参阅this link。简而言之,您的系统不会索引少于4个字符的单词。
为什么这很重要?良好:
A-Z
长度少于4个字符+"A-Z"
表明它必须位于索引中才能使匹配成功连字符是一个红色的鲱鱼 - 原因是因为“A-Z”是三个字符长而你的FT索引忽略它。