php - MySQL MATCH AGAINST 3 个字符表达式
问题描述
当我运行以下命令时,
MATCH(my_text) AGAINST ('"hey"' IN BOOLEAN MODE)
我得到所有包含的行的结果hey
当我运行以下
命令时MATCH(my_text) AGAINST ('"n=3"' IN BOOLEAN MODE)
,即使有 2 行包含n=3
该表有
fulltext
索引
utf8_general_ci
整理
ENGINE=InnoDB
innodb_ft_min_token_size = 3
ft_min_word_len = 4
mysql version = 5.6.10
我怀疑它与=
但不知道如何使用*()+
它需要的行为方式有关,尝试了一些不同的组合但没有成功。
解决方案
=
不被视为单词字符,因此不被索引
来自:https ://dev.mysql.com/doc/refman/8.0/en/fulltext-fine-tuning.html
字符集修改
对于内置的全文解析器,您可以通过多种方式更改被视为单词字符的字符集,如下面的列表中所述。进行修改后,为包含任何 FULLTEXT 索引的每个表重建索引。假设您要将连字符 ('-') 视为单词字符。使用以下方法之一:
Modify the MySQL source: In storage/innobase/handler/ha_innodb.cc (for InnoDB), or in storage/myisam/ftdefs.h (for MyISAM), see the
true_word_char() 和 misc_word_char() 宏。将“-”添加到这些宏之一并重新编译 MySQL。
Modify a character set file: This requires no recompilation. The true_word_char() macro uses a “character type” table to distinguish
其他字符的字母和数字。. 您可以在其中一个字符集 XML 文件中编辑数组的内容,以指定“-”是一个“字母”。然后为您的 FULLTEXT 索引使用给定的字符集。有关数组格式的信息,请参阅第 10.12.1 节,“字符定义数组”。
Add a new collation for the character set used by the indexed columns, and alter the columns to use that collation. For general
有关添加排序规则的信息,请参阅第 10.13 节,“将排序规则添加到字符集”。有关全文索引的特定示例,请参阅第 12.9.7 节,“为全文索引添加排序规则”。
推荐阅读
- c# - 如何在现有解决方案中在后台运行服务
- sequelize.js - Sequelize:更改生产数据库上的数据库密码
- python - 如何在seaborn clustermap中将Y ticklabels标记为组/类别?
- c# - 变量如何返回为“null”?
- android - Clean Master 应用程序阻止我的应用程序显示通知
- bixby - 我可以从欧洲进行“设备测试”吗
- jquery - 使用 Ajax 将数据发送到 Django 模型
- azure - 如何在 Visual Studio 在线环境中安装 azure-cli
- python - 如何根据选定的边选择最短路径?
- sql - 尝试用不同的值更新所有行