我有一个可以通过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具有单独的源存储)。
答案 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