gpt4 book ai didi

postgresql - 为什么此 PostgreSQL 全文搜索在不同的 (RDS) 服务器上中断?

转载 作者:行者123 更新时间:2023-11-29 11:23:39 25 4
gpt4 key购买 nike

在几个开发服务器上,这个查询返回了预期的记录:

SELECT name, name_tsv FROM vision 
WHERE name_tsv @@ plainto_tsquery('Washington Square Park');

name_tsv 最初是在我的开发服务器上填充的

UPDATE vision SET name_tsv=to_tsvector(name);

并通过触发器保持最新。

我在 AWS PostgreSQL RDS 实例上创建了相同的数据库。 dev 和 RDS postgres 版本均为 9.3.1。据我所知,每个上的 pg_catalog 都具有相同的 FTS 配置、字典、解析器和模板(默认;我没有弄乱这里的任何内容)。当然,我无法访问 RDS 实例上的 pg conf 文件。在此 RDS 实例上,上述查询返回 0 条记录。

我对两者都运行了这个诊断查询:

SELECT name, 
name_tsv,
to_tsvector(name),
plainto_tsquery('Washington Square Park'),
name_tsv @@ plainto_tsquery('Washington Square Park') AS matches_stored_name,
to_tsvector(name) @@ plainto_tsquery('Washington Square Park') AS matches_fresh_tsvector
FROM vision WHERE id_vision = 2977;

RDS实例上的结果是:

"1609: Washington Square Park";"'1609':1 'park':4 'squar':3 'washington':2";"'1609':1 'park':4 'square':3 'washington':2";"'washington' & 'square' & 'park'";f;t

开发实例的结果是:

"1609: Washington Square Park";"'1609':1 'park':4 'squar':3 'washington':2";"'1609':1 'park':4 'squar':3 'washington':2";"'washington' & 'squar' & 'park'";t;t

从上面看来,在 RDS 上,to_tsvector() 和 plainto_tsquery() 似乎都不会生成它们在开发服务器上执行的截断词素“squar”(相同的无词素模式发生在其他字符串上)。但是,我尝试运行

UPDATE vision SET name_tsv=to_tsvector(name);

在 RDS 服务器上,但 name_tsv 没有改变(仍然 = "'1609':1 'park':4 'squar':3 'washington':2")。

我可以在新的 RDS 服务器上做些什么来使第一个查询返回预期的记录,就像在我的开发服务器上一样?我想我只需要使 plainto_tsquery('Washington Square Park') 将标记规范化为词素(例如返回'squar'而不是'square'),但我无法从this中分辨出来怎么做。

最佳答案

这个查询:

SELECT name, name_tsv FROM vision 
WHERE name_tsv @@ plainto_tsquery('Washington Square Park');

使用默认字典。我会说两台机器的默认字典不同。见:

regress=> SELECT plainto_tsquery('Washington Square Park');
plainto_tsquery
---------------------------------
'washington' & 'squar' & 'park'
(1 row)

regress=> SELECT plainto_tsquery('english', 'Washington Square Park');
plainto_tsquery
---------------------------------
'washington' & 'squar' & 'park'
(1 row)

regress=> SELECT plainto_tsquery('simple', 'Washington Square Park');
plainto_tsquery
----------------------------------
'washington' & 'square' & 'park'
(1 row)

比较运行结果:

SHOW default_text_search_config ;

在两台机器上。我猜他们是不同的。

关于postgresql - 为什么此 PostgreSQL 全文搜索在不同的 (RDS) 服务器上中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21224257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com