【发布时间】:2011-04-22 17:13:22
【问题描述】:
我想对一列执行全文搜索,寻找部分单词匹配(即:against('fra*' in boolean mode))。但我希望收到与匹配的较短单词具有更高相关性的结果。
因此,例如,如果我搜索“fra”并获得结果“frank”、“fran”和“frankfurter”,我希望它们按照相关性进行排序,如下所示:“fran” , '坦率', '法兰克福香肠'。
有什么办法可以实现吗?
【问题讨论】:
我想对一列执行全文搜索,寻找部分单词匹配(即: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
但这可能是相关性计算的废话。
简单的回答:如果你只根据前缀进行自动提示,上面的方法就可以了。 没有必要使用匹配。 如果你想搜索做全文搜索,你不能用这样的标准来做,你应该看看 lucene/solr
【讨论】: