如何构建这样一个全文索引,将下划线看作InnoDB中的单词?

问题描述:

所以,这样的查询将返回一个非空集:如何构建这样一个全文索引,将下划线看作InnoDB中的单词?

SELECT * FROM mytable WHERE MATCH(name) AGAINST ('+some +text' IN BOOLEAN MODE);

从一个表,其中只记录的名称属性为“SOME_TEXT”。基本上,我想强制InnoDB在构建全文索引时将下划线视为分隔符,就像使用点和连字符一样。这怎么可能在mysql中本地执行,或者甚至默认有第三方解析器? 谢谢

编辑:我知道最简单的解决办法是复制列,并根据需要将单词分开,然后构建索引,但我宁愿不这样做,如果不是必要的,因为表有数百万行..

您正试图改变定义一个字的字符。查找的地方在documentation上,用于微调搜索。具体而言,您想控制单词中允许使用哪些字符 - 并且您想要_为非单词字符。

一个推荐的方法是修改字符集文件:

假设你要正确对待连字符(“ - ”)作为一个字 字符。使用以下方法之一:

。 。 。

  • 修改字符集文件:这不需要重新编译。所述true_word_char()宏使用“字符类型”表,以区分其他字符 字母和数字。 。您可以将其中一个字符集XML文件中的数组 编辑为 指定' - '是“字母”。然后使用给定的字符集为 您的FULLTEXT索引。有关数组 格式的信息,请参见第10.3.1节“字符定义阵列”。

唯一的缺点是,这会影响所有全文索引。

另一种方法是定义一个用空格代替下划线第二列,并以此为基础的全文索引。

如果你想要一个索引特定的方法,那么另一个选择是定义你自己的排序规则。

注意:您可能还需要小心的最低字的大小。默认值是3或4;较小的单词被忽略。