小编典典

以最喜欢的方式订购SQL?

sql

我有以下查询:

SELECT * FROM table_name
WHERE (col_1 LIKE '%$keyword%'
    OR col_2 LIKE '%$keyword%'
    OR col_3 LIKE '%$keyword%')
  AND .... <some optional filters> ...

是否有根据最相关结果进行分类的策略?


阅读 170

收藏
2021-05-05

共1个答案

小编典典

当谈论“相关性”时,您确实想要自然语言搜索,这是MySQL全文搜索支持的。语法是比正常的不同 一样 的查询,你需要一个特殊的索引添加到表中,但排序按相关性可能是这样。

这是MySQL计算相关性的方式(来自链接):

如前面的示例所示,在WHERE子句中使用MATCH()时,返回的行将自动按照相关性最高的顺序进行排序。相关性值是非负浮点数。零相关性意味着没有相似性。相关性是根据行中的单词数,该行中唯一单词的数量,集合中单词的总数以及包含特定单词的文档(行)的数量来计算的。

在现有表上创建全文索引,请使用
FULLTEXT 修饰符:

CREATE FULLTEXT INDEX index_name
ON table_name (col1, col2, col3)

然后,您可以执行如下查询以按相关顺序检索结果:

SELECT * FROM table_name
WHERE MATCH (col1,col2,col3)
AGAINST ('keyword' IN NATURAL LANGUAGE MODE);
2021-05-05