3 回答
TA贡献1803条经验 获得超6个赞
这可能会增加与所需头部的相关性。它不会使它加倍,但它可能对您而言足够好:
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。它允许设置运营商的权重并进行排名。
TA贡献1887条经验 获得超5个赞
我从未这样做过,但似乎
MATCH (head, head, body) AGAINST ('some words' 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
请注意,您正在执行常规的相关性查询,以获取相关性因子以及结合使用BOOLEAN MODE的WHERE子句。BOOLEAN MODE为您提供满足BOOLEAN搜索要求的子集,相关性查询满足相关性因子,并且HAVING子句(在这种情况下)确保文档与搜索相关(即得分小于0.2的文档)被认为无关紧要)。这也允许您按相关性排序。
TA贡献1806条经验 获得超5个赞
我也只是在玩这个。添加额外权重的一种方法是在代码的ORDER BY区域中。
例如,如果要匹配3个不同的列,并希望对某些列进行更重的加权:
SELECT search.*,
MATCH (name) AGAINST ('black' IN BOOLEAN MODE) AS name_match,
MATCH (keywords) AGAINST ('black' IN BOOLEAN MODE) AS keyword_match,
MATCH (description) AGAINST ('black' IN BOOLEAN MODE) AS description_match
FROM search
WHERE MATCH (name, keywords, description) AGAINST ('black' IN BOOLEAN MODE)
ORDER BY (name_match * 3 + keyword_match * 2 + description_match) DESC LIMIT 0,100;
添加回答
举报