为什么这个PostgreSQL全文搜索会在不同的(RDS)服务器上中断?

为什么这个PostgreSQL全文搜索会在不同的(RDS)服务器上中断?,第1张

概述在多个开发服务器上,此查询已返回预期记录: SELECT name, name_tsv FROM vision WHERE name_tsv @@ plainto_tsquery('Washington Square Park'); name_tsv最初是在我的开发服务器上填充的 UPDATE vision SET name_tsv=to_tsvector(name); 并通过触发器保持最新状态 在多个开发服务器上,此查询已返回预期记录:
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_tsvectorFROM 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

dev实例的结果是:

"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()似乎都不会产生他们在开发服务器上执行的截断的lexeme’quarar'(与其他字符串相同的no-lexeme模式).但是,我试过跑步

UPDATE vision SET name_tsv=to_tsvector(name);

在RDS服务器上,但name_tsv没有改变(仍=“’1609’:1’停车’:4’小方’:3’华盛顿’:2”).

我可以在新的RDS服务器上做什么来使第一个查询以与在我的开发服务器上相同的方式返回预期记录?我想我只需要让plainto_tsquery(‘华盛顿广场公园’)将标记规范化为lexemes(例如返回’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 ;

在两台机器上. Betcha他们是不同的.

总结

以上是内存溢出为你收集整理的为什么这个PostgreSQL全文搜索会在不同的(RDS)服务器上中断?全部内容,希望文章能够帮你解决为什么这个PostgreSQL全文搜索会在不同的(RDS)服务器上中断?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1181359.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存