Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql基于词的相关性向量搜索_Postgresql_Full Text Search_Tsvector - Fatal编程技术网

Postgresql基于词的相关性向量搜索

Postgresql基于词的相关性向量搜索,postgresql,full-text-search,tsvector,Postgresql,Full Text Search,Tsvector,让我们先设置上下文: 我们的数据库是postgres 8.4.20 我的表格包含一个非常大的全名列表 这些名称只能在一列中 我们使用向量来搜索这个表 我们需要快速搜索 现在问题来了: 我可以很快地搜索整个表,而且它似乎按预期工作。当您搜索的主题有两个姓氏时,会出现问题,如: 拉蒙·弗洛雷斯·弗洛雷斯 欧内斯托·莫拉莱斯·莫拉莱斯 在这种特殊情况下,它将带来数据库中包含“Ramón Flores”或“Ernesto Morales”的所有记录 我想要的是能够只带来包含“拉蒙·弗洛雷斯·

让我们先设置上下文

  • 我们的数据库是postgres 8.4.20
  • 我的表格包含一个非常大的全名列表
  • 这些名称只能在一列中
  • 我们使用向量来搜索这个表
  • 我们需要快速搜索
现在问题来了: 我可以很快地搜索整个表,而且它似乎按预期工作。当您搜索的主题有两个姓氏时,会出现问题,如:

  • 拉蒙·弗洛雷斯·弗洛雷斯

  • 欧内斯托·莫拉莱斯·莫拉莱斯

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

我想要的是能够只带来包含“拉蒙·弗洛雷斯·弗洛雷斯”或“埃内斯托·莫拉莱斯·莫拉莱斯”的唱片。 我的想法是创建另一列,其中包含每条记录的统计信息,并添加一些WHERE子句,仅当每个单词只出现一次时才进行选择

提前感谢:)

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

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

t_-rank当我们面对一个包含2或3个相同单词的字符串时(一旦你将它们“矢量化”,如果这甚至是一个单词),会表现出某种奇怪的行为。因此,在一天结束时,当你发现这2或3个相同的单词时,你需要比较这些字符串并使用不同的t_-rank规则

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

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