使用部分词汇匹配和相关度得分进行高效搜索(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%
含义; 第二个查找精确的短语。 得分以浮点形式返回。
上一篇: Efficient search with partial word match and relevancy score (FULLTEXT)