2013-10-06 16 views
7

chcę zrobić wyszukiwania pasujący wiele wartości (tablicę wartości) tak:Wielu wyszukiwanych haseł 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(); 

Jak mogę to zrobić? Myślałem o aspektach, ale nie widzę, jak mogę to zrobić. Jedynym sposobem na teraz, który działa, jest iterator foreach, który nie jest zbyt skuteczny ...

Dzięki za pomoc.

Odpowiedz

4

można wyrazić wiele zapytań tak:

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

Koniecznie przeczytać documentation on writing queries odkryć wszystkie rzeczy dobre NEST ma do zaoferowania.

+1

podziękować za odpowiedź, ale w końcu użyłem 'Filter DSL', a nie' Query DSL' który pozwolił mi przejść: '.And ( af => af.Term (...), af => af.Term (...) ) ' – Orelus

+0

Czy mógłbyś zaktualizować powyższy URL? Obecnie nie jest dostępny. – Aaron

+0

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

0

Orelus, chciałbym wykorzystać swoje rozwiązanie z

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

Nie rozumiem gdzie to pasuje, oto przykład mojego filtra zakaz pracy

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) 
       ) 
       ) 
      ) 
     ) 
    ) 
    );