我想对列执行全文搜索,查找部分单词匹配(即: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/