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如果有更好的方法来实现这一点,我愿意接受建议。效果非常好。非常感谢。