2013-10-06 2 views
7

Я хочу, чтобы сделать поиск соответствия несколько значений (массив значений), как это:Мульти Условия поиска 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(); 

Как я могу сделать? Я думал о грани, но я не понимаю, как я могу это сделать. Единственный способ на данный момент работать с итератором foreach, который не очень эффективен ...

Спасибо за помощь.

ответ

4

Вы можете выразить несколько запросов следующим образом:

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

Обязательно прочитайте documentation on writing queries, чтобы обнаружить все хорошие вещи NEST предложить.

+1

Благодарим за ответ, но, наконец, я использовал «Фильтр DSL», а не «Query DSL», который позволил мне пройти: '.And ( af => af.Term (...), af => af.Term (...) ) ' – Orelus

+0

Не могли бы вы обновить URL-адрес выше? В настоящее время он недоступен. – Aaron

+0

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

0

Orelus, Я хотел бы использовать решение с

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

Я не понимаю, где это подходит, вот пример моего неработающего фильтра

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) 
       ) 
       ) 
      ) 
     ) 
    ) 
    ); 
Смежные вопросы