我有一个带有文本字段的表格和一个包含该字段搜索索引的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
。
答案 0 :(得分:3)
关于PostgreSQL的好处是它是如此可扩展。
您可以为此简单地定义自己的集合:
CREATE AGGREGATE tsvector_agg(tsvector) (
STYPE = pg_catalog.tsvector,
SFUNC = pg_catalog.tsvector_concat,
INITCOND = ''
);
您可以像这样使用它:
SELECT tsvector_agg(tsv) FROM test;
当然,您不能为此使用全文本搜索索引,因为匹配的值将不属于单个行。