0

我正在尝试使用我自己的参数从弹性搜索站点获取示例,但它不起作用。

询问:

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

4

1 回答 1

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

于 2014-05-22T17:51:26.830 回答