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

Elasticsearch Java API:[eventDefinitions]的对象映射尝试将字段[null]解析为对象,但找到了具体的价值?

逄宁
2023-03-14
问题内容

我正在尝试为以下文档工作进行映射:

{
  "eventDatabase": "abc",
  "usageLibraryEventType": "ABC",
  "name": "Prionti",
  "namespace": "Prionti's namespace",
  "latestBuildTimestamp": 1581348323634,
  "flattenedEventProperties": [
    "User Id"
  ],
  "eventDefinitions": [
    {
      "buildInfo": {
        "baseVersion": "1",
        "branch": "master",
        "buildName": "something.com",
        "orgName": "Prionti's org",
        "repoName": "myrepo",
        "buildTimestamp": 1581348323634,
        "packageName": "myrepo",
        "packagePath": "",
        "resolvedVersion": "1.2920",
        "rootModuleName": "repo",
        "rootPackagePath": ""
      },
      "eventKey": "myEvent",
      "eventDefinition": {
        "name": "myName",
        "namespace": "myNamespace",
        "meta": {
          "description": "No description available",
          "database": "myDatabase",
          "owner": null,
          "codeOwners": [
            "Prionti Nasir"
          ],
          "imgSrc": null,
          "isPublic": null,
          "yamlSrc": {
            "packageName": "my-package",
            "packageVersion": "static-1.2920",
            "relativePath": "something.yaml"
          }
        },
        "properties": {
          "userId": {
            "type": "number",
            "options": null,
            "isOptional": false,
            "description": null
          }
        },
        "class": "interaction"
      }
    }
  ]
}

我将排除buildInfo和其他一些字段,因此我相应地创建了一个映射:

{
  "settings": {
    "index": {
      "number_of_replicas": "2",
      "number_of_shards": "25",
      "analysis": {
        "analyzer": {
          "autocomplete": {
            "filter": [
              "lowercase",
              "autocomplete_filter"
            ],
            "tokenizer": "standard",
            "type": "custom"
          },
          "prefixMatch": {
            "filter": [
              "lowercase"
            ],
            "tokenizer": "standard",
            "type": "custom"
          }
        },
        "filter": {
          "autocomplete_filter": {
            "min_gram": "3",
            "max_gram": "10",
            "type": "edge_ngram"
          }
        }
      }
    }
  },
  "mappings": {
    "usageLibraryEventType": {
      "dynamic": false,
      "properties": {
        "eventDatabase": {
          "properties": {
            "name": {
              "type": "string"
            }
          },
          "enabled": "false"
        },
        "eventType": {
          "type": "string",
          "analyzer": "autocomplete"
        },
        "name": {
          "type": "string",
          "analyzer": "autocomplete"
        },
        "namespace": {
          "type": "string",
          "analyzer": "autocomplete"
        },
        "latestBuildTimestamp": {
          "type": "long"
        },
        "flattenedEventProperties": {
          "type": "string"
        },
        "eventDefinitions": {
          "properties": {
            "eventKey": {
              "type": "string",
              "index": "not_analyzed"
            },
            "eventDefinition": {
              "properties": {
                "name": {
                  "type": "string",
                  "index": "no"
                },
                "namespace": {
                  "type": "string",
                  "index": "no"
                },
                "meta": {
                  "properties": {
                    "description": {
                      "type": "string",
                      "analyzer": "prefixMatch"
                    },
                    "owner": {
                      "type": "string",
                      "index": "not_analyzed",
                      "null_value" : "N/A"
                    },
                    "codeOwners": {
                      "type": "string",
                      "index": "not_analyzed",
                      "null_value" : "N/A"
                    }
                  }
                },
                "class": {
                  "type": "string",
                  "index": "not_analyzed"
                }
              }
            }
          }
        }
      }
    }
  }
}

这给了我一个MapperParsingException。eventDefinitions被认为是JSON对象的每一个都将包含的列表buildInfoeventKeyeventDefinitioneventDefinition如您所见,还包含json对象。

