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

elasticsearch中的Udpate对象

金阳曜
2023-03-14

我正在尝试更新elasticsearch中的一个对象,但出现了下一条错误消息

Elasticsearch异常[type=mapper\u parsing\u exception,[errorMessages]的reason=object mapping试图将字段[errorMessages]解析为object,但找到了一个具体值]

This is my mappings:

{
.hierarchies: {
  mappings: {
   hierarchy: {
    dynamic: "strict",
   _all: {
      enabled: false
    },
    properties: {
      errorFlag: {
       type: "keyword"
     },
      errorMessages: {
        properties: {
           isFavourite: {
             type: "text"
        },
          message: {
             type: "text"
         }
       }
     },

  }
 }
}

我想更新的信息是:

"errorMessages" -> "{"isFavourite":"yes","message":"hola"}"

我使用的其余客户端连接器和对象UpdateRequest:

 UpdateRequest updateRequest = new UpdateRequest(
                collection,
                type,
                id);

        updateRequest.doc(document);
        updateRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
        try {
            return esConnector.getRestClient().update(
                    updateRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            throw new ElasticsearchGenericException("Error updating document " + collection + " > " + type + " id: " + id + " (Reason: " + e.getMessage() + ")");
        }
    }

文档的值是带有errorMessages的json。这是UpdateRequest对象:

更新{[.hierarchys][hierarchy][ZEqi1GkByxIcUBtfsLRV],doc[index{[null][null][null],source[{“errorMessages”:“{\'isfavorite\':\'yes\',\'message\':\'hola\'”}],脚本化的{upsert[false],检测{noop[true]}

你知道这个问题吗?

共有1个答案

华修永
2023-03-14

errorMessages应该用如下对象数组表示,而不是字符串值:

{
  "errorMessages": [
    {
      "isFavourite": "yes",
      "message": "hola"
    }
  ]
}
 类似资料:
  • 问题内容: 我知道在Elasticsearch中,我们可以在文档之间建立子/父关系。 然后,在建立索引时,我可以传递父代ID,以便将子文档和父文档链接起来: 无论如何,在Elasticsearch中建立多对多关系的模型吗? 数据驻留在具有以下架构的MySQL数据库中: 当前这是我的映射(请原谅数组表示法,我在PHP中使用Elastica与我的Elasticsearch服务器通信): 这种方法的问题

  • 问题内容: 这是我的文档架构。是嵌套对象。我需要更新/删除其中的特定文件。我能够使用groovy脚本更新字段。 但是不知道如何更新嵌套对象。 例如,我想将此添加到中。 并且我的文档应更改为: 如果我基于= 122 执行删除,则我的记录应如下所示 问题答案: 要将新元素添加到嵌套字段,您可以像这样进行操作: 要从嵌套字段列表中删除现有元素,可以按以下步骤进行:

  • 问题内容: 我想知道是否有一种方法可以在Elasticsearch中将模糊性应用于_all。 我尝试以下查询未成功。 收到错误。 问题答案: 以下查询对我有用。

  • 问题内容: 我想完全匹配 字段中的字符串,并回去一天拉所有这些记录。我拥有的json也似乎与普通单词匹配。我不确定我要去哪里。我是否需要向此查询添加JSON?我当前拥有的JSON如下所示: 问题答案: 如此处所述:查找精确值,因为在对字段进行索引时已对其进行了分析- 您无法完全匹配其标记(“:”)。每当令牌应可搜索时,映射应为“ not_analyzed”,并且数据需要重新索引。 如果您希望仅轻松

  • 问题内容: 我有一个类似于上述对象的文档结构,我只想返回名称为“ abc”的用户,但问题是它与名称“ abc”匹配但返回了所有数组。我只想要匹配的用户。 映射- 问题答案: 然后,如果您将字段映射为类型,则这是一个好的开始! 使用nested,您可以通过如下查询仅检索匹配的用户名:

  • 问题内容: 我正在使用以下映射: 文件范例: 我的问题是如何检索此文档并按“日期”对嵌套对象“注释”进行排序?结果: 问题答案: 您需要在inner_hits上对进行排序。这将为您提供所需的输出 我使用的源过滤得到的只有作为将被检索里面,但你能避免,如果你想 是5,因为默认值为3,并且在给定的示例中我们有4个对象。 希望这可以帮助!