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

具有布尔型多字段的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错误请求]\n{“错误”:“{”根本原因::[{”类型\:“映射程序解析\异常\”,“原因\:\”未能解析[用户数据.逻辑],“类型\:“映射程序解析\异常\”,“原因\:”未能解析[用户数据.逻辑],\由于只允许[true]或[false],无法分析值[auto\u directorUrl],“由\':{\'类型\':“非法的\'u参数\'u异常\',“原因\':\”未能分析值[auto\u directorUrl]

输入数据是一个字符串“auto_directorURL”,它失败了。ignore_格式错误的标志不适用于布尔类型。然而,这在v5中起到了作用。5.我在v6中发现了这一点。ES严格执行布尔类型值为“真”或“假”。但这在多个字段中失败,因为它没有ignore_格式错误的标志。解决这个问题的办法是什么?这是《生物武器公约》的突破还是一个错误

共有1个答案

章鸿光
2023-03-14

这是一个宣布的突破性变化。

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

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 Bad Request] \ n {\“ error \”:{\“ root_cause \”:[{\“ type \”:\“ mapper_parsing_exception \”,\“原因\“:\”无法解析[user_data.logical] \“}],\” type

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

  • 在阶段,我希望创建一个虚拟(布尔)字段,该字段如下: null 以下是我所尝试的: 此操作失败,原因是和消息。我在这里找到了问题,但这个用例略有不同,答案不是很容易理解。

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

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

  • 问题内容: 这可能是一个非常愚蠢的问题,但是对数据库表中的布尔字段建立索引是否会有很多好处? 在常见情况下,例如标记为“无效”的“软删除”记录,因此大多数查询都包含,这将有助于对该字段进行单独索引,还是应将其与其他常见搜索字段组合在一起?不同的索引? 问题答案: 没有。 您可以对要搜索的字段具有较高的选择性/基数进行索引。几乎所有表都消除了布尔字段的基数。如果有的话,它将使您的写入速度变慢(降低的