对特定字段

时间:2016-02-01 06:25:18

标签: elasticsearch elasticsearch-aggregation

我正在尝试使用以下查询对特定字段的结果进行分组:

{ 
  "from": 0, 
  "size": 0, 
  "fields": [ 
    "exitPage.categoryId" 
  ], 
  "aggs": { 
    "check": { 
      "terms": { 
        "field": "exitPage.categoryId" 
      } 
    } 
  } 
}

Elasticsearch服务器抛出此异常:

{ 
  "error": "ClassCastException[null]", 
  "status": 500 
}

这也是间歇性的 - 有时它会返回结果而有时却没有。服务器日志中没有更多可用的描述性信息。

有没有人知道这个问题?

修改:添加了Val

要求的错误日志
[2016-02-01 12:42:28,773][DEBUG][action.search.type ] [elastic71] failed to reduce search
org.elasticsearch.action.search.ReduceSearchPhaseException: Failed to execute phase [fetch], [reduce]
at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction$AsyncAction$2.onFailure(TransportSearchQueryThenFetchAction.java:159)
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:41)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassCastException

2 个答案:

答案 0 :(得分:0)

< p>您收到该异常是因为您的某些文档没有< code> exitPage< / code>属性,因此聚合器无法获得< code> categoryId< / code>这些文件的价值。< / p> < p>为了防止这种情况,您需要做的是过滤掉没有< code> exitPage< / code>的文档。属性,例如通过使用< a href =“https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html"rel =”nofollow“> <代码>存在< /代码>< / A> 。查询< / p为H. <预><代码> {   “来自”:0,   “大小”:0,   “query”:{< ---添加此查询     “过滤”:{       “过滤器”:{         “存在”:{           “field”:“exitPage”         }       }     }   },   “aggs”:{     “检查”:{       “条款”:{         “field”:“exitPage.categoryId”       }     }   } } < /代码>< /预>

答案 1 :(得分:0)

我重新启动了实例,这解决了这个问题。

我认为内部有一些损坏的缓存/索引,一旦重新启动实例就会被清除。如果有人知道更好的解释,请编辑此帖子。