【问题标题】:mysql search query code issuemysql搜索查询代码问题
【发布时间】:2012-12-24 20:58:42
【问题描述】:

这是我执行搜索的代码

SELECT d.deal_id,
       d.deal_title,
       d.friendly_url
FROM wp_deals AS d
WHERE MATCH (d.deal_title) AGAINST ('Ultimate Revitalisation Kit' IN BOOLEAN MODE)
GROUP BY d.deal_id

效果很好。

但是当我搜索 Kit 时,它变成了

SELECT d.deal_id,
       d.deal_title,
       d.friendly_url
FROM wp_deals AS d
WHERE MATCH (d.deal_title) AGAINST ('Kit' IN BOOLEAN MODE)
GROUP BY d.deal_id

并且没有给出任何结果,尽管之前的搜索结果中有 kit。我不是这类搜索查询的专家。但我不得不问,搜索查询不应该使用类似的关键字,即“%kit%”。所以这就是我使用对抗和匹配的原因。有人精通这种高级查询吗?你能让它成为一个出色的搜索查询吗? 请完善。所以看起来比简单的like查询要好。

【问题讨论】:

  • 如果将'Ultimate Revitalisation Kit' 更改为'Ultimate%Revitalisation%Kit' 会有什么结果?
  • 看到了这个earlier thread,这个人正在搜索关键字foobar,就像这个MATCH (t1.foo_desc, t2.bar_desc) AGAINST ('+foo* +bar*' IN BOOLEAN MODE)
  • 我不会将“Ultimate Revitalization Kit”更改为“Ultimate%Revitalisation%Kit”。我说的是当我使用 Ultimate Revitalization Kit 搜索时。它会给出结果。一个结果是“Ultimate Revitalization Kit”。但是当我使用单个关键字搜索时,即 Kit 它什么也没提供。

标签: php mysql sql


【解决方案1】:

您需要更改 mySQL 安装的 /etc/my.conf。默认情况下,全文搜索仅使用 4 个字符作为最小字长。您需要将其更改为 3。

ft_min_word_len = 3

您还需要重建表上的全文索引。您可以通过运行 REPAIR 命令来做到这一点:

REPAIR TABLE my_table QUICK;

或者您可以删除并重新创建索引。

执行此操作并重新启动 mysql。您的搜索现在可以工作了。

【讨论】:

  • 我正在使用 xamp。它在哪里?
  • MySQL 配置文件 (my.cnf): C:\Program Files\xampp\mysql\bin\my.cnf
  • 您的全文索引也必须更加努力地获取所有 3 个字母的单词,否则 3 个字母的单词搜索将不会出现在结果中。
  • +1:这是正确答案(话虽如此,全文搜索默认为至少四个字符是有充分理由的;将其更改为三个可能会解决问题,但可能不会对性能有好处)
  • 是的,4个字母没问题。但奇怪的是,它也不能用“加号”或“四”作为关键字。虽然你在deal_title中..
猜你喜欢
  • 2013-07-19
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多