【问题标题】:Perform a full text search for partial matches where shortest match has the highest relevance in MySQL?对 MySQL 中最短匹配具有最高相关性的部分匹配执行全文搜索?
【发布时间】:2011-04-22 17:13:22
【问题描述】:

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

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

有什么办法可以实现吗?

【问题讨论】:

    标签: mysql full-text-search


    【解决方案1】:
    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

    【讨论】:

      猜你喜欢
      • 2015-04-01
      • 1970-01-01
      • 2010-10-01
      • 2012-04-01
      • 1970-01-01
      • 2017-08-30
      • 2011-03-04
      • 2023-01-02
      • 1970-01-01
      相关资源
      最近更新 更多