【发布时间】:2020-08-13 02:51:53
【问题描述】:
我正在尝试在 mysql 中进行全文搜索。我希望当我传入一个字符串时,当我使用 [自然语言模式]mysql - fulltext index - what is natural language mode 时,我会收到按相关性排名。
这是我创建索引的方式:CREATE FULLTEXT INDEX item_name ON list_items(name);
当我使用 LIKE 时,我会收到结果,但我想按相关性对它们进行排序。因此,全文搜索。
这是我使用 LIKE 的查询:SELECT name FROM list_items WHERE name LIKE "%carro%";
这导致Carrots, Carrots, Carrots 等。
这是我尝试 MATCH 搜索的查询:SELECT name FROM list_items WHERE MATCH(name) AGAINST('carro' IN NATURAL LANGUAGE MODE); 没有返回任何结果。
我的查询基于此帖子的选定答案:Order SQL by strongest LIKE? 还有这个页面:https://www.w3resource.com/mysql/mysql-full-text-search-functions.php
即使我在没有自然语言模式或布尔模式的情况下运行查询,我也没有得到任何结果。我错过了什么?
【问题讨论】:
-
全文搜索默认搜索完整的单词。要查找以文本开头的单词,请使用通配符 (
'carro*')。这无法在单词中间找到文本(就像您可以使用like '%carro%'一样)。还要注意相关性意味着什么,并且您几乎无法控制 MySQL 认为相关的内容。它是根据一个单词的稀有程度来计算的。如果您的列包含 3 次“Carrot”和 1 次“Carrotcake”,那么即使您认为“carrot”看起来更类似于“carro*”,carrotcake 比 carrot 更相关。对其进行测试,但请检查全文索引是否适合您的要求。 -
那么在这里使用
LIKE会更好吗? -
由于您没有指定您的要求(例如,如果您想在单词中间搜索,或者您认为相关的内容),我无法告诉您
like是否是更好的选择.我只是想评论一下,您应该测试和检查(或详细说明)您的要求,如果它们符合全文搜索可以(和不能)做的事情(如果不能,我们可能会指导您寻找替代解决方案)。跨度>