将来自多行的 tsvectors 合并为一个

Combining tsvectors from multiple rows into one

我有一个带有文本字段的 table 和一个包含该字段的搜索索引的 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

PostgreSQL 的优点在于它的可扩展性。

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

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

你可以这样使用它:

SELECT tsvector_agg(tsv) FROM test;

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