在hibernate搜索中禁用boost [弹性搜索中的映射索引中的问题,通过hibernate搜索]

时间:2017-08-10 13:07:10

标签: hibernate elasticsearch lucene hibernate-mapping hibernate-search

我正在使用Hibernate和Hibernate搜索来索引弹性搜索中的类+数据(从java到elasticsearch)。我已经设置好并提供了所有属性。 例如:

@Entity
@indexed(name="a")
public class a{

@Id
@Generated value
private integer i;

@Field(index=index.yes, analyze=analyze.no, store=store.yes, norms = norms.no)
private String b;
//Getter and Setter
}

在我的主要方法中,我将值传递到此类并持久化。当我这样做时,我收到错误消息

5.0中删除了[string]类型。您现在应该使用[text]或[keyword],并且由于boost参数而禁用了自动升级。

为您提供更多详情

它以这种模式发送Json输入

PUT a/a_mapping
{
 "properties":{
   "i":{
     "type": "String"
     "boost":1.0,
     "index": not_analyzed
     "store":yes
    },
    "b":{
     "type": "String"
     "boost":1.0,
     "index": not_analyzed
     "store":yes

在玩游戏后我已经理解的是,在ES 5.0中不推荐使用String数据类型,因此进入的' String' 数据必须转换为'关键字' '文字' ,Hibernate Search orm执行此操作,前提是没有提升参数(我试图手动输入)这个有和没有boost参数,它适用于后者)。

所以我得出结论,我必须将这两个选项通过hibernate发送到ES。

1)构建一个将数据类型从对象转换为关键字

的字段桥

2)禁用索引时间提升参数,以便在索引时不输入提升。

到目前为止,我无法找到其中任何一种解决方案,我们将不胜感激任何提示或帮助。

TIA

1 个答案:

答案 0 :(得分:1)

首先,Hibernate Search 5.6和5.7只能与Elasticsearch 2.x一起正常使用。这些版本只使用"字符串"数据类型,从不"文本"或"关键字"。 Hibernate Search 5.8增加了对Elasticsearch 5的支持。它几乎已经准备就绪,但目前仅作为Beta版本提供(Hibernate Search 5.8.0.Beta4是最新版本)。请注意,如果您要从Elasticsearch 2迁移,则必须删除旧索引并重新索引所有索引。

其次,索引时间提升has been removed in Elasticsearch 5,因此您应该使用查询时间提升。