2013-10-06 15 views
7

voglio fare una ricerca corrispondenti valori multipli (un array di valori) come questo:Termini Multi NEST C#

var result1 = _client.Search<type1>(s => s 
      .Fields(f => f.trip_id) 
      .Query(q => q 
       .Terms(t => t.arg1, value1)).Take(_allData)) 
       .Documents.Select(d => d.arg2).ToArray(); 

var result2 = _client.Search<type2>(s => s 
         .Query(q => q 
          .Terms(t => t.arg3, result1)) 
          .Take(_allData) 
         ).Documents.Select(s => s.ar3).ToList(); 

Come posso fare? Stavo pensando alle sfaccettature ma non vedo come posso farlo. L'unico modo per ora che funziona è con un iteratore foreach che non è veramente efficace ...

Grazie per il vostro aiuto.

risposta

4

È possibile esprimere più query in questo modo:

.Query(q=>q.Terms(t=>t.arg3, result1) && q.Terms(t=>t.arg1, value1)) 

Leggere attentamente il documentation on writing queries per scoprire tutta la roba buona NEST ha da offrire.

+1

Grazie per il risposta, ma alla fine ho usato il 'Filter DSL' e non il' Query DSL' che mi ha permesso di passare: '. E ( af => af.Term (...), af => af.Term (...) ) ' – Orelus

+0

Potresti aggiornare l'URL sopra? Al momento non è disponibile. – Aaron

+0

http://nest.azurewebsites.net/nest/writing-queries.html – Shaun

0

Orelus, mi piacerebbe utilizzare la soluzione con

.And(af=>af.Term(...), af=>af.Term(...)) 

non capisco dove questo si inserisce, ecco un esempio di mio filtro non funzionante

var results = client.Search<music>(s => s 
    .Query(q => q 
     .Filtered(f => f. 
      Filter(b => b.Bool(m => m.Must(
       t => t 
        .Term(p => p.artist, artist) 
        && t.Term(p2 => p2.year, year) 
       ) 
       ) 
      ) 
     ) 
    ) 
    );