我不熟悉弹性搜索并请求帮助。 基本上我的弹性搜索中有大约200万个文档,文档如下所示:
{
"_index": "flipkart",
"_type": "PSAD_ThirdParty",
"_id": "430001_MAM_2016-02-04",
"_version": 1,
"_score": 1,
"_source": {
"metrics": [
{
"id": "Metric1",
"value": 70
},
{
"id": "Metric2",
"value": 90
},
{
"id": "Metric3",
"value": 120
}
],
"primary": true,
"ticketId": 1,
"pliId": 206,
"bookedNumbers": 15000,
"ut": 1454567400000,
"startDate": 1451629800000,
"endDate": 1464589800000,
"tz": "EST"
}
}
我想写一个满足以下条件的聚合查询:
1)基于"_index"
,"_type"
和"pliId"
的第一次查询。
2)根据metrics.id = "Metric1"
对metrics.value进行汇总和。
基本上我需要根据某些字段查询记录,并根据指标ID对特定指标值进行汇总。 请帮我解决问题。
答案 0 :(得分:1)
您的metrics
字段必须是nested
类型:
"metrics": {
"type": "nested",
"properties": {
"id": {
"type": "string",
"index": "not_analyzed"
}
}
}
如果您希望Metric1
匹配,意味着大写字母,那么如上所示id
需要not_analyzed
。
然后,如果您只想要metrics.id = "Metric1"
聚合,则需要以下内容:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"pliId": 206
}
}
]
}
}
}
},
"aggs": {
"by_metrics": {
"nested": {
"path": "metrics"
},
"aggs": {
"metric1_only": {
"filter": {
"bool": {
"must": [
{
"term": {
"metrics.id": {
"value": "Metric1"
}
}
}
]
}
},
"aggs": {
"by_metric_id": {
"terms": {
"field": "metrics.id"
},
"aggs": {
"total_delivery": {
"sum": {
"field": "metrics.value"
}
}
}
}
}
}
}
}
}
}
答案 1 :(得分:0)
创建新索引: 方法:PUT, 网址:http://localhost:9200/google/
体:
foreach (ListViewItem item in listview1.Items)
{
if (item.SubItems[0].Text == searchstr)
{
var Name = listview1.FindItemWithText(searchstr);
if (Name != null)
{
var index = listview.Items.IndexOf(Name);
}
}
}
然后我插入了大约20万个文档,然后运行查询并且它有效。
响应:
{
"mappings": {
"PSAD_Primary": {
"properties": {
"metrics": {
"type": "nested",
"properties": {
"id": {
"type": "string",
"index": "not_analyzed"
},
"value": {
"type": "integer",
"index": "not_analyzed"
}
}
}
}
}
}
}