2016-09-05 22 views
0

我正在使用ElasticClient 2.4.4。在Elasticsearch中計算過濾的數據(ElasticClient嵌套)

我有一個查詢

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

比我想指望有多少項目是與RegionSegments = S1。 據我瞭解,我應該使用聚合,但無法找到很好的例子如何解決這個問題。任何想法?

回答

1

如果你只是需要每個s1s2s3 RegionSegment文件的數量,那麼你可以做這樣一個multi_search,指定計數search_type所有

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

這將產生以下要求

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'上完全匹配*? –