如何防止单个字段存储在_source中

时间:2018-09-04 08:57:51

标签: elasticsearch hibernate-search

我有一个可以通过Hibernate Search 5.6.5和Elasticsearch 2.4.6进行搜索的模型。

@Entity
@Indexed
class Model {

     @Field
     String normalField;

     @Field
     @Lob
     String reallyBigField;
}

我不希望Elasticsearch存储reallyBigField。 Hibernate Search提供了@Field(store = Store.NO)属性,但它是默认属性,并且看起来,Elasticsearch处理存储属性的方式与Lucene不同(Lucene不存储任何内容,Elasticsearch具有单独的源存储)。

2 个答案:

答案 0 :(得分:2)

使用Store.NO在字段级别禁用存储。字段级别的存储,在我们当前的Search 5.x Elasticsearch集成中并未真正使用。

您是对的,Elasticsearch将内容另外存储在一个单独的_source字段中,这是我们现在在Hibernate Search中用于投影的字段(由于Elasticsearch的某些限制-我们可能会在未来)。

您可以通过修改映射https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#include-exclude来禁用_source中的此特定字段。但是我们不开箱即用,因此您必须手动进行。

答案 1 :(得分:0)

该解决方案可能基于JsonViews,以便配置ElasticSearch的映射器以忽略标有另一个View的某些字段,这些字段可用于其余输出:Ignore JsonIgnore in Elasticsearch