У меня есть база данных 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?