我对引用的带连字符的搜索字符串有问题,或者更确切地说是理解问题。
在我的表中有一个表,其中有一列“公司”。
该列中的条目之一是:AZ 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;
如果我进行以下搜索,请获取上述公司所在的行(注意仅在“AZ”之前将 - 更改为 +:
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
我想这应该是 AZ 的条目 - 所以搜索应该找到这个条目,不是吗?