将多行的tsvector合并为一个

时间:2019-01-21 14:49:50

标签: postgresql full-text-search

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

我知道tsvector可以与||结合使用,但这似乎不可能实现。 combine_my_vectors用什么?

我希望避免先合并我的value文本字段,然后再根据它们创建一个tsvector

1 个答案:

答案 0 :(得分:3)

关于PostgreSQL的好处是它是如此可扩展。

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

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

您可以像这样使用它:

SELECT tsvector_agg(tsv) FROM test;

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