Hibernate Search将实体保存到Elastic Search



我尝试将Hibernate搜索与弹性搜索一起用于全文搜索。简单的实体可以正常工作,但有了一个,我就麻烦了。当我在数据列上设置annotation@FullTextField时,我在应用程序启动时遇到了一个错误:

"Hibernate ORM映射:类型"ru.search.entitys.TestEntity":路径".data":故障:-HSEARCH00135:类型"java.lang.Object"没有默认值桥接器实现。请使用自定义桥接器">

这是我的实体:

@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中。弹性当然不包含数据列。

默认情况下,当您用@FullTextField(或任何@*Field注释(注释Map时,Hibernate Search将对值进行索引。在这种情况下,值的类型为Object。Hibernate Search不知道如何对Object进行索引。

我怀疑您想要索引任意的JSON数据。如果是这样的话,我相信在文档示例中有一个适合您的解决方案:

  • 先阅读本节,了解什么是属性桥以及如何使用它们
  • 然后你可以在这里找到一个(更复杂的(例子,它几乎完全符合你的要求

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

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

最新更新