我在 bool 模式下使用 MySQL 的全文搜索功能时遇到问题。我要运行的查询如下:
SELECT v.id v_id,
v.duration v_duration,
v.title v_title,
v.description v_description
FROM videos v
JOIN videos_search_text vst ON vst.video_id = v.id
WHERE MATCH(vst.search_text) AGAINST (? IN BOOLEAN MODE);
如果我将 ?
替换为 "+the +black* +key*"
,我将得不到任何结果。但是,如果我删除“the”之前的“+”,并搜索 “the +black* +key*”
,我会得到大约 100 个结果,这是正确的。但是所有返回的结果中都包含“the”...那么为什么第一个字符串没有返回结果呢?
注意:我将最小字长设置为1,以防与它有关。
最佳答案
已解决:
问题是 MySQL 在全文索引中不包含停用词(例如“the”)。因此,在第一个字符串中,它不会作为搜索短语的一部分包含在内,并且会返回 "+black* +key*"
的结果。如果您尝试使用 +
运算符强制将“the”(或任何其他停用词)包含在搜索中,则不会返回任何结果,因为“the”不在正在搜索的索引中。
我采用的解决方案是在选项文件中禁用停用词过滤。您可能采取的另一种解决方案是从数据库中获取所有停用词到您的应用程序中,并在添加 +
运算符之前删除搜索字符串中出现的所有停用词。
关于MySQL: bool 模式下的全文搜索未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43232371/