2017-01-10 89 views
0

我是新來與彈性搜索聚合和一直停留了幾個小時,從這個環節採取了這種非常簡單的例子:https://www.elastic.co/guide/en/elasticsearch/guide/1.x/_aggregation_test_drive.html彈性搜索1.x的Java API的聚合

基本上我試圖做這個非常簡單的工作聚集的Java API的版本:

http://localhost:9200/cars/transactions/_search?search_type=count 
{ 
"aggs" : { 
    "colors" : { 
    "terms" : { 
    "field" : "color" 
    } 
    } 
} 
} 

,這是我試圖構建Java版本,但它返回空水桶:

SearchResponse sr = client 
      .prepareSearch("cars") 
      .setTypes("transactions") 
      .setSearchType(SearchType.COUNT) 
      .addAggregation(AggregationBuilders.terms("colors").field("color")) 
      .execute() 
      .actionGet(); 

雖然使用彈性DSL我得到一個適當resopnse按顏色分組的桶,但與Java版本我得到一個空桶。

更新:原來的代碼是正確的,我有這個問題是關係到一個測試用例使用它,反對它的作品正在運行的集羣中使用。

回答

0

我懷疑你的問題不是你的Java版本的請求,這很好。我試了一下我的一些測試數據,並得到了預期的結果。該集羣正在運行Elasticsearch 1.7.5。

的Java代碼片斷我用:

 final SearchResponse sr = client 
      .prepareSearch("index") 
      .setTypes("docType") 
      .setSearchType(SearchType.COUNT) 
      .addAggregation(AggregationBuilders.terms("aggName").field("fieldName")) 
      .execute() 
      .actionGet(); 

     System.out.println(sr); 

我得到的結果是:

{ 
    "took" : 130, 
    "timed_out" : false, 
    "_shards" : { 
     "total" : 5, 
     "successful" : 5, 
     "failed" : 0 
    }, 
    "hits" : { 
     "total" : 1927227, 
     "max_score" : 0.0, 
     "hits" : [ ] 
    }, 
    "aggregations" : { 
     "aggName" : { 
      "doc_count_error_upper_bound" : 0, 
      "sum_other_doc_count" : 0, 
      "buckets" : [ { 
       "key" : "key1", 
       "doc_count" : 757843 
      }, { 
       "key" : "key2", 
       "doc_count" : 620033 
      }, { 
       "key" : "key3", 
       "doc_count" : 549351 
      } ] 
     } 
    } 
} 
+0

OMG ...巨大的facepalm在這裏..實際上,只是經過測試和代碼工作,我遇到的問題是因爲我有這個內部的測試用例,出於某種原因,有些查詢會對嵌入式彈性適當的工作,而這一個失敗...不知道是什麼原因造成的,但是的,針對正在運行的羣集進行測試。 –

0

你正在做的搜索類型爲計數這是不是正確的聚合。你可以刪除searchtype並構造查詢如下

SearchResponse sr = client 
     .prepareSearch("cars") 
     .setTypes("transactions") 
     .addAggregation(AggregationBuilders.terms("colors").field("color")) 
     .execute() 
     .actionGet(); 
+0

你好,感謝您的建議,但我已經嘗試過這一點(現在雙重檢查)但結果仍然相同。 Count在這裏被用來避免這個鏈接中描述的提取fase:https://www.elastic.co/guide/en/elasticsearch/guide/1.x/_aggregation_test_drive.html –