【问题标题】:Issue in Elastic Search Sum Aggregation弹性搜索总和聚合中的问题
【发布时间】:2014-05-22 15:23:56
【问题描述】:

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

查询:

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

【问题讨论】:

  • 您是否使用任何插件来管理您的集群?
  • @eliasah 是的,内部包装插件。
  • 您使用的是 Elasticsearch 1.0.0 还是更新版本?
  • @AlexBrasetvik ES 1.0.0,这有什么不同吗?
  • 该搜索应该适用于 >= 1.0.0 的任何内容,并且会给出一个错误,就像您在旧版本中遇到的错误一样,因为 1.0.0 中引入了聚合。

标签: elasticsearch elasticsearch-aggregation


【解决方案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

【讨论】:

  • 感谢您提供的信息,我会尝试更改插件并查看它。来到第二部分,我认为您的查询确实找到了字段的总和和最大值,而我想先找到总和,然后在总和值中找到最大值。 SQL 查询中的 max(sum) 之类的东西。
  • 只是为了我的理解确认,方面作为分组依据(在 SQL 中)对所有相似的术语进行分组并返回它的计数。通过使用排序,我们按计数的降序排序并弹出第一个元素以从中获取最大值。我说的对吗?
  • @thirstylad : 准!
猜你喜欢
  • 2015-06-06
  • 2019-02-15
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多