我正在尝试使用我自己的参数从弹性搜索网站获取示例,但它无效。
查询:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"range": {
"activity_date": {
"from": "2013-11-01",
"to": "2014-11-01"
}
}
}
}
},
"aggs": {
"net_ordered_units": {
"sum": {
"field": "net_ordered_units"
}
}
}
}
我得到错误:
{
"error": "SearchPhaseExecutionException[Failed to execute phase [query_fetch], all shards failed; shardFailures {[YoGKlejVTC6jhg_OgPWXyTg][test][0]: SearchParseException[[test][0]: query[ConstantScore(cache(activity_date:[1383264000000 TO 1414886399999]))],from[-1],size[-1]: Parse Failure [Failed to parse source [{\"query\": {\"filtered\":{\"query\":{\"match_all\":{}},\"filter\":{\"range\":{\"activity_date\":{\"from\":\"2013-11-01\",\"to\":\"2014-11-01\"}}}}},\"aggs\":{\"net_ordered_units\":{\"sum\": {\"field\":\"net_ordered_units\"}}}}]]]; nested: SearchParseException[[test][0]: query[ConstantScore(cache(activity_date:[1383264000000 TO 1414886399999]))],from[-1],size[-1]: Parse Failure [No parser for element [aggs]]]; }]",
"status": 400
}
这里的碎片失败是什么?它没有说aggs的解析器,我该怎么办? 基本上,我需要执行sum之类的操作,然后找出最大值。 我该如何修改上面的代码才能得到它?
答案 0 :(得分:1)
我认为您的插件(用于执行基于CURL的弹性搜索查询)无法解析“aggs”标记。我使用Marvel Sense插件(http://www.elasticsearch.org/guide/en/marvel/current/)专门用于ES查询,您的查询工作正常!我对Postman(一个RESTful Chrome插件)进行了测试并猜测你的查询没有什么问题......所以尝试切换你的插件,看看是否有帮助。
更新: 要回答你问题的第二部分,
curl -s -XPOST your_ES_server/ES_index/url_to_query -d
'{"query":
{"bool":
{
"must": [{
"wildcard" : { "item_id" : "*" }
}]
}
},
"facets" : {
"facet_result":
{"terms":{
"fields":["item_count"]
}}
}
知道,实际上上面的查询不会获取特定字段键的最大计数,但会列出按降序排序的所有字段键(默认情况下)。因此,最自然的最重要的术语应该是您正在寻找的。对上述查询的响应如下所示。
"facets": {
"facet_result": {
"_type": "terms",
"missing": 0,
"total": 35,
"other": 0,
"terms": [
{
"term": 0,
"count": 34
},
{
"term": 2,
"count": 1
}
]
}
}
这可能不是一个干净的解决方案,但可以帮助您检索密钥的最大值(总和)。有关订购的更多信息,请参阅http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/search-facets-terms-facet.html#_ordering