2016-08-29 6 views
0

Ich suche nach einer guten Möglichkeit, eine beliebige Anzahl boolescher Bedingungen durch die elastische NEST-API bereitzustellen, indem ich eine Liste von Kriterien durchlaufe und sie akkumuliere - einen Listenpunkt ist eine boolesche Bedingung - für die Aufnahme in einen NEST Api Query Call.Eine beliebige Liste boolescher Bedingungen in eine Nest-Abfrage einfügen

Das folgende ist ein unvollständiges Codebeispiel von, wohin ich damit gehe, aber werde in der fließenden Schnittstelle gefangen und wie man es am besten ausführt.

Dieses Beispiel basiert auf einem fiktiven Hoteldokument, das zu Illustrationszwecken erstellt wurde.

Oben ist meine erste Pseudo-Code-Ansatz, aber ich bin offen für Vorschläge.

Der tatsächliche Elastizitätsindex hätte ein Hotel-Mapping wie http://localhost:9200/my-index/hotel/_mapping.

Antwort

2

eine Abfrage Container deklarieren:

List<QueryContainer> lst = new List<QueryContainer>(); 

Dann Ihre Fragen hinzufügen:

lst.Add(Query<xxx>.Term(t => t.Field(f => f.zipCode).Value(zip))); 

Schließlich laufen die vollständige Abfrage:

  ISearchResponse<xxx> results = elastic.Search<xxx>(s => s 
       .Query(q => q 
        .ConstantScore(cs => cs 
         .Filter(ff => ff 
          .Bool(b => b.Must(lst.ToArray()))))) 

Sie für Ihre Bedürfnisse optimieren können, aber das ist das grundlegende jyst. Beachten Sie die letzte Zeile mit dem ToArray() - Aufruf, an den Sie den Abfragecontainer übergeben.

+0

Danke @SledgeHammer, diese Lösung funktioniert sehr gut; es ist viel einfacher als die Verrenkungen, auf die ich mit der elastischen NEST API zusteuerte. –

Verwandte Themen