@POST
  public UsageLibraryEventType indexEventType(UsageLibraryEventType usageLibraryEventType) {
    elasticsearchIndexerClient.addDocumentRequest(
        new IndexRequest(config.getUsageLibrarySourceTopic(), TYPE)
            .source(
                "eventDatabase", usageLibraryEventType.getEventDatabase(),
                "eventType", usageLibraryEventType.getUsageLibraryEventType(),
                "name", usageLibraryEventType.getName(),
                "namespace", usageLibraryEventType.getNamespace(),
                // fix these field names
                "latestBuildTimestamp", usageLibraryEventType.getLatestBuildTimestamp(),
                "flattenedEventProperties", usageLibraryEventType.getFlattenedEventProperties(),
                "eventDefinitions", usageLibraryEventType.getEventDefinitions()),
        config.getUsageLibrarySourceTopic())
        .join();
    return usageLibraryEventType;
  }

eventDefinitions是的清单EventDefinitionWithBuildInfo,每个都EventDefinitionWithBuildInfo包含buildInfoeventKeyeventDefinitionEventDefinition还包含一些字段和一个名为meta。的对象。尽管我在映射中将所有这些都映射了出来,但是我没有明确地将每个字段的值移交给最后一个当然,我没有办法分别输入每个字段eventDefinitionWithBuildInfo,然后再eventDefinition分别输入,因此我必须给它一个列表,其结果是它不会一直映射到最后一个单元。我该怎么办?我应该定义称为EventDefinitionWithBuildInfo
and的 新类型EventDefinition吗?


问题答案:

@IanGabes是救世主。我度过了一个周末的哭泣,试图使它正常工作。但是我的对象是如此嵌套,如此分层,并且我期望ES能够自己检测内部字段。我向很多人展示了这一点,他们一无所知。然后,当我无望地看着瑞克和莫蒂(Rick
and Morty)掉下来的筹码时,@
IanGabes像天使一样来到,要求我简单地使用杰克逊(Jackson)将对象转换为杰森(Json),并且它不会反序列化为最后一个单元我在做
谢谢。你摇滚,我很烂。



 类似资料:
  • 我在elasticsearch中存储了一个JSON字符串作为Object,但在下面的requestPayload作为JSON字符串正文的地方得到了异常:[requestPayload]的对象映射试图将字段[requestPayload]解析为Object,但发现了一个具体的值 方法如下: ====以下实体===== 公共类PushBookingNotification实现Serializable{

  • 我有一个对象,我正试图映射到。现在这个有一个名为的枚举,其中包含一些值。我想使用将它们映射到中的其他枚举值。以下是我到目前为止的代码: 当我尝试编译它时,我得到了错误:

  • 问题内容: 我试图使用Java将DO转换为DTO,并在开始编写自己的工具之前寻找自动化工具。我只是想知道是否有可用的免费工具。 问题答案: Dozer是Java Bean到Java Bean的映射器,可将数据从一个对象递归复制到另一个对象。通常,这些Java Bean将具有不同的复杂类型。 推土机支持简单的属性映射,复杂的类型映射,双向映射,隐式-显式映射以及递归映射。这包括映射集合属性,这些属性

  • 问题内容: 我将开始一个使用Spring和Hibernate管理的REST应用程序项目。 我知道Spring允许您从HTTP Request(带有注释)中获取Java对象。如果此Java对象也是Hibernate实体,是否有冲突?嵌套对象是否起作用(如关系)? 问题答案: 我们正在使用这种方法来简化设计并摆脱许多dto(我们滥用它们太多了)。基本上,它对我们有用。 但是,在我们的REST模型中,我

  • 问题内容: 我很确定,这是有关XML到Java Object转换的许多重复问题之一。但是由于找不到更简单的解决方案,所以我启动了该线程。 我有一个xsd [实际上是我正在设计]和xml。我想按照映射将xml数据自动映射到Java bean 现在我的Java类将是 是否有任何简单的工具/框架可以将数据从XML自动映射到Java Bean [必须支持属性/元素映射]。教程会很好。 顺便说一句,我正在使

  • 这是我的DTO: 这是我的实体: 我想配置我的ModelMapper将Tag#id映射到TagVolumeDTO#idTag。这可能吗?