【问题标题】:Match against query not working匹配查询不起作用
【发布时间】:2014-08-28 16:33:28
【问题描述】:

我在我的应用程序中使用了类似查询和全文搜索查询

like 查询给了我想要的结果,但全文查询没有给出正确的值 喜欢查询-

Select * from tablename where colname like '% value %'

select * from tablename where MATCH(colname) AGAINST(' value ' IN BOOLEAN MODE)

like 查询给了我大约 1000 行的正确结果,但第二个查询没有给我任何结果。虽然这两个查询是相似的搜索相同的单词和在同一个表的同一列 请突出显示我在第二个查询中出错的地方

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    空格被视为单词终止符,因此' value ' 不会匹配任何单词,因为其中没有包含空格的单词。您应该将第二个查询更改为:

    SELECT * 
      FROM tablename 
     WHERE MATCH (colname) AGAINST ('value' IN BOOLEAN MODE);
    

    如果您正在搜索确切的单词 'value',它是 MyISAM 表的 stopword,因此不会为 MyISAM 表返回任何行。

    来自stopword 页面:

    要覆盖 MyISAM 表的默认停用词列表,请设置 ft_stopword_file 系统变量。 (参见第 5.1.4 节,“Server System Variables”)。

    或者您可以切换到 InnoDB 引擎。

    【讨论】:

    • 仍然是相同的结果 sir.full 文本查询返回零行
    • 所以这意味着如果我们使用的是MYISAM表引擎。全文将无法使用?是吗?
    • @peterjoseph 你点击链接了吗?不是用“价值”这个词,除非你有机会找到 ft_stopword_file 并重建索引。
    • 对不起,我不明白如何更改 ft_stopword_file 然后重建索引
    • 要更改该变量,请使用 SET statement (正如 Arth 在他的回答中的链接所建议的那样);要重建索引,您只需 drop itrecreate it
    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    相关资源
    最近更新 更多