2017-04-19 5 views
0

I Indexobjekte in Elasticsearch 2.4, wo eines der Felder ist ein Array von anderen Objekten, zum Beispiel so etwas wie dieses:ausblenden einige Array-Elemente in Elasticsearch Abfrageergebnis

{ 
A : 1, 
B : [{BB : 1},{BB : 2},{BB : 4},{BB : 5}] 
} 

Ist es möglich, Elasticsearch abfragen und anwenden eines Filters einige der des Arrays B Werte zu verstecken, beispielsweise auf Werte auszublenden, wo BB weniger als 3 ist, so dass ein Ergebnis wäre

{ 
A : 1, 
B : [{BB : 4},{BB : 5}] 
} 

PS Ich benutze Java API

+0

Sie sollten das "verstecken" -Konzept weiter erklären. Es klingt wie eine benutzerdefinierte Notwendigkeit. Wenn dies der Fall ist, benötigen Sie wahrscheinlich eine benutzerdefinierte Lösung. Ich denke nicht, dass ELS diese Art von Funktion bietet. –

+0

Unter Verbergen verstehe ich sowas wie das Nachfiltern von Quellfeldern. Idealerweise möchte ich etwas wie ein Lambda an ES weitergeben, um jeden Treffer in etwas zu verwandeln, das ich brauche. – andreybavt

Antwort

0

Ich fand keine flexible eingebaute Art und Weise, es zu tun, also entschied ich mich, manuell zu filtern. Hier ist meine Implementierung:

SearchResponse resp = request.execute().actionGet(); 
for (SearchHit hit : resp.getHits().getHits()) { 
    Map<String, Object> source = hit.getSource(); 

    transformHitSource(source); // a method where you work with a map and can modify it as you want 


    XContentBuilder xContentBuilder = jsonBuilder().startObject(); 

    for (Map.Entry<String, Object> entry : source.entrySet()) { 
     xContentBuilder.field(entry.getKey(), entry.getValue()); 
    } 
    BytesReference bytes = xContentBuilder.endObject().bytes(); 
    ((InternalSearchHit) hit).sourceRef(bytes); 
} 
Verwandte Themen