当前位置: 首页 > 面试题库 >

创建过程中具有布尔类型的多字段的doc失败

单琛
2023-03-14
问题内容

在v5.5中,我们有以下映射可以正常工作

PUT multiple_datatypes
{
  "mappings": {
    "_doc": {
      "properties": {
        "user_data": {
          "type": "text",
          "fields": {
            "numeric": {
              "type": "double",
              "ignore_malformed": true
            },
            "date": {
              "type": "date",
              "ignore_malformed": true
            }
            "logical": {
              "type": "boolean",
             }
          }
        }
      }
    }
  }

在6.2中,相同的映射失败,并显示错误
HTTP / 1.1 400 Bad Request] \ n {\“ error \”:{\“ root_cause \”:[{\“ type \”:\“
mapper_parsing_exception \”,\“原因\“:\”无法解析[user_data.logical] \“}],\” type
\“:\” mapper_parsing_exception \“,\”原因\“:\”无法解析[user_data.logical] \“,\ “
caused_by \”:{\“ type \”:\“ illegal_argument_exception \”,\“ reason
\”:\“由于仅允许[true]或[false],无法解析值[auto_directorUrl]

输入数据为字符串“
auto_directorURL”,但失败。ignore_malformed标志不适用于布尔类型。但是,这在v5.5中有效。我发现在v6.2中,ES严格将布尔类型值强制为“
true”或“ false”。但这在多字段中失败,因为它没有ignore_malformed标志。有什么解决方案?这是BWC休息和错误吗


问题答案:

这是一个宣布的重大变化。

一种替代方法是使用带有转换处理器的摄取节点来将该字段的布尔值存储到另一个布尔字段中:

PUT _ingest/pipeline/boolean-pipeline
{
  "description": "converts the content of the field to a boolean value",
  "processors" : [
    {
      "convert" : {
        "field" : "user_data",
        "target_field" : "user_data_boolean",
        "type": "boolean",
        "on_failure" : [
          {
            "set" : {
              "field" : "user_data_boolean",
              "value" : false
            }
          }
        ]
      }
    }
  ]
}

然后,您可以使用该管道为数据建立索引

PUT test/doc/1?pipeline=boolean-pipeline
{
  "user_data": "true"
}

PUT test/doc/2?pipeline=boolean-pipeline
{
  "user_data": "auto_directorURL"
}

结果,您将获得以下索引数据,这几乎是您期望的:

"hits" : [
  {
    "_index" : "test",
    "_type" : "doc",
    "_id" : "2",
    "_score" : 1.0,
    "_source" : {
      "user_data" : "auto_directorURL",
      "user_data_boolean" : false
    }
  },
  {
    "_index" : "test",
    "_type" : "doc",
    "_id" : "1",
    "_score" : 1.0,
    "_source" : {
      "user_data" : "true",
      "user_data_boolean" : true
    }
  }
]


 类似资料:
  • 在v5.5中,我们有以下映射,它工作正常 在6.2中,相同的映射失败,错误为 HTTP/1.1 400错误请求]\n{“错误”:“{”根本原因::[{”类型\:“映射程序解析\异常\”,“原因\:\”未能解析[用户数据.逻辑],“类型\:“映射程序解析\异常\”,“原因\:”未能解析[用户数据.逻辑],\由于只允许[true]或[false],无法分析值[auto\u directorUrl],“

  • 问题内容: 我的模特: 我想同时保存并保存在该模型中: 我知道这是错误的,但是我敢肯定,你会明白我的意思。你会怎么做? 问题答案: 你不能从未保存的对象创建m2m关系。如果有pk,请尝试以下操作: 更新:阅读了saverio的答案后,我决定对这个问题进行更深入的研究。这是我的发现。 这是我最初的建议。它可以工作,但不是最佳选择。(注意:我使用的是和而不是s和,但你明白了。) 它总共产生7个查询:

  • 本文向大家介绍在已创建的具有MySQL TEXT数据类型的字段值中连接字符串,包括了在已创建的具有MySQL TEXT数据类型的字段值中连接字符串的使用技巧和注意事项,需要的朋友参考一下 为此,请使用CONCAT()。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是将字符串连接为文本数据类型的查询- 让我们再次检查表记录-

  • 从使用RecycerView创建动态列表: 当我们创建时,我们必须指定将与适配器绑定的。 是否可以创建具有多种视图类型的?

  • 如何创建具有整数和字符串输入类型的?如果我创建一个: 这将是一个类型。如果我将其创建为: 这将是类型。我如何创建一个,它可以接受整数和字符串输入类型?谢谢。

  • 我们知道,要创建不可变类,我们需要将一个类声明为final,需要将所有字段声明为final,并且该类中不应该存在任何setter方法。我们需要在构造函数中初始化那些字段。 但是当我们有10多个字段或者更多字段的时候会发生什么呢?我们不能传递构造函数中的所有字段,对吧?在这个场景中,我们如何创建一个不可变的类呢?