Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 将多行中的TSV向量合并为一行_Postgresql_Full Text Search - Fatal编程技术网

Postgresql 将多行中的TSV向量合并为一行

Postgresql 将多行中的TSV向量合并为一行,postgresql,full-text-search,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

我有一个带有文本字段和
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
s可以与
|
组合,但在这里似乎不可能。我使用什么来组合我的向量


我宁愿不必先组合我的
文本字段,然后用它们创建一个
tsvector

PostgreSQL的优点在于它具有很强的可扩展性

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

CREATE AGGREGATE tsvector_agg(tsvector) (
   STYPE = pg_catalog.tsvector,
   SFUNC = pg_catalog.tsvector_concat,
   INITCOND = ''
);
您可以这样使用它:

SELECT tsvector_agg(tsv) FROM test;

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

这有什么意义?你必须创建自己的聚合函数。关键是生成的向量被用作更大向量的一部分,系统只关心返回一个结果(而不是每行返回一个结果)@LaurenzAlbe如果有更好的方法来实现这一点,我愿意接受建议。效果非常好。非常感谢。