【问题标题】:ClassCastException[null] when grouping on a particular field对特定字段进行分组时的 ClassCastException[null]
【发布时间】:2016-05-09 12:42:11
【问题描述】:

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

{ 
  "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

【问题讨论】:

  • 您的所有文档是否都有该字段的值,或者该字段有时是否可以为空?
  • 您的所有文档都有exitPage 对象吗?显然,有些可能不会。
  • 是的,有些人可能没有这个exitPage对象

标签: elasticsearch elasticsearch-aggregation


【解决方案1】:

您收到该异常是因为您的某些文档没有 exitPage 属性,因此聚合器无法获取这些文档的 categoryId 值。

为了防止这种情况,您需要做的是过滤掉没有exitPage 属性的文档,例如使用exists 查询。

{
  "from": 0,
  "size": 0,
  "query": {                        <--- add this query
    "filtered": {
      "filter": {
        "exists": {
          "field": "exitPage"
        }
      }
    }
  },
  "aggs": {
    "check": {
      "terms": {
        "field": "exitPage.categoryId"
      }
    }
  }
}

【讨论】:

  • 这不起作用......三种状态 - 1)结果,2){“错误”:“ReduceSearchPhaseException [无法执行阶段[fetch],[reduce]];嵌套:ClassCastException;” ,“状态”:503 } 3){“错误”:“ClassCastException [null]”,“状态”:500 }
  • 您的 ES 日志中必须记录一些内容。你能分享一下吗(在你的问题中也许你可以粘贴完整的输出)?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多