2017-12-28 7 views
1

Ich verwende den NEST-Client in C#, um mit meinem Elasticsearch-Cluster zu interagieren.Wie fügt man ein nicht analysiertes Text-Schlüsselwort zum Sortieren in elasticsearch mit NEST hinzu?

Ich versuche, basierend auf einem Zeichenfolgewert zu sortieren. Aber per this kann ich das nicht tun, weil das Feld ein Textfeld ist.

Also ich möchte ein Keyword-Feld hinzufügen und basierend darauf für eine bessere Leistung sortieren. Etwas wie folgt aus:

{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "my_field": { 
      "type": "text", 
      "fields": { 
      "keyword": { 
       "type": "keyword" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Aber ich bin nicht sicher, wie man am besten, dass Client zum NEST übersetzen und dann, wie auf my_field.keyword zu sortieren.

Ich habe dies als meine Zuordnung, aber da ich nicht sicher bin, wie die Sortierklausel aussieht, bin ich nicht sicher, wie man es testet.

Ich habe versucht, durch die NEST-Dokumentation zu graben, aber diese mehr Rand Funktionalität war schwieriger zu finden.

+2

Mapping einer 'string' Eigenschaft mit mehreren Feldern und Analysatoren: https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/multi-fields.html. Verwenden Sie die '.Suffix (" ")' zum Referenzieren für die Sortierung –

+0

Danke! Das hat am Ende funktioniert. Wenn du das als Antwort postest, werde ich es als korrekt markieren, Russ. –

Antwort

1

Um einen Unter -field eines Multi-Feld zu verweisen, können Sie die .Suffix("suffixname") Erweiterungsmethode innerhalb eines Mitglieds Zugang Lambda-Ausdruck

client.Search<Comic>(s => s 
    .Query(q=> q 
     .Match(m => m 
      .Field(f => f.Description.Suffix("keyword")) 
      .Query("Wolverine") 
     ) 
    ) 
); 

die

in der Abfrage-Ergebnisse verwenden
{ 
    "query": { 
    "match": { 
     "description.keyword": { 
     "query": "Wolverine" 
     } 
    } 
    } 
} 

Sie können die Zeichenfolge auch angeben, wenn Sie möchten

client.Search<Comic>(s => s 
    .Query(q=> q 
     .Match(m => m 
      .Field("description.keyword")) 
      .Query("Wolverine") 
     ) 
    ) 
); 
Verwandte Themen