Объединение цветов из нескольких рядов в один - PullRequest
0 голосов
/ 21 января 2019

У меня есть таблица с текстовым полем и 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 можно комбинировать с ||, но здесь это не представляется возможным.Что я использую для combine_my_vectors?

Я бы предпочел не комбинировать сначала мои текстовые поля value, а затем создавать из них tsvector.

1 Ответ

0 голосов
/ 21 января 2019

Приятной особенностью PostgreSQL является то, что он настолько расширяем.

Вы можете просто определить свой собственный агрегат для этого:

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

Вы можете использовать его так:

SELECT tsvector_agg(tsv) FROM test;

Конечно, вы не можете использовать для этого индекс полнотекстового поиска, поскольку совпадающее значение не будет принадлежать ни одной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...