2015-12-04 9 views
0

Я совмещаю поиск и агрегации на своей странице.Elasticsearch гнездо поиск нескольких значений полей

Агрегаты работают нормально, если они объединены из разных групп, но работают неправильно, когда я выбираю несколько агрегатов из одной группы.

, например ... если у меня есть 2 агрегирование, показывающее при загрузке страницы по умолчанию говорят

Агги (1000) aggB (400)

Выбор Агги правильно показывает 1000 результатов ... и aggB будет соответственно, можно уменьшить, чтобы сказать 50

Однако, когда я затем выбираю aggB вместо получения ожидаемых 50 результатов, я получаю 400 ... поэтому мои результаты поиска не объединяют 2 значения поискового запроса, а просто действуют на последнем в мой список, который передается elasticsearch.

Мой код:

objESResults = client.Search<ESContent>(s => s 
     .Query(a => 
     { 
      return 
      a.Match(m => m.OnField("_all").Query(m_strSearchQuery).Operator(Operator.And))     
      && a.TermsDescriptor(t => t.OnField(f => f.ContentType).Terms(m_lstSelectedContentType)) 
      && a.TermsDescriptor(t => t.OnField(f => f.Sectors).Terms(m_lstSelectedSector)) 
      && a.TermsDescriptor(t => t.OnField(f => f.Companies).Terms(m_lstSelectedCompany)) 
      && a.TermsDescriptor(t => t.OnField(f => f.ContentRegions).Terms(m_lstSelectedContentRegion)) 
      && a.TermsDescriptor(t => t.OnField(f => f.Author).Terms(m_lstSelectedAuthor)) 
      && a.TermsDescriptor(t => t.OnField(f => f.Country).Terms(m_lstSelectedCountry)) 
      && a.TermsDescriptor(t => t.OnField(f => f.Columns).Terms(m_lstSelectedColumns)) 
      && a.Range(t => t.OnField(f => f.EntryDate).GreaterOrEquals(DateFrom)); 
     } 

m_lstSelectedSector будет содержать значения для Агга и aggB, но есть какой-то способ, чтобы получить эластичный поиск, чтобы сделать и на них, а не просто поиск на последнее значение в списке. ?

ответ

0

Решил, добавив .minimumshouldmatch(100%) к каждому запросу.

Смежные вопросы