使用部分词汇匹配和相关度得分进行高效搜索(FULLTEXT)

我怎样才能做一个匹配部分单词的MySQL搜索,并提供准确的相关性排序?

SELECT name, MATCH(name) AGAINST ('math*' IN BOOLEAN MODE) AS relevance
FROM subjects
WHERE MATCH(name) AGAINST ('math*' IN BOOLEAN MODE)

布尔模式的问题是相关性总是返回1,所以结果的排序不是很好。 例如,如果我在搜索结果上设置了5的限制,则返回的那些有时似乎不是最相关的。

如果我在自然语言模式下进行搜索,我的理解是相关性得分很有用,但我无法匹配部分单词。

有没有办法执行满足所有这些标准的查询:

  • 可以匹配部分词语
  • 结果以准确的相关性返回
  • 高效
  • 到目前为止,我所得到的最好的结果是:

    SELECT name
    FROM subjects
    WHERE name LIKE 'mat%'
    UNION ALL
    SELECT name
    FROM subjects
    WHERE name LIKE '%mat%' AND name NOT LIKE 'mat%'
    

    但我宁愿不要使用LIKE


    一年后,我在这个(有些)重复问题中获得了一个很好的解决方案:

    MySQL - 如何获得准确相关的搜索结果


    MySQL 5.6中的新InnoDB全文搜索功能有助于解决这种情况。 我使用以下查询:

    SELECT MATCH(column) AGAINST('(word1* word2*) ("word1 word1")' IN BOOLEAN MODE) score, id, column 
    FROM table
    having score>0
    ORDER BY score 
    DESC limit 10;
    

    where ( )将单词分组成一个子表达式。 第一组拥有like word%含义; 第二个查找精确的短语。 得分以浮点形式返回。

    链接地址: http://www.djcxy.com/p/13111.html

    上一篇: Efficient search with partial word match and relevancy score (FULLTEXT)

    下一篇: About Mysql Fulltext Search