2016-11-18 2 views
0

Как выражение NEST 1.x ниже, может быть переписано НЕСТОМ 2.x или 5.xNEST 2.x Условие Запрос не может принимать 2 аргумента

var searchResult = _elasticClient.Search<SearchResult>(
       request => request 
        .MinScore(0.7) 
        .Query(q => 
        { 
         QueryContainer query = null; 
         query &= q.Terms<int>(t => t.Categories 
         .SelectMany(s => s.ChildCategories.Select(c => c.Id)) 
         .ToArray(), 
         categories.Select(c => Convert.ToInt32(c))); 

принять список(), который содержит элементы, на какие идентификаторах эластичная поисковый запрос должен соответствовать

query &= q.Terms(c => c.Field(t => t.Categories.SelectMany(s => s.ChildCategories.Select(d => d.Id)))); 

This line will below complain about Terms has 1 parameter, but invoked with 2 
query &= q.Terms(c => c.Field(t => t.Categories.SelectMany(s => s.ChildCategories.Select(d => d.Id))), new List<int> {1}); 

UPDATE:

последний пример на elasticsearch documentation for 1.X содержит поле и qff.Terms (р => p.Country, userInput.Countries), который я хочу для достижения в NEST 5.x или 2.x

ответ

0

Take a look at the Terms query documentation. Для запроса terms требуется поле, содержащее термины (термины), которые нужно сопоставить, и совокупность терминов, которые должны соответствовать.

Поле для соответствия может быть определено с использованием .Field(), which can take anything from which a Field can be inferred, включая строку или выражение Лямбда.

значения, которые могут быть сопоставлены, могут быть указаны с использованием .Terms(), который представляет собой набор терминов.

Учитывая следующий ПОКО

public class Project 
{ 
    public IEnumerable<string> Tags { get; set; } 
} 

terms запрос на поле тегов будет

var searchResponse = client.Search<Project>(s => s 
    .Query(q => q 
     .Terms(t => t 
      .Field(f => f.Tags) 
      .Terms("tag1", "tag2", "tag3") 
     ) 
    ) 
); 
Смежные вопросы