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

如果这不是您所需要的,我建议您浏览文档:

  • 您可以找到支持的 属性 类型列表 here
  • 您可以找到有关映射其他 属性 类型的帮助 here