PostgreSQL: можно ли создать значение tsvector вручную?

Я хочу реализовать систему поиска информации, которая использует модель векторного пространства, но с многозначными токенами и пользовательской функцией взвешивания терминов.

Я рассматриваю возможность создания инвертированного индекса в PostgreSQL вместо файловой системы. Я читал об индексе GIN, который создает такой индекс в столбце tsvector.

Могу ли я построить значения tsvector вручную, не вызывая функцию to_tsvector, чтобы я мог построить свой «пользовательский» вектор с пользовательскими токенами и пользовательскими весами?


person Nina    schedule 10.01.2020    source источник


Ответы (2)


Вы можете сделать tsvectors вручную. Но, насколько мне известно, вы можете назначить только 4 разных веса: A, B, C или D. Токены, состоящие из нескольких слов, должны быть заключены в одинарные кавычки, чтобы они оставались вместе как один токен.

select $$'two words':1c oneword$$::tsvector;
         tsvector         
--------------------------
 'oneword' 'two words':1C
person jjanes    schedule 11.01.2020
comment
Но веса, которые мне нужно присвоить термину, представляют собой модифицированное значение TF-IDF, а не «A», «B» или «C»! Это возможно или нет? - person Nina; 11.01.2020
comment
@Nina Невозможно с tsvector. - person jjanes; 11.01.2020
comment
Эммм, поэтому я не могу полагаться на PostgreSQL для своей системы поиска информации. Я все равно отмечу ваш пост как ответ, потому что вы дали ручной способ сборки tsvector - person Nina; 11.01.2020

В случае, если это полезно для всех, основываясь на исходном ответе:

select $$'foo':1 'bar':2 'baz':10$$::tsvector;
         tsvector         
--------------------------
 'bar':2 'baz':10 'foo':1
(1 row)
person michael    schedule 02.03.2021