我有 postgresql 数据库,我想在其中使用 JPA/Hibernate 标准 API 运行全文搜索查询。我的问题是我不知道应该使用哪种类型作为 tsvector 类型以及 @@ 运算符的替代品是什么?
我创建了一个数据库视图,它组合了两个表中的数据并创建了一个连接的 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
Run Code Online (Sandbox Code Playgroud)
然后我可以像这样对其运行查询,它会返回我期望的结果:
SELECT * FROM node_name_description_tags WHERE document @@ PLAINTO_TSQUERY('english', 'integration user administration file')
Run Code Online (Sandbox Code Playgroud)
我接下来要做的 - 创建映射到此视图的休眠实体,但我不知道列 tsvector 使用哪种类型。然后我打算用where子句创建一个hibernate规范,但我不知道operator …