Выполнение полнотекстового поиска с Postgresql и hibernate - отсутствующий тип для tsvector и operator @@ - PullRequest
0 голосов
/ 23 мая 2019

У меня есть база данных postgresql, в которой я хотел бы запускать полнотекстовые поисковые запросы с использованием API критериев JPA / Hibernate.Моя проблема в том, что я не знаю, какой тип мне следует использовать для типа tsvector и что заменит @@ operator?

Я создал представление базы данных, которое объединяет данные из двух таблиц и создает объединенный tsvector:

CREATE OR REPLACE VIEW node_name_description_tags AS
    SELECT nodeId, document
    FROM (SELECT node.id as nodeId,
                 to_tsvector('english', node.name) || 
                 to_tsvector('english', coalesce(node.description, ' ')) ||
                 to_tsvector('english', coalesce(string_agg(tag.name, ' '), ' '))  as document
          FROM node
          JOIN tag_node ON node.id = tag_node.node_id
          JOIN tag ON tag.id = tag_node.tag_id
          GROUP BY nodeId) as documents                  

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

SELECT * FROM node_name_description_tags WHERE document @@ PLAINTO_TSQUERY('english', 'integration user administration file')

Что я собирался делать дальше - создать спящий объект, сопоставленный с этим представлением,но я не знаю, какой тип использовать для столбца tsvector.Затем я собирался создать спецификацию hibernate с предложением where, но я не знаю, как operator @@ реализован в hibernate.Кажется, что эта функция вообще не поддерживается!

В интернете я обнаружил, что люди предлагают использовать пользовательский диалект с добавленной функцией полнотекстового поиска, которая генерирует предложение @@ where.Это, в основном, все, что у меня есть сейчас.

Любой совет, как заставить это работать из Hibernate?

...