gpt4 book ai didi

postgresql - 使用 Postgresql 和 hibernate 进行全文搜索 - 缺少 tsvector 和运算符 @@ 的类型

转载 作者:行者123 更新时间:2023-12-03 21:03:11 25 4
gpt4 key购买 nike

我有 postgresql 数据库,我想在其中使用 JPA/Hibernate 标准 API 运行全文搜索查询。我的问题是我不知道我应该为 tsvector 类型使用哪种类型以及 @@ 运算符的替代品是什么?

我创建了一个数据库 View ,它结合了来自两个表的数据并制作了一个连接的 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')

我接下来要做什么 - 创建映射到这个 View 的 hibernate 实体,但我不知道列 tsvector 使用哪种类型。然后我打算用 where 子句创建一个 hibernate 规范,但我不知道操作符@@ 在 hibernate 中是如何实现的。似乎根本不支持此功能!

我在互联网上发现人们建议使用自定义方言并添加全文搜索功能,该功能会生成@@ where 子句。基本上,这就是我现在拥有的一切。

关于如何从 Hibernate 进行这项工作的任何建议?

最佳答案

就我而言,我不想在所有字段中进行全文搜索。作为一个快速的工作解决方案,我添加了自定义列,搜索查询要相应地运行:@Column(name = "full_text_search_index", columnDefinition = "TEXT", nullable = false) 在本专栏中,我存储并保持一致(实体更新)所需的搜索字段(某种非规范化),然后搜索查询仅以“包含”模式运行。此列是索引,因此运行良好。

关于postgresql - 使用 Postgresql 和 hibernate 进行全文搜索 - 缺少 tsvector 和运算符 @@ 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56274729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com