mysql布尔模式全文搜索通配符和文字

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"时,会找到记录.

我在这里做错了什么想法?我读到有关将短划线添加到单词字符列表(需要配置更新)但我正在寻找一种以编程方式执行此操作的方法.

Joh*_*ica 5

本条款

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)