haj*_*ajo 6 mysql full-text-search boolean wildcard literals
我是MySQL全文搜索的新手,我今天遇到了这个问题:
我的公司表在名称栏中有"e-magazine AG"的记录.我在名称列上有一个全文索引.
当我执行此查询时,找不到记录:
SELECT id, name FROM company WHERE MATCH(name) AGAINST('+"e-magazi"*' IN BOOLEAN MODE);
Run Code Online (Sandbox Code Playgroud)
因为破折号我需要使用引号并使用通配符,因为我实现了"当你键入时搜索"功能.
当我搜索整个术语"电子杂志AG"时,会找到记录.
我在这里做错了什么想法?我读到有关将短划线添加到单词字符列表(需要配置更新)但我正在寻找一种以编程方式执行此操作的方法.
本条款
MATCH(name) AGAINST('+"e-magazi"*' IN BOOLEAN MODE);
Run Code Online (Sandbox Code Playgroud)
将搜索一个AND "e" AND NOT "magazi"; 即-里面的“e-magazi”将被解释为a,not即使它在引号内。
因此,它不会按预期工作。
解决方案是应用having带有 LIKE 的额外子句。
我知道这having很慢,但它只会应用于比赛的结果,因此不应涉及太多行。
我建议类似:
SELECT id, name
FROM company
WHERE MATCH(name) AGAINST('magazine' IN BOOLEAN MODE)
HAVING name LIKE '%e-magazi%';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3442 次 |
| 最近记录: |