我有一张产品名称表,全文在使用一段时间之前工作得很好,例如搜索3.7个电池。我试着
select .. where match(name) against ('+3.7v +battery' in boolean mode)我看到了用双引号(即against ('+\"3.7v\"' in boolean mode)或against ('\"3.7v\"' in boolean mode) )括起来的建议。
也不返回任何结果。我查看了默认的停止词列表(https://dev.mysql.com/doc/refman/5.1/en/fulltext-stopwords.html),没有看到指定的句点。
我看了看http://dev.mysql.com/doc/refman/5.6/en/fulltext-fine-tuning.html,看到ft_min_word_len是3,这个应该适合。
有人有什么建议吗?
编辑: /dev.mysql.com/doc/refman/5.6/en/fulltext-natural-language.html说,全文解析器通过查找特定的分隔符来确定单词的起始和结束位置;例如,“”(空格)“”、“(逗号)”和“”。(期间)。
我想这些分隔符字符与停止词列表不同。有没有任何方法可以在不修改源代码的情况下配置这些代码?不幸的是,我使用的是最近才添加了全文功能的InnoDB,而全文解析器插件只能在5.6中为MyISAM表创建。
发布于 2014-02-11 08:11:15
如在微调MySQL全文搜索下所记录的
可以通过多种方式更改视为单词字符的字符集,如下面的列表所述。修改后,为每个包含任何
FULLTEXT索引的表重新生成索引。假设要将连字符('-')视为单词字符。使用以下方法之一:
storage/myisam/ftdefs.h中,请参阅true_word_char()和misc_word_char()宏。将'-'添加到其中一个宏中并重新编译MySQL。true_word_char()宏使用“字符类型”表来区分字母和数字与其他字符。。您可以在一个字符集XML文件中编辑<ctype><map>数组的内容,以指定'-'是一个“字母”。然后为您的FULLTEXT索引使用给定的字符集。有关<ctype><map>数组格式的信息,请参阅第10.3.1节,“字符定义数组”。发布于 2019-05-12 03:23:51
where match(name) against ('+battery' in boolean mode)
AND name LIKE '%3.7v%'在构建查询时,这需要应用程序中的一些智能。
其他变体:
这就确保了3.7v就在电池旁边:
where match(name) against ('+battery' in boolean mode)
AND name LIKE '%3.7v battery%'这确保了它周围有单词的边界:
where match(name) against ('+battery' in boolean mode)
AND name REGEXP '[[:<:]]3.7v[[:>:]]'https://stackoverflow.com/questions/21696235
复制相似问题