首页 > 解决方案 > 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

我怀疑它与=但不知道如何使用*()+它需要的行为方式有关,尝试了一些不同的组合但没有成功。

标签: phpmysqlsearchfull-text-searchcodeigniter-2

解决方案


=不被视为单词字符,因此不被索引

来自: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 节,“为全文索引添加排序规则”。


推荐阅读