Hibernate Search 将实体保存到 Elastic search
Hibernate Search save entity to Elastic search
我尝试将 Hibernate Search 与弹性搜索结合使用,以进行全文搜索。
简单的实体可以正常工作,但我遇到了麻烦。
当我在数据列上设置注释 @FullTextField 时,应用程序启动时出现错误:
"Hibernate ORM mapping:
type 'ru.search.entities.TestEntity':
path '.data':
failures:
- HSEARCH000135: No default value bridge implementation for type 'java.lang.Object'. Use a custom bridge."
这是我的实体:
@Entity
@Indexed(index = "test")
@Table(name = "test")
@TypeDef(name = "jsonb", typeClass = Jsonb.class)
public class TestEntity {
@Id
@Column(name = "id")
private UUID Id;
@Column(name = "data")
@Type(type = "jsonb")
private Map<String, Object> data;
//constructor
//getters
//setters
}
没有 @FullTextField 注释实体在 postgres 和 elastic 中正确放置。 Elastic当然不包含数据列。
默认情况下,当您使用 @FullTextField
(或任何 @*Field
注释)对 Map
进行注释时,Hibernate Search 将索引这些值。在您的例子中,值的类型为 Object
。 Hibernate Search 不知道如何索引 Object
.
我怀疑您想索引任意 JSON 数据。如果是这样的话,我相信文档示例中有适合您的解决方案:
- 阅读 this section first 了解有关 属性 桥是什么以及如何使用它们的一些背景信息。
- 然后你可以找到一个(更复杂的)例子,它几乎完全符合你的要求here。
如果这不是您所需要的,我建议您浏览文档:
我尝试将 Hibernate Search 与弹性搜索结合使用,以进行全文搜索。 简单的实体可以正常工作,但我遇到了麻烦。 当我在数据列上设置注释 @FullTextField 时,应用程序启动时出现错误:
"Hibernate ORM mapping: type 'ru.search.entities.TestEntity': path '.data': failures: - HSEARCH000135: No default value bridge implementation for type 'java.lang.Object'. Use a custom bridge."
这是我的实体:
@Entity
@Indexed(index = "test")
@Table(name = "test")
@TypeDef(name = "jsonb", typeClass = Jsonb.class)
public class TestEntity {
@Id
@Column(name = "id")
private UUID Id;
@Column(name = "data")
@Type(type = "jsonb")
private Map<String, Object> data;
//constructor
//getters
//setters
}
没有 @FullTextField 注释实体在 postgres 和 elastic 中正确放置。 Elastic当然不包含数据列。
默认情况下,当您使用 @FullTextField
(或任何 @*Field
注释)对 Map
进行注释时,Hibernate Search 将索引这些值。在您的例子中,值的类型为 Object
。 Hibernate Search 不知道如何索引 Object
.
我怀疑您想索引任意 JSON 数据。如果是这样的话,我相信文档示例中有适合您的解决方案:
- 阅读 this section first 了解有关 属性 桥是什么以及如何使用它们的一些背景信息。
- 然后你可以找到一个(更复杂的)例子,它几乎完全符合你的要求here。
如果这不是您所需要的,我建议您浏览文档: