【问题标题】:MySQL fulltext search gives higher rank size for more word occurences in rowMySQL全文搜索为行中出现更多单词提供更高的排名大小
【发布时间】:2016-05-26 02:24:50
【问题描述】:

“全文索引使得在您索引的列中出现的‘单词’(大于最小长度)越多,返回的行排名的值就越大”


如果我搜索“苹果”:

现在 -

'苹果给我,苹果给你,苹果给stackoverflow'

搜索排名高于

'我吃苹果'

因为在第一行中,“apple”的出现次数是另一行的 3 倍。

如何调整全文搜索以使两行具有相同的搜索排名?


示例查询:

SELECT 
title, description, MATCH (title, description) 
AGAINST ('apple' IN NATURAL LANGUAGE MODE) AS score
FROM my_table
WHERE MATCH(title, description) AGAINST('apple') 

样本表:

+----+--------+----------------------------------- ------------------+ |编号 |标题 |描述 | +----+--------+----------------------------------- ------------------+ | 1 |一个 |苹果给我,苹果给你,苹果给stackoverflow | | 2 |二 |我吃苹果 | +----+--------+----------------------------------- ------------------+

【问题讨论】:

  • 能否在问题中添加查询?
  • MyISAM?还是 InnoDB? (两个都试试)没有IN NATURAL LANGUAGE MODE会怎样?

标签: php mysql sql indexing full-text-search


【解决方案1】:

答案很遗憾,不能配置mysql的全文插件,在加权计算中不考虑搜索词出现在数据中的次数。见this documentation on what you can configure in fulltext searches

使用like或者rlike来达到这个效果,否则需要修改全文插件的源码。

【讨论】:

  • 我家有人建议对这种行为进行一些破解,因为我需要全文搜索,但在我的网站中,我不希望单词出现的次数影响行搜索排名。
  • 您可能不得不求助于替代解决方案,例如 sphinx 以达到预期的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 2010-12-07
  • 2015-10-21
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多