mysql - 对部分匹配执行全文搜索,其中最短匹配在 MySQL 中具有最高相关性?

标签 mysql full-text-search

我想对列执行全文搜索,查找部分单词匹配(即:against('fra*' in boolean mode))。但我希望收到为匹配的较短单词分配更高相关性的结果。

例如,如果我搜索“fra”并获得结果“frank”、“fran”和“frankfurter”,我希望它们按照相关性进行排序,如下所示:“fran” 、“弗兰克”、“法兰克福”。

有什么办法可以实现这一点吗?

最佳答案

SELECT 
token FROM tokentable 
WHERE token LIKE '%fra' 
ORDER BY CHAR_LENGTH(token) ASC

由于 btree 索引,完成您的示例也非常快。 你还可以这样做:

SELECT 
document FROM documents
WHERE document LIKE '%frankfurter%' 
AND document LIKE '%würstel%' 
ORDER BY CHAR_LENGTH(document) ASC

但这可能是相关性计算的无稽之谈。

简单的回答:如果你只根据前缀进行自动建议,上面的方法就可以了。 无需使用 match against 。 如果你想搜索进行全文搜索,你不能用这样的标准来做到这一点,你应该看看 lucene/solr

关于mysql - 对部分匹配执行全文搜索,其中最短匹配在 MySQL 中具有最高相关性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3887842/

相关文章:

php - 获取某个值的 mysql_query 输出位置(数字)

mysql - 从全文搜索中获取最少数量的结果

php - sphinx 搜索 : Partial keyword

php - Redis作为MySQL写入的缓存

mysql - 作为字段值mysql返回的部分字符串

sql全文搜索不搜索确切的短语

Mysql FULLTEXT 使用 GROUP BY 进行搜索,保留得分最高的行值

postgresql - 如何在具有多个结果的postgresql中进行文本搜索

mysql - sql函数输入

mysql - 在 MySQL/PHP 中实现嵌套顺序集