按相关度排序的帖子中的全文搜索

时间:2011-07-03 作者:Smaug

我正在构建一个自定义搜索页面,我需要的是按相关性(例如关键字的出现次数)对结果进行排序

使用MySQL docs 我构建了以下查询:

SELECT ID
FROM $wpdb->posts
WHERE MATCH (post_title, post_content) AGAINST (\'$keyword_list\')
AND post_status = \'publish\'
AND post_type = \'issue\'
Problem A) 如果我使用在我的测试帖子中多次出现的关键字对其进行测试,它确实会找到这些帖子,但它没有按照相关性正确排序。例如,第一个找到的帖子大约有3个关键字出现,而第三位返回的帖子大约有15个关键字出现。

Problem B) 有两个帖子包含关键字“medicare”,如果我搜索“medicare”,它会返回这些帖子,但是当我搜索“medi”、“medic”等时,它不会返回任何内容。

有没有一种方法可以使用MATCH/country查询它,或者我必须使用LIKE%-在这种情况下,如何按相关性排序。

谢谢

3 个回复
SO网友:Aleh

您可能需要检查Sphinx搜索引擎http://sphinxsearch.com/

我花了大约一天的时间来设置它并学习如何使用它,但它在按相关性排序和语法词干方面做得非常好。此外,由于索引,它比全文搜索大数据集更快。

SO网友:MathSmath

这并不能解决问题B,但就问题A而言:我认为全文搜索不会自动按相关性排序。我敢肯定,你必须选择“反对”条款,甚至将相关性纳入结果。例如:

... WHERE MATCH (post_title, post_content) AGAINST (\'$keyword_list\') as relevance ...
... ORDER BY relevance
但我也同意Aleh的观点:如果你在寻找一个复杂的搜索引擎,你可能需要一些专门为此设计的东西,比如狮身人面像。

SO网友:O. Jones

这在您的情况下可能很重要,也可能不重要,但是FULLTEXT 当没有太多的文本可供搜索时,搜索的效果非常奇怪。在一个小数据集上进行测试真是一件让人头疼的事。在处理小型文本数据集时,可能需要尝试布尔模式。

你应该试试。。。

 WHERE MATCH (post_title, post_content) 
       AGAINST (\'keyword keyword keyword\' IN BOOLEAN MODE)
@MathSmath关于相关性排序的观点也是正确的。

结束