MySQL: bool 模式下的全文搜索未按预期工作

标签 mysql full-text-search

我在 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/

相关文章:

MySQL - 返回值=3的行号

php - 管理跨多个 PHP 页面共享的变量的最佳方法是什么?

PHP MYSQL 查询组合并添加两个相等的结果

text - 如何在 Vim 中将每行的前两个大写字符更改为小写?

sqlite - 如何获取虚拟表的名称?

java - 后端 MySQL 数据库服务器

mysql - 连接具有相同字段的两个表并将数据合并到一个字段(MySQL)

python - 在字符串中查找和格式化非正式日期的正确方法是什么?

sql - 在 PostgreSQL 中对多个唯一值进行排名的函数

sql - SQL Server 2008 中的全文搜索一步一步