我使用的是Postgresql 13,我的问题很容易通过@>
操作符解决:
select id from documents where keywords @> '{"winter", "report", "2020"}';
表示keywords
数组应该包含所有这些元素。我还在这列上创建了一个GIN索引。
是否有可能实现类似的行为,即使我提供我的请求像'{"re", "202", "w"}'
?我听说图形有这样的语义,但是"交集"。数组的功能对我来说很重要。
在您的示例中,匹配的都是前缀。这是这里的一般规则吗?如果是这样,您可能会使用全文搜索的匹配特性,而不是三元组。这需要你重新格式化你的数据,或者至少是你的查询。
select * from
(values (to_tsvector('simple','winter report 2020'))) f(x)
where x@@ 're:* & 202:* & w:*'::tsquery;
如果字符串可以包含你想要保留的标点符号,你需要自己费力地将它们格式化成一个带引号的tsvector,而不是让to_tsvector处理它。使用'simple'配置可以消除词干和停止词删除功能,这些功能会干扰您想要做的事情。