2016-09-05 1 views
0

ElasticClient 2.4.4를 사용 중입니다.Elasticsearch (ElasticClient 네스트)에서 필터링 된 데이터 계산

은 내가 RegionSegments의 = (S1)에 얼마나 많은 항목을 계산하는 원 이상의 조회

var sample = client.Search<TestMenuItem>(s => s 
      .Query(q => 
       q.Term(p => p.RegionSegments, "s1") 
       && q.Term(p => p.RegionSegments, "s2") 
       && q.Term(p => p.RegionSegments, "s3") 
      )); 

있습니다. 나는 Aggregations를 사용해야 만하지만이 문제를 해결하는 좋은 예를 찾을 수 없다. 모든 아이디어? 당신은 단순히 s1, s2s3 RegionSegment 문서의 각각의 카운트가 필요한 경우

답변

1

, 당신이 다음과 같은 요청을 생성하는 모든

var multiSearchResponse = client.MultiSearch(ms => ms 
    // this is the default index for multi_search. Can override 
    // on each Search call if needed 
    .Index<TestMenuItem>() 
    // this is the default type for mulit_search. Can override 
    // on each search call if needed 
    .Type<TestMenuItem>() 
    // this is the default search_type. Can override on 
    // each search call if needed 
    .SearchType(SearchType.Count) 
    .Search<TestMenuItem>("s1", s => s 
     .Query(q => +q.Term(p => p.RegionSegments, "s1")) 
    ) 
    .Search<TestMenuItem>("s2", s => s 
     .Query(q => +q.Term(p => p.RegionSegments, "s2")) 
    ) 
    .Search<TestMenuItem>("s3", s => s 
     .Query(q => +q.Term(p => p.RegionSegments, "s3")) 
    ) 
); 

에 대한 카운트 search_type을 지정, 이에 대한 multi_search을 할 수

POST http://localhost:9200/testmenuitem-index/testmenuitem/_msearch?search_type=count 
{} 
{"query":{"bool":{"filter":[{"term":{"regionSegments":{"value":"s1"}}}]}}} 
{} 
{"query":{"bool":{"filter":[{"term":{"regionSegments":{"value":"s2"}}}]}}} 
{} 
{"query":{"bool":{"filter":[{"term":{"regionSegments":{"value":"s3"}}}]}}} 

각 검색 결과의 합계를 얻는 방법은 다음과 유사합니다.

var s1Total = multiSearchResponse.GetResponse<TestMenuItem>("s1").Total; 
+0

정확하게는 아닙니다. 먼저 쿼리 결과를 얻고이 쿼리 결과를 기반으로 계산해야합니다. – user1541069

+0

RegionSegments는 's1 s2 s3'또는 's3 s2'와 같은 문자열입니다. – user1541069

+0

은 분석되는 'RegionSegments'입니까? 's1' 또는's2' 또는's3'에 * 정확하게 * 매치 할 필요가 있습니까? –

관련 문제