【问题标题】:How can you build such a full-text index that treats underscores as separate words in InnoDB?在 InnoDB 中,如何构建这样一个将下划线视为单独单词的全文索引?
【发布时间】:2017-10-15 14:17:53
【问题描述】:

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

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

来自唯一记录名称属性为 'some_text' 的表。基本上,我想强制 InnoDB 在构建全文索引时将下划线视为分隔符,就像对点和连字符一样。这如何在 mysql 中本地实现,甚至使用默认情况下具有此功能的 3rd 方解析器? 谢谢

编辑:我知道最简单的解决方案是复制该列并按照我的意愿分隔那里的单词并在此基础上建立索引,但如果没有必要,我宁愿不这样做,因为该表有数百万行数..

【问题讨论】:

    标签: mysql full-text-search innodb


    【解决方案1】:

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

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

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

    。 . .

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-16
      • 2016-04-28
      • 2010-12-05
      • 2017-01-05
      • 1970-01-01
      • 2012-06-30
      • 2021-04-22
      • 2014-11-21
      • 1970-01-01
      相关资源
      最近更新 更多