2017-03-03 59 views
0

可以聚合返回所有值嗎?有沒有辦法用腳本來做到這一點?聚合返回所有值不做羣

{ 
"size": 0, 
"_source":["docDescription","datasource"], 
"query": { 
    "match_all":{} 
}, 
"aggs":{ 
    "projectNameMatchCount": { 
     "filter" : { "match": { "docDescription": ".ppt" } }, 
     "aggs":{ 
     "names":{ 
      "terms":{"field":"_id"} 
     } 
     } 
    }, 
    "datasourceSourceMatchCount": { 
     "filter" : { "match": { "datasource": "NGA" } } 
    } 
}    

}

在aggeration projectMatchCount

,我申請過濾器和調用其它aggegration,返回值,但長期會做一組,我不想GROUP BY,所有我想要的是返回字段值

+0

從您的查詢中,它不喜歡你agg正在以正確的方式使用。你能否用一個適當的例子來解釋這一點。 – Rahul

回答

1

聚合用於將數據集合在一起以驅動某個指標。如果你想要返回單個元素,你應該運行直接查詢/過濾器。聚合是後處理,它在您的查詢縮小的數據集上運行,並且比您的查詢/過濾器貴。所以,他們應該避免,直到你需要聚合度量。

話雖如此,從我的理解你的查詢是你使用兩個聚合。你想要返回一些文檔ID,而另一個只是返回基於不同過濾器的計數。可以通過在projectNameMatchCount的過濾器聚合中使用頂級聚合聚合來實現。有關更多詳細信息,請參閱:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html

但我相信只要在總查詢時間和ElasticSearch端消耗的資源方面做出兩個單獨查詢,一個查詢返回ID,另一個返回聚合以返回文檔的數量。

+0

是否可以將docDescription連接爲逗號分隔的字符串? – user884424

+0

我不認爲有辦法通過查詢本身來做到這一點。您將不得不自己在結果集上運行腳本。但它將是一個相當簡單的功能。只需遍歷結果集中的匹配,從_source獲取docDescription並繼續對其進行拼接。 –