这样的查询会返回一个非空集:
SELECT * FROM mytable WHERE MATCH(name) AGAINST ('+some +text' IN BOOLEAN MODE);
从表中唯一记录的名称属性是' some_text' 。基本上我想迫使InnoDB在构建全文索引时将下划线视为分隔符,就像使用点和连字符一样。如何在mysql中本地获取,或者甚至使用默认具有此功能的第三方解析器? 谢谢
编辑:我知道最简单的解决方法是复制列并按照我的意愿将单词分开,并在其上构建索引,但如果不是必要的话,我宁愿不这样做,因为该表有数百万行..
答案 0 :(得分:0)
您正在尝试更改定义单词的字符。需要查看的地方是documentation,用于微调搜索。具体来说,您希望控制单词中允许使用的字符 - 并且您希望_
成为非单词字符。
一种推荐的方法是修改字符集文件:
假设您想将连字符(' - ')视为单词 字符。使用以下方法之一:
。 。
- 修改字符集文件:这不需要重新编译。 true_word_char()宏使用“字符类型”表来区分 来自其他角色的字母和数字。 。您可以编辑内容 其中一个字符集XML文件中的数组 指定' - '是一个“字母。”然后使用给定的字符集 你的FULLTEXT索引。有关阵列的信息 格式,请参见第10.3.1节“字符定义数组”。
唯一的缺点是这将影响所有全文索引。
另一种方法是定义第二列,用空格替换下划线,并在其上构建全文索引。
如果您想要特定于索引的方法,那么另一个选择是定义您自己的排序规则。
注意:您可能还需要注意最小字数。默认值为3或4;较小的单词被忽略。