当前位置: 首页 > 知识库问答 >
问题:

ElasticSearch关键字映射导致非法的状态异常

蓝泰平
2023-03-14

在spring boot应用程序中,当将一个对象索引到es中时,我会遇到以下异常。

Suppressed: org.elasticsearch.client.ResponseException: method [PUT], host [http://localhost:9299], 
URI [/my_index_name/_doc/1000001_000000004-v2?timeout=5s], status line [HTTP/1.1 400 Bad Request]
{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to parse field [billingperiod] 
of type [keyword] in document with id '1000001_000000004-v2'. Preview of field's value: 
'{enddate=2016-12-31, startdate=2016-10-01}'"}],"type":"mapper_parsing_exception","reason":"failed to 
parse field [billingperiod] of type [keyword] in document with id '1000001_000000004-v2'. Preview of 
field's value: '{enddate=2016-12-31, startdate=2016-10-01}'","caused_by":{"type":"illegal_state_exception",
"reason":"Can't get text on a START_OBJECT at 1:399"}},"status":400}
    at org.elasticsearch.client.RestClient.convertResponse(RestClient.java:318)
    at org.elasticsearch.client.RestClient.performRequest(RestClient.java:288)
    at org.elasticsearch.client.RestClient.performRequest(RestClient.java:262)
    at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1628)
    ... 133 common frames omitted
Caused by: org.elasticsearch.ElasticsearchException: 
Elasticsearch exception [type=illegal_state_exception, reason=Can't get text on a START_OBJECT at 1:399]
at org.elasticsearch.ElasticsearchException.innerFromXContent(ElasticsearchException.java:496)
at org.elasticsearch.ElasticsearchException.fromXContent(ElasticsearchException.java:407)
at org.elasticsearch.ElasticsearchException.innerFromXContent(ElasticsearchException.java:437)
at org.elasticsearch.ElasticsearchException.failureFromXContent(ElasticsearchException.java:603)
at org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:179)
... 136 common frames omitted

这个类有两个静态字段和两个类型为LocalDate的实例变量,还有一个视图方法,其中一个是被重写的toString。

映射如下。没有映射,索引就可以正常工作。但是,由于对象可以为null,因此需要配置null_值。

    {
      "dynamic_templates": [
        {
          "mapStringToKeywordByDefault": {
            "match_mapping_type": "string",
            "mapping": {
              "type": "keyword"
            }
          }
        }
      ],
      "properties": {
        "billingperiod": {
          "type": "keyword",
          "null_value": "anemptystring"
        }
      }
    }

我试图将关键字替换为展平,但是,文档声明:“一个字符串值,它被展平对象字段中的任何显式空值替换。默认值为null,这意味着空sield被视为丢失。”因此,如果对象本身为空,则它不工作。

ElasticSearch 7.10版本(无法更改)

我犯了什么错?我该怎么做才能让它工作?

共有1个答案

松景铄
2023-03-14

您的映射应该正确地反映您的数据模式,因此您应该有如下内容:

"billingperiod": {
  "properties": {
    "startdate": {"type": "date"},
    "enddate": {"type": "date"}
  }
}
 类似资料:
  • 我的Android应用程序使用FragmentTabHost,有4个选项卡A、B、C、D。我在选项卡A中有片段A1,我导航到选项卡A中的第二个片段A2,然后切换到选项卡B,然后切换回选项卡A。现在我单击返回按钮,该按钮将调用popBackStack()方法,我遇到崩溃,说IllegalStateException片段A1已经添加。你能帮忙吗?这是我用来在主选项卡活动中创建选项卡的代码, 我用这段代

  • 问题内容: 如何将轮询线程传递给另一个线程进行处理。程序执行在具有主方法和线程池的控制器类中: 主类控制器 具有轮询类的线程的方法 具有proc类的线程的方法 轮询类和控制器类 我的任务和问题是: 1.控制器应同时处理轮询器和处理器线程,并且应仅调用轮询器和处理器线程 2.现在我的问题是如何使轮询线程等待3秒并并行通知处理器。 我得到如下错误: 这里如何实现异步处理? 问题答案: 你需要阅读的东西

  • 我正在尝试使用下面的快速加载API 连接…等是完美的。 我确切地知道它在哪里失败 例外情况是 < code >线程“main”Java . lang . illegalstateexception中出现异常:示例失败。 这是我试图上传的表格。它是格式,当我通过记事本打开它时,它看起来像这样 为什么我会得到这个异常?我该如何改进?据我理解问题是< code > pstmtfld . setascii

  • 问题内容: 我想将a转换为,所以我想可以解决这个问题,但是它说不支持type失败。但是,如果我使用带键字符串,它可以正常工作。 http://play.golang.org/p/qhlS9Nt8qQ 稍后在检查编组代码时,将进行显式检查,以查看键是否不是字符串并返回… 为什么什至不能使用基元作为键?如果json标准不允许非字符串键,是否不应该将原语转换为字符串并将其用作键? 问题答案: 这不是因为

  • 问题内容: 这是我的用法- 另外,我在http GET周围放置了一个finally块- 这是我的堆栈跟踪- 我正在使用Quartz计划监视Http端点的工作。这是我的连接池配置 Maven依赖..工件版本 编辑 -好吧,通过不关闭finally块中的CloseableHttpClient,问题解决了。有人能说出为什么这样吗? 如果关闭客户端,为什么连接池会关闭? 是上面的closeablehttp

  • 这是我如何使用它 - 此外,我已经在超文本传输协议GET周围放置了一个最终块- 这是我的堆栈跟踪- 我正在使用Quartz来安排监控Httpendpoint的工作…这是我的连接池配置 马文依赖..神器版本 编辑-嗯,这个问题通过在最后一个块中不关闭CloseableHttp客户端而得到解决…有人能告诉我为什么它会这样吗?如果我关闭客户端,为什么连接池会关闭? 上面的closeablehttpcli