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

时间:2017-10-15 14:17:53

标签: mysql full-text-search innodb

这样的查询会返回一个非空集:

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

从表中唯一记录的名称属性是' some_text' 。基本上我想迫使InnoDB在构建全文索引时将下划线视为分隔符,就像使用点和连字符一样。如何在mysql中本地获取,或者甚至使用默认具有此功能的第三方解析器? 谢谢

编辑:我知道最简单的解决方法是复制列并按照我的意愿将单词分开,并在其上构建索引,但如果不是必要的话,我宁愿不这样做,因为该表有数百万行..

1 个答案:

答案 0 :(得分:0)

您正在尝试更改定义单词的字符。需要查看的地方是documentation,用于微调搜索。具体来说,您希望控制单词中允许使用的字符 - 并且您希望_成为非单词字符。

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

  

假设您想将连字符(' - ')视为单词   字符。使用以下方法之一:

     

。 。

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

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

另一种方法是定义第二列,用空格替换下划线,并在其上构建全文索引。

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

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