我有以下查询:
SELECT * FROM table_name WHERE (col_1 LIKE '%$keyword%' OR col_2 LIKE '%$keyword%' OR col_3 LIKE '%$keyword%') AND .... <some optional filters> ...
是否有根据最相关结果进行分类的策略?
当谈论“相关性”时,您确实想要自然语言搜索,这是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);