MySQL匹配()反对()
好的,所以我试图在多个栏目中进行全文搜索,像这样简单:
SELECT * FROM pages WHERE MATCH(head, body) AGAINST('some words' IN BOOLEAN MODE)
现在我想按照相关性排序(可以找到多少个单词?),我已经能够用这样的方式做到这一点:
SELECT * , MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) AS relevance
FROM pages
WHERE MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE)
ORDER BY relevance
现在我来了迷路的部分,我想优先考虑head栏的相关性。
我想我可以创建两个相关的列,一个用于head ,另一个用于body ,但是在那个时候,我会在表格中进行三次相同的搜索,并且为了实现这个功能,性能很重要,因为查询将被连接并与其他表相匹配。
所以,我的主要问题是 ,是否有更快的方式来搜索相关性并确定某些列的优先顺序? (作为一个奖金,甚至可能使相关次数的单词出现在列中?)
任何建议或建议都会很棒。
注意:我将在LAMP服务器上运行此操作。 (WAMP在本地测试)
这可能会增加您想要的头部部分的相关性。 它不会加倍,但它可能足够你的缘故:
SELECT pages.*,
MATCH (head, body) AGAINST ('some words') AS relevance,
MATCH (head) AGAINST ('some words') AS title_relevance
FROM pages
WHERE MATCH (head, body) AGAINST ('some words')
ORDER BY title_relevance DESC, relevance DESC
-- alternatively:
ORDER BY title_relevance + relevance DESC
如果您有切换数据库引擎的灵活性,另一种您也想调查的方法是Postgres。 它允许设置操作员的重量并玩弄排名。
我从来没有这样做,但似乎
MATCH (head, head, body) AGAINST ('some words' IN BOOLEAN MODE)
应该给在头部找到的匹配双重。
请在文档页面阅读此评论,认为它可能对您有价值:
由Patrick O'Lone于2002年12月9日上午6:51发布
应该在文档中注意IN BOOLEAN MODE几乎总会返回1.0的相关性。 为了获得有意义的相关性,您需要:
SELECT MATCH('Content') AGAINST ('keyword1 keyword2') as Relevance
FROM table
WHERE MATCH ('Content') AGAINST('+keyword1+keyword2' IN BOOLEAN MODE)
HAVING Relevance > 0.2
ORDER BY Relevance DESC
请注意,您正在执行常规相关性查询以获取与使用布尔模式的WHERE子句相关的相关因素。 BOOLEAN MODE为您提供满足BOOLEAN搜索要求的子集,相关查询实现相关因子,HAVING子句(在这种情况下)确保文档与搜索相关(即得分低于0.2的文档被认为是不相关的)。 这也可以让你按相关性排序。
尽管我在邮件列表上看到的评论表明IN BOOLEAN MODE的相关性排名不是很复杂,因此实际上提供相关文档的能力很差,但这可能也可能不是一个错误。 顺便说一句 - 我没有注意到这样做的性能损失,因为它似乎MySQL只执行一次FULLTEXT搜索,即使两个MATCH子句是不同的。 使用EXPLAIN来证明这一点。
所以看起来您可能不需要担心两次调用全文搜索,尽管您仍然应该“使用EXPLAIN来证明这一点”
只需添加谁可能需要..不要忘记改变桌子!
ALTER TABLE table_name ADD FULLTEXT(column_name);
链接地址: http://www.djcxy.com/p/75315.html
下一篇: Mysql search with Match Against for searching relevant words
