You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenSearch嵌套字典数组索引后仅保留首个键值对问题求助

问题:OpenSearch嵌套字典数组仅保留首个键值对

版本信息

相关组件版本:OpenSearch/Dashboard 2.19.1,Docker部署

问题描述

向OpenSearch索引添加包含嵌套字典数组的文档时,数组中每个字典仅保留首个键值对,其余字段丢失。

示例:
原始数据片段:

"all_documents": [
    {"name": "name 1", "what_it_proves": "some proofs", "considered_by_court": true},
    {"name": "name 2", "what_it_proves": "some proofs 2", "considered_by_court": true}
]

执行GET /lawsuits-index/_doc/1返回结果片段:

"all_documents": [
    {"name": "name 1"},
    {"name": "name 2"}
]

配置与代码

数据摄入管道

PUT /_ingest/pipeline/lawsuits-pipeline
{
  "description": "An NLP ingest pipeline",
  "processors": [
    {
      "text_embedding": {
        "model_id": "NoBQUpYBM4rIdaEKP-bj",
        "field_map": {
          "court_decision": "passage_embedding"
        }
      }
    }
  ]
}

索引创建语句

PUT /lawsuits-index
{
  "settings": {
    "index.knn": true,
    "default_pipeline": "lawsuits-pipeline"
  },
  "mappings": {
    "properties": {
      "judge_names": {
        "type": "text"
      },
      "case_tags": {
        "type": "text"
      },
      "claims": {
        "type": "text"
      },
      "all_documents": {
        "type": "nested",
        "properties": {
            "name": {
              "type": "text"
            },
            "what_it_proves": {
              "type": "text"
            },
            "considered_by_court" : {
              "type": "boolean"
            }
        }
      },
      "key_documents": {
        "type": "nested",
          "properties": {
            "name": {
              "type": "text"
            },
            "rationale": {
              "type": "text"
            },
            "explanation" : {
              "type": "boolean"
            }
          }
        },
      "parties" :{
        "type": "object"
      },
      "case_number": {
        "type": "text"
      },
      "answer_type": {
        "type": "text"
      },
      "court_name": {
        "type": "text"
      },
      "court_decision": {
        "type": "text"
      },
      "passage_embedding": {
        "type": "knn_vector",
        "dimension": 768,
        "space_type": "l2"
      }
    }
  }
}

待索引文档

PUT /lawsuits-index/_doc/1
{
  "case_number": "А53-40279/24",
  "answer_type": "case_data",
  "court_name": "Арбитражный суд Ростовской области",
  "judge_names": ["Кривоносовая О.В."],
  "parties": {"plaintiff": ["Замалаев Павел Сергеевич"], "defendant": ["Отдел записи актов гражданского состояния Администрации города Новочеркасска Ростовской области"]},
  "claims": ["признание недействительным ненормативного правового акта", "обязанность предоставить сведения"],
  "court_decision": "Признать недействительным отказ Отдела ЗАГСа Администрации города Новочеркасска Ростовской области в представлении сведений конкурсному управляющему ООО «Гарантия» Замалаеву П.С., выраженный в письме от 19.07.2024 года № 58/723.",
  "all_documents": [
    {"name": "Решение Арбитражного суда города Москвы от 30.09.2021 по делу №А40-51398/20-70-88 Б", "what_it_proves": "ООО «Гарантия» признано несостоятельным (банкротом)", "considered_by_court": true},
    {"name": "Определение Арбитражного суда города Москвы от 19.01.2023 по делу №А40-51398/20-70-88 Б", "what_it_proves": "Конкурсным управляющим назначен Замалаев Павел Сергеевич", "considered_by_court": true},
    {"name": "Ответ Отдела ЗАГС г. Новочеркасска Ростовской области № 58/723 от 19.07.2024 года", "what_it_proves": "Отказ в представлении сведений конкурсному управляющему ООО «Гарантия» Замалаеву П.С.", "considered_by_court": true},
    {"name": "Закон о банкротстве (Федеральный закон от 26.10.2002 № 127-ФЗ)", "what_it_proves": "Право арбитражного управляющего на получение информации", "considered_by_court": true}
  ],
  "key_documents":[{
    "name": "Ответ Отдела ЗАГС г. Новочеркасска Ростовской области № 58/723 от 19.07.2024 года", "rationale": "Отказ в представлении сведений конкурсному управляющему ООО «Гарантия» Замалаеву П.С.", "explanation": "Повлияло на решение суда"},
    {"name": "Закон о банкротстве (Федеральный закон от 26.10.2002 № 127-ФЗ)", "rationale": "Право арбитражного управляющего на получение информации", "explanation": "Обоснование решения суда"}
  ],
  "claim_tags": ["признание недействительным ненормативного правового акта", "обязанность предоставить сведения"],
  "case_tags": ["банкротство", "конкурсное производство"]
}

已尝试方案

  • 使用动态映射
  • 为嵌套对象、普通对象及flat_object设置显式映射
  • 将整个文档放入flat_object结构

以上尝试均未解决问题,嵌套数组仍仅保留首个键值对。


问题原因与解决方案

核心原因

  1. 字段类型不匹配:key_documents的explanation字段在映射中定义为boolean类型,但实际传入的文档中该字段值为字符串(如"Повлияло на решение суда")。OpenSearch遇到类型不匹配时,会忽略不符合类型的字段,极端情况下会导致整个嵌套对象的其他字段被异常截断。
  2. 潜在映射冲突:若在手动创建索引前已插入过文档,OpenSearch会自动生成动态映射,后续手动创建的映射可能无法覆盖原有配置,导致字段处理异常。

解决方案

  1. 修正字段类型匹配:

    • 方法一:修改key_documents的映射,将explanation字段类型改为text:
      "key_documents": {
        "type": "nested",
        "properties": {
          "name": {"type": "text"},
          "rationale": {"type": "text"},
          "explanation" : {"type": "text"}
        }
      }
      
    • 方法二:将文档中explanation字段的值改为boolean类型(如true/false),匹配映射定义。
  2. 重建索引:

    • 删除现有索引:
      DELETE /lawsuits-index
      
    • 重新创建修正后的索引映射
    • 重新插入文档
  3. 验证摄入管道(可选):
    暂时移除索引的default_pipeline配置,重新插入文档,确认是否是摄入管道导致的异常。若恢复正常,需检查text_embedding处理器是否存在隐含的字段过滤逻辑。


内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:33:09