2016-07-27 20 views
2

Mein Problem: Ich habe einen Index mit einer Zeichenfolge-Eigenschaft, auf der ich Abfragen und Aggregationen durchführen. Ich würde gerne Terms-Abfragen mit dieser Eigenschaft analysieren und Begriffe Aggregationen mit dieser Eigenschaft nicht analysiert werden. In früheren Versionen von elasticsearch gab es dafür ein Mehrfeld-Mapping, aber seit der Version 2.0 dieser Bibliothek ist es verschwunden. Wie kann ich das erreichen?Alternative für Mehrfeld-Mapping in Elasticsearch.net v. 2.3 + Bibliothek (C#)?

Nebenbei bemerkt: Ich würde diese Eigenschaft in meinem Index zu vermeiden, wie das Duplizieren und Kennzeichnung eines von Duplikaten als analysiert und die andere als nicht analysiert, weil es nicht wie efficent Lösung scheint.

Bibliotheken, die ich verwende (C#): Elasticsearch.net 2.3.3 und NEST 2.3.3.

Alle Vorschläge sind willkommen.

Antwort

3

multi_field Zuordnungen gibt es noch in Elasticsearch 2.x und NEST 2.x; hier ist ein Beispiel

client.Map<Document>(m => m 
    .Index("index-name") 
    .AutoMap() 
    .Properties(p => p 
     .String(s => s 
      .Name(n => n.Location) 
      .Fields(f => f 
       .String(fs => fs 
        .Name("raw").NotAnalyzed() 
       ) 
      ) 
     ) 
    ) 
); 

Hier die Location Eigenschaft als multi_field mit dem Standard-Standard Analysator angewandt, um es abgebildet; Dies wird innerhalb des location Felds innerhalb des Indexes sein. Außerdem wurde ein Feld indiziert, das nicht analysiert wird.

Um einen Begriff Abfrage mit der analysierten location Eigenschaft ausführen

client.Search<Document>(s => s 
    .Query(q => q 
     .Term(f => f.Location, "location") 
    ) 
); 

würden und die nicht analysiert Eigenschaft innerhalb eines Begriffe Aggregation würde

Sie
client.Search<Document>(s => s 
    .Size(0) 
    .Aggregations(a => a 
     .Terms("top_locations", ta => ta 
      .Field(f => f.Location.Suffix("raw")) 
     ) 
    ) 
); 
+0

Vielen viel, Sir nutzen zu können! –

+0

Keine Sorgen, glücklich zu helfen :) –