mysql - MySQL 上的全文搜索:无法在连字符/破折号后按单词搜索
问题描述
我在 DB 中有以下记录:'Vinyl Exam - CA Only'
因此,当我执行以下搜索时:
SELECT Description
FROM products AS p
WHERE MATCH (Description) AGAINST ('+Vinyl* +Only*' IN BOOLEAN MODE);
返回记录,但在这种情况下:
SELECT Description
FROM products AS p
WHERE MATCH (Description) AGAINST ('+Vinyl* +Only* +CA*' IN BOOLEAN MODE);
物品不被退回。
在最后一种情况下,我应该怎么做才能退回该物品。
解决方案
您的搜索不起作用的原因是默认情况下,可以使用全文搜索的单词有最小长度限制。据我记得,最少 3 个字符,最少InnoDB
4 个字符MyISAM
。
由于您的单词CA
只有 2 个字符长,因此在搜索中将被忽略。您可以通过更改 mysql 设置来增加/减少此字符限制。
基本上你需要在你的 mysqlmy.cnf
文件中添加以下配置(取决于你的数据库表引擎):
[mysqld]
innodb_ft_min_token_size=2
ft_min_word_len=2
在此处查找更多详细信息。
推荐阅读
- python - 从 python 文件中动态调用函数
- ssl - 在 Raspbian 上的 Dotnet Core 上使用 HttpClient 时出现 HttpRequestException
- python-3.x - 无法使用 pycharm 创建 exe,因为它抱怨钟摆语言环境
- android - 如何在 Android opencv 中更改所选范围的色调?
- java - 如何在java中创建一个包含图像的数组?
- c - Robotc - 找球、抓球、丢球
- solr - 如何分离 solr 核心,使它们的结果不会混合?
- node.js - 部署到 Heroku 时如何 Uglify/Minify Angular 应用程序
- java - 如何在 JUnit4 中使用 ClassRule 启动 Spring Boot 服务器?
- c# - 如何从 PostSharp 事件中获取特定于上下文的数据