我有一个在本地服务器上运行的Postgres v14数据库示例,将数据复制到AWS上的Postgres兼容Aurora Serverless V2 DB。为了在我的API中支持文本搜索功能,我决定使用Postgres内置的文本搜索引擎,我遇到了一些奇怪的行为,这些行为只发生在Aurora DB示例上,而不是本地Postgres示例。
一个主要的例子是搜索一个包含“the”的短语。假设我有一个表,其中有一个“title”列和一个标题为“Big Bang”的条目。当将文本转换为ts_vectors或ts_queries时,像“the”和“and”这样的词在文本规范化时应该被完全忽略。文档中的示例
SELECT to_tsquery('english', 'The & Fat & Rats');
to_tsquery
---------------
'fat' & 'rat'
在本地示例中,搜索“The Big Bang”会按预期返回标题中包含“Big Bang”的行,但在Aurora DB示例中执行完全相同的搜索不会返回任何结果,除非从搜索中删除“The”。
这使我得出结论,有一些配置是不同的,因为数据是完全相同的,但我当然可能是错的。
我尝试过使用不同版本的测试示例进行实验,并尝试使用Aurora DB配置,但没有任何成功。修改vector设置和搜索类型也不会产生任何结果,尽管正如我提到的,两个数据库之间的tsvectors是相同的,所以它不应该这样做。
查询参考:
select * from some_table
where to_tsvector(title) @@ plainto_tsquery('The Big Bang')
(In practice我正在使用GIN索引的预处理向量列)
任何解决方案和见解将非常赞赏。
Edit:这里是用于填充向量列的函数和触发器
CREATE FUNCTION vector_column_trigger() RETURNS trigger AS $$
begin
new.vector_column :=
setweight(to_tsvector('pg_catalog.english', coalesce(new.title,'')), 'A') ||
setweight(to_tsvector('pg_catalog.english', coalesce(new.description,'')), 'C');
return new;
end
$$ LANGUAGE plpgsql;
CREATE TRIGGER update_vector_column BEFORE INSERT OR UPDATE
on some_table FOR EACH ROW EXECUTE FUNCTION vector_column_trigger();
1条答案
按热度按时间8e2ybdfx1#
我完全忘了我问了这个问题。因此,我最终发现,很明显,配置可以根据每个客户端进行更改。实际上一切都很好,我用来测试Aurora示例的客户机配置错误。
我有点傻。谢谢大家的帮助。