弹性搜索和聚合中的问题

时间:2014-05-22 15:23:57

标签: elasticsearch elasticsearch-aggregation

我正在尝试使用我自己的参数从弹性搜索网站获取示例,但它无效。

查询:

{
  "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之类的操作,然后找出最大值。 我该如何修改上面的代码才能得到它?

1 个答案:

答案 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