1

让我们先设置上下文

  • 我们的数据库是 postgres 8.4.20
  • 我的表包含一个非常大的全名列表。
  • 这些名称只能在一列中。
  • 我们正在使用向量来搜索此表。
  • 我们需要快速搜索。

现在的问题是:我可以非常快速地搜索整个表格,而且它似乎按预期工作。当您要搜索的主题有 2 个姓氏时,就会出现问题,例如:

  • 拉蒙弗洛雷斯弗洛雷斯

  • 埃内斯托·莫拉莱斯

    在这种特殊情况下,它将带入数据库中包含“Ramón Flores”或“Ernesto Morales”的每条记录。

我正在寻找的是能够只带来包含“Ramón Flores Flores”或“Ernesto Morales Morales”的记录。我在想的是创建另一个包含每条记录的统计信息的列,并添加一些 WHERE 子句以仅在每个单词仅出现一次时选择。

提前致谢 :)

[编辑] 进度说明 #1: 嗯,我尝试使用 ts_rank来赋予这些结果一些意义,然后我使用 WHERE 子句 > 0.1。虽然正在帮助我缩小这些结果的范围,但这还不是一个完整的解决方案。我会继续研究:)

4

1 回答 1

0

虽然ts_rank提供了某种替代方案来解决这个问题……但似乎不可能仅使用 postgres 来实现我想要实现的目标。

当我们面对一个包含 2 或 3 个相同单词的字符串时, ts_rank 的行为有点奇怪(一旦你“矢量化”它们;如果那是一个单词)所以,在一天结束时,你需要比较这些字符串并使用不同的ts_rank规则,当你找到这 2 或 3 个相同的单词。

我的主程序是用 PHP 编写的,所以我最终使用该层来比较我的单词并使用正确的规则。

我仍然希望有人能帮助我找到更好的方法。

于 2015-01-15T16:43:12.503 回答