2017-10-28 1 views
0

Derzeit haben wir 3 Suchanfragen in unserer Multi-Suchabfrage festgelegt. Der Code sieht so aus:C# nest: Wie fügt man Elasticsearch-Suchanfragen dynamisch an die Multi-Search-Nest-Abfrage an?

var results = elasticClient.MultiSearch(a => a 
          .Search<StockBaseEntity>(s => s 
          .Type("<docType>") 
          .Index(<indexName>) 
          .Take(<count>) 
          .Query(qq => qq 
          ... 
          .Search<StockBaseEntity>(s => s 
          .Type("<docType>") 
          .Index(<indexName>) 
          .Take(<count>) 
          .Query(qq => qq 
          .... 
          .Search<StockBaseEntity>(s => s 
          .Type("<docType>") 
          .Index(<indexName>) 
          .Take(<count>) 
          .Query(qq => qq 
          .... 

Alle drei Suchanfragen einige verschiedene Abfrageparameter, zum Beispiel, erste Abfrage gibt „Typ1“ doc, zweite & dritte Rückkehr „Typ2 und Typ3“ docs sind.

Wir wollen diese Multi-Search-Nester-Abfrage so erstellen, dass wir beliebig viele Suchnest-Anfragen in der Multi-Searach-Abfrage (und nicht nur 3) haben können. Es könnte 3/4/5 oder eine beliebige Anzahl von Suchanfragen basierend auf einer Bedingung sein. Dies kann erreicht werden, wenn wir Suchanfragen an Multisearch anhängen können? können wir das machen?

Ich lese this Artikel, kann aber nicht für nest Version 5.X und ich habe keine Ahnung, wie Abfrage mit QueryContainer schreiben?

+0

[MultiSearchApiTests] (https://github.com/elastic/elasticsearch-net/blob/5.5/src/Tests/Search/MultiSearch/MultiSearchApiTests.cs) von NEST Tests Projekt sollte etwas Licht auf Ihre Frage. – Rob

+0

Ich habe bis zu diesem Teil getan. Ich habe meine Fragen in "fließende Sytax". Wie stelle ich eine fließende Abfrage in "new QueryContainer()"? (als alles in OIS zu konvertieren wird zu viel Aufwand) – maverick

+0

@Rob: irgendeine Idee? Ich habe eine neue Frage zu diesem Thema geschrieben .. möglicherweise werden Sie einige Details über diesen Link erhalten: - https://stackoverflow.com/questions/46999703/how-to-write-fluent-syntax-query-in-querycontainer – maverick

Antwort

1

Eine Option besteht darin, MultiSearchRequest zu verwenden und sie mit Ihren Suchdeskriptoren zu kombinieren.

var multiSearchRequest = new MultiSearchRequest{}; 

multiSearchRequest.Operations = new Dictionary<string, ISearchRequest>(); 
multiSearchRequest.Operations["search1"] = new SearchDescriptor<object>().Query(q => q.MatchAll()); 
multiSearchRequest.Operations["search2"] = new SearchDescriptor<object>().Query(q => q.MatchAll()); 
multiSearchRequest.Operations["search3"] = new SearchDescriptor<object>().Query(q => q.MatchAll()); 

elasticClient.MultiSearch(multiSearchRequest); 

Hoffe, dass hilft.

+0

Es half. Eine Art von Abfrage ist noch immer nicht gelöst: -https: //codeshare.io/anqDbj – maverick

+0

Wie verschiebe ich Code von "ss", der auch für Sortier-Skripte verwendet wird? – maverick

+0

Ich bekomme Ihre Frage nicht Es kompiliert nicht oder Sie möchten es bei anderen Suchen wiederverwenden? – Rob

Verwandte Themen