0

我正在尝试使用 postgresql 的文本搜索,我使用表的现有两列创建了一个 ts_vector 列,并使用 GIN 索引对该列进行索引。现在,当我查询时,我注意到一个奇怪的行为,当我使用“&”或“|”等运算符时,查询的分数会降低 在 to_tsquery 函数中。

对于 100 万条记录:-

  1. 解释 select title, body from xyz ff where search_vector @@ to_tsquery('english', 'apps'); --> 分数在 300 左右
  2. 解释 select title, body from xyz ff where search_vector @@ to_tsquery('english', 'apps & apps'); --> 分数在 30 左右

这种行为我无法理解,查询的区别在于使用运算符,如果我将其更改为“应用程序和租户”,那么分数也在 30 左右,但对于单字搜索,分数很高。有人可以解释这种行为及其背后的原因。

提前致谢。

4

2 回答 2

0

通过“分数”,我是否应该假设您的意思是 EXPLAIN 报告的行估计?

此类事物的行估计通常不是很好。你为什么在乎?你有错误的计划吗?如果是这样,请更详细地解释您正在获得什么计划,您认为您应该获得什么计划,以及您为什么这么认为。

你在做学术研究吗?在这种情况下,您绝对不应该使用 9.5。甚至关心性能的人都不应该使用 9.5,更不用说做学术研究的人了。

于 2020-04-19T21:05:46.023 回答
0

当您使用运算符&|告诉to_tsquery函数以获取在您的行中有两个单词的规则时。例如,如果您输入 `to_tsquery('english', 'apps & tenant',则您的结果需要包含查询中的两个单词(顺序不一样)。因此,查询将搜索这两个单词。

另一件会影响你得分的事情是搜索的权重。

此链接中,您可以更好地了解运营商。

于 2020-04-19T20:24:21.317 回答