我对MySQL表中的全文搜索有一个问题。
MATCH AGAINST不返回任何结果,即使我有7条包含我正在寻找的单词的记录。我该怎么做才能让它返回行?
SELECT *
FROM site_plugin_products_cache_texts
WHERE MATCH(item_text) AGAINST ('+your +name' IN BOOLEAN MODE);没有排。
SELECT *
FROM site_plugin_products_cache_texts
WHERE item_text LIKE'%your name%'7排(S 0.071)
http://sqlfiddle.com/#!9/70c3fa/1/0
谢谢。
发布于 2018-05-05 02:29:26
你知道MySQL有一个停止词列表吗?
对于MyISAM,有543个单词没有包含在全文索引中?
在MySQL5.6文档中(用于MyISAM搜索索引的停止词),你可以看到列表。
name在第55行第4列your在第108行第4栏所以所有搜索这两个词的尝试都会失败。
如果将表转换为InnoDB,删除并创建FullText索引,您将找到它们。InnoDB全文索引只有36个停止词。
如果表必须保持为MyISAM,则必须提供一个空的停止词列表,重新启动mysqld,删除并再次创建FullText索引。
以下是我过去在这方面的一些帖子:
May 23, 2011:StackOverflow(优化mysql全文搜索)Oct 25, 2011:布尔模式中忽略的带有“字数”条件的全文索引Jan 26, 2012:Mysql全文搜索my.cnf优化May 07, 2012:MySQL解释没有显示全文的“使用索引”Apr 24, 2013:MySQL -SQL语句以测试单词ft的最小长度_最小_单词_兰‘请参阅关于如何设置和空停止字列表的Jan 26, 2012帖子。
如果您在中运行此操作
SELECT * FROM site_plugin_products_cache_texts
WHERE match(item_text) AGAINST ('+CALL' IN BOOLEAN MODE);这将起作用,因为CALL不在停止词列表中。
https://dba.stackexchange.com/questions/205903
复制相似问题