2016-09-30 2 views
1

Ich benutze NEST-Abfrage, um Datensätze aus elastischen zu filtern.Abfrage auszuschließen (enthält nicht) bestimmte Werte von elastischen

Die folgende Abfrage filtert Datensätze basierend auf articleIds Liste. Es funktioniert gut.

QueryContainer nestedQuery = null; 
nestedQuery &= Query<PublishedArticle>.Terms(qs => qs 
       .Field(f => f.AssignedArticleList.FirstOrDefault().AssignedArticleId) 
        .Terms(articleIds) 
      ); 

Aber jetzt will ich Aufzeichnungen holen, die Werte in nicht articleIds prop enthalten. Wie erreiche ich das? Prüft elastisch documents auf must_not Klausel. Wie erstelle ich diese Abfrage?

articleIds ist im Grunde eine Liste von ganzen Zahlen.

Jede Hilfe wird geschätzt! :)

Antwort

2

Sie benötigen eine bool Abfrage mit einer must_not Klausel

var articleIds = new[] { 1, 2, 3, 4 }; 

client.Search<PublishedArticle>(s => s 
    .Query(q => q 
     .Bool(b => b 
      .MustNot(mn => mn 
       .Terms(t => t 
        .Field(f => f.AssignedArticleList.FirstOrDefault().AssignedArticleId) 
        .Terms(articleIds) 
       ) 
      ) 
     ) 
    ) 
); 

Mit dem ! Operator, ein must_not kann in NEST mit Operator

client.Search<PublishedArticle>(s => s 
    .Query(q => !q 
     .Terms(t => t 
      .Field(f => f.AssignedArticleList.FirstOrDefault().AssignedArticleId) 
      .Terms(articleIds) 
     ) 
    ) 
); 

Beide produzieren

zu

Überlastung verkürzt werden
{ 
    "query": { 
    "bool": { 
     "must_not": [ 
     { 
      "terms": { 
      "assignedArticleList.assignedArticleId": [ 
       1, 
       2, 
       3, 
       4 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

Danke. hat ganz gut funktioniert! :) Gibt es Tutorials, die sich auf andere Dinge beziehen als in der elastischen Dokumentation? – Raghavendra

+1

Es gibt die Kundendokumentation - https://www.elastic.co/guide/en/elasticsearch/client/net-api/2.x/index.html, die wir weiter ausbauen wollen, um zusätzliche Abschnitte zur Analyse hinzuzufügen, Indexierung, Versickerung usw. sowie die Bereiche dort besser organisieren. –

Verwandte Themen