首页 > 解决方案 > 将多行的 tsvector 合并为一个

问题描述

我有一个带有文本字段的表和一个tsvector包含该字段的搜索索引的表:

CREATE TABLE test (pk bigint, value text, tsv tsvector);

如何创建一个tsvector满足某些条件的所有行的向量组合的单个?

SELECT value FROM test
WHERE combine_my_vectors(SELECT tsv FROM test WHERE pk IN (some list))
      @@ to_tsquery('search me');

我知道tsvectors 可以与 结合使用||,但这在这里似乎是不可能的。我有什么用combine_my_vectors

我宁愿避免先组合我的value文本字段,然后再创建一个tsvector

标签: postgresqlfull-text-search

解决方案


PostgreSQL 的好处在于它的可扩展性非常好。

您可以简单地为此定义自己的聚合:

CREATE AGGREGATE tsvector_agg(tsvector) (
   STYPE = pg_catalog.tsvector,
   SFUNC = pg_catalog.tsvector_concat,
   INITCOND = ''
);

你可以像这样使用它:

SELECT tsvector_agg(tsv) FROM test;

当然,您不能为此使用全文搜索索引,因为匹配的值不属于单行。


推荐阅读