首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL全文周期

MySQL全文周期
EN

Stack Overflow用户
提问于 2014-02-11 08:01:58
回答 2查看 2.2K关注 0票数 1

我有一张产品名称表,全文在使用一段时间之前工作得很好,例如搜索3.7个电池。我试着

代码语言:javascript
复制
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表创建。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-11 08:11:15

如在微调MySQL全文搜索下所记录的

可以通过多种方式更改视为单词字符的字符集,如下面的列表所述。修改后,为每个包含任何FULLTEXT索引的表重新生成索引。假设要将连字符('-')视为单词字符。使用以下方法之一:

  • 修改MySQL源代码:在storage/myisam/ftdefs.h中,请参阅true_word_char()misc_word_char()宏。将'-'添加到其中一个宏中并重新编译MySQL。
  • 修改字符集文件:这不需要重新编译。true_word_char()宏使用“字符类型”表来区分字母和数字与其他字符。。您可以在一个字符集XML文件中编辑<ctype><map>数组的内容,以指定'-'是一个“字母”。然后为您的FULLTEXT索引使用给定的字符集。有关<ctype><map>数组格式的信息,请参阅第10.3.1节,“字符定义数组”
  • 为索引列使用的字符集添加新排序规则,并更改列以使用该排序规则。有关添加排序规则的一般信息,请参阅第10.4节,“向字符集添加排序规则”。有关全文索引的示例,请参见第12.9.7节,“为全文索引添加排序规则”
票数 0
EN

Stack Overflow用户

发布于 2019-05-12 03:23:51

代码语言:javascript
复制
where match(name) against ('+battery' in boolean mode)
  AND name LIKE '%3.7v%'

在构建查询时,这需要应用程序中的一些智能。

其他变体:

这就确保了3.7v就在电池旁边:

代码语言:javascript
复制
where match(name) against ('+battery' in boolean mode)
  AND name LIKE '%3.7v battery%'

这确保了它周围有单词的边界:

代码语言:javascript
复制
where match(name) against ('+battery' in boolean mode)
  AND name REGEXP '[[:<:]]3.7v[[:>:]]'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21696235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档