【问题标题】:MYSQL match against not showing same results as mysql like %% queryMYSQL 匹配不显示与 mysql 相同的结果,如 %% 查询
【发布时间】:2016-02-22 13:15:23
【问题描述】:

我们只是将所有类似 %% 的 mysql 查询迁移到 MATCH Against

我们的旧查询是

SELECT * from jobs where jobtitle like '%php%' 

我尝试了以下查询

SELECT * from jobs where MATCH(jobtitle) AGAINST ('php')
SELECT * from jobs where MATCH(jobtitle) AGAINST ('php'  IN BOOLEAN MODE)

我试过 * + 并且所有但没有查询显示相同的确切结果,显示为 '%php%'

我希望 mysql 查询使用 match against 在职称中的任何位置查找单词

【问题讨论】:

  • 你用的是什么MySQL版本?
  • 请描述差异!
  • 差异意味着什么?只是没有显示相同的确切结果
  • 你能把我的这个查询 SELECT * from jobs where jobtitle like '%php%' 转换成匹配吗?但我想要相同的结果。我希望它在jobtitle的任何地方找到php。我也认为匹配是区分大小写的
  • 我正在使用 mysql 5.6

标签: mysql


【解决方案1】:

要索引的单词的最小和最大长度由 ft_min_word_len 和 ft_max_word_len 系统变量定义。默认最小值为 4 个字符。这就是为什么它不能使用 3 个字符。

您需要更改其值,并重建 FULLTEXT 索引。如果要搜索三个字符的单词,可以通过更改配置文件中的值来设置 ft_min_word_len 变量。或者,如果你有超级用户权限,你可以设置这个环境变量:

SET  ft_min_word_len=3

查看更多详情:http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html

【讨论】:

  • 但它也不像 mysql like %% query 那样显示完全相同的结果
  • 我明白了。它的工作很好。你能告诉我在布尔模式和没有它之间的区别吗?正常匹配或使用布尔值有什么区别
【解决方案2】:

在 mysql v5.6 中,ft_min_word_len 服务器变量的默认值为 4,这意味着 'php' 搜索字符串在自然语言模式和布尔模式下不会返回任何行,除非您将限制降低到 3 和重新创建全文索引。

在 myisam 表的自然语言模式下,如果 php 一词出现在超过 50% 的行中,则查询不会返回任何行。因此,请使用带有 + 运算符的布尔模式。

【讨论】:

  • 你能给我举个例子,你是怎么用 + 运算符使用布尔模式的
  • 来吧,这是你自己的问题! '+php'
  • 我明白了,但我注意到像 %% 和 match 显示不同的结果。使用 match 显示的结果少于 match 为什么会这样
  • 两个答案都建议你做 sg else,而不是简单地改变你的查询!
  • 你的意思是如果我不使用布尔模式,那么只有当单词在 50% 的行中时才会显示结果
猜你喜欢
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 2014-09-04
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多