我有一个带有文本字段的表和一个包含该字段的搜索索引的 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
。
最佳答案
PostgreSQL 的优点在于它的可扩展性。
您可以简单地为此定义自己的聚合:
CREATE AGGREGATE tsvector_agg(tsvector) (
STYPE = pg_catalog.tsvector,
SFUNC = pg_catalog.tsvector_concat,
INITCOND = ''
);
你可以这样使用它:
SELECT tsvector_agg(tsv) FROM test;
当然你不能为此使用全文搜索索引,因为匹配的值不属于单个行。
关于postgresql - 将来自多行的 tsvectors 合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54292440/