2017-03-08 4 views
0

Ich migriere von ES 1.7 zu 5.2 und refactoring den folgenden Code.Elasticsearch Java-API-Migrationsform TermsFacetBuilder mit AggregationBuilders

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); 
    } 

mit 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); 
    } 

Wenn ich Feuer der Abfrage Suche ich die folgende Ausnahme bin immer

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.] 

Ich habe auch versucht die fieldDocValue auf SearchRequestBuilder Einstellung aber kein Glück.

+0

Haben Sie 'fielddata = true auf [labels]' gesetzt, wie die Fehlermeldung besagt? – Jeremy

+0

@ Jeremy, Wie stellen wir es ein? – Santosh

Antwort

1

Nach der Fehlermeldung müssen Sie enable fielddata in Ihrem Mapping.

Zum Beispiel ist hier ein neues Mapping mit fielddata=true auf einem text Feld.

PUT my_index/_mapping/my_type 
{ 
    "properties": { 
    "my_field": { 
     "type":  "text", 
     "fielddata": true 
    } 
    } 
} 
+0

Danke @ Jeremy. Eigentlich wollte ich es mit Java API einstellen. Ich habe versucht, in der ES-Dokumentation zu suchen, habe aber keine gefunden. – Santosh