我从ES 1.7迁移到5.2并重构以下代码。
ES 1.7
public void prepare(final SearchRequestBuilder searchRequestBuilder) {
final TermsFacetBuilder labelsFacet = FacetBuilders
.termsFacet("labels")
.field("labels");
searchRequestBuilder.addFacet(labelsFacet);
searchRequestBuilder.setFrom(start);
searchRequestBuilder.setSize(size);
}
用ES 5.2
public void prepare(final SearchRequestBuilder searchRequestBuilder) {
TermsAggregationBuilder aggregation = AggregationBuilders.terms("labels").field("labels");
searchRequestBuilder.addAggregation(aggregation);
searchRequestBuilder.setFrom(start);
searchRequestBuilder.setSize(size);
}
当我触发搜索查询时,我会得到以下异常
nested: IllegalArgumentException[Fielddata is disabled on text fields by default. Set fielddata=true on [labels] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.]
我还尝试在SearchRequestBuilder上设置FieldDocValue,但没有运气。
根据错误消息,您需要在映射中启用fielddata
。
例如,这是使用text
字段上的fielddata=true
的新映射。
PUT my_index/_mapping/my_type
{
"properties": {
"my_field": {
"type": "text",
"fielddata": true
}
}
}