在MySQL全文搜索中,给一些字段更多的相关性并按相关性排序。

6

我在文章表中有两个字段 - post_titlepost_content。现在我使用标准的全文搜索来匹配这两个字段中的某些关键词。我需要让标题字段比内容字段更相关,并按相关性对结果进行排序...

要实现这个目标,mysql语法应该怎么写呢?我使用的是mysql 5.1

1个回答

19

首先,创建三个全文索引:

* one on the title column
* one on the body column
* one on both title and body columns

接下来,按照以下方式构建您的查询:

SELECT field1, field2, field3, title, body,
MATCH (title) AGAINST ('word_to_search') AS rel_title,
MATCH (body) AGAINST ('word_to_search') AS rel_body
FROM table_to_use
WHERE MATCH (title,body) AGAINST ('word_to_search')
ORDER BY (rel_title*2)+(rel_body)

这将使标题的相关性比正文高出两倍。

当您需要允许内容按标签排序(用户不可见)时,这非常方便,因为它允许您在幕后调整结果。


2
我给了你一个赞..但是我仍然不喜欢3个索引......就是不喜欢它... - Phung D. An
这个操作的成本是多少?我们一遍又一遍地匹配!! - Raheel Hasan
嗨,Pham,你能说一下为什么你不喜欢它吗?如果可以的话,你有什么改进的建议吗? - Filipe Melo
嗨,Raheel,这很昂贵,因为所有操作都在数据库中完成。你可以将所有数据提取出来,在代码中进行操作。你有任何改进建议吗? - Filipe Melo
这又是一个权衡取舍的问题。需求与性能之间的平衡:| 感谢您的回答! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接