【问题标题】:Adding document to index without mapping将文档添加到索引而不进行映射
【发布时间】:2019-08-30 09:42:18
【问题描述】:

我目前在 Elasticsearch 5.5 中有一个索引,其中包含几种不同的文档类型。其中一个文档是一个复杂的 POCO 对象,我使用动态映射(没有预先设置映射)将其索引到 Elasticsearch。同一索引中的其他文档类型确实具有映射。我需要将所需路由标志添加到索引中,这对于我刚刚使用的具有映射的文档来说很好:

  .Mappings(m => m
   .Map<DocType>(mDocType => mDocType.Properties(DocType.AddAllMappings).RoutingField(routing => routing.Required()))

我是否将 RoutingField 所需的设置添加到正在动态映射的文档中?我宁愿不必为此文档设置所有映射、子元素等,因为正如我所提到的,它是一个复杂的对象。

【问题讨论】:

    标签: elasticsearch nest


    【解决方案1】:

    请参阅index mapping api 中的第三个示例,了解将特定字段添加到类型映射的示例。

    每个不同的文档类型都有自己的映射,并且(据我所知,有一段时间没有使用 5.x)默认情况下,映射将在映射中动态添加新字段。除非您关闭,否则此行为将保持不变。使用映射 api 时,您基本上将一些属性附加到现有映射(由 ES 动态创建的映射),所以我相信您可以简单地使用该 api,将字段添加到数据中,而无需再次声明整个事物或添加新的问题将来动态地添加到它的字段。

    实际上,您可以直接在数据中添加字段,而无需关心映射。

    附带说明,您可以使用GET on the index mapping 获取您的类型的当前映射;这是您当前动态映射的正确格式的映射(因此,如果您最终想要添加一个字段并将其设为静态或其他内容,则无需自己重写所有内容;您可能还想备份它,如果你在玩映射)。

    【讨论】:

    • 感谢@littledaxter。我有一个问题,虽然我什至无法将动态文档添加到集群中,因为在我为其他文档类型设置映射之后,它请求路由字段是必需的。因此,在我的情况下,mDocType 最初被映射并包含路由所需标志。然后,当我尝试将它们添加到集群时,任何其他未映射的文档都会出错。
    • 关于现有索引映射的 GET,我能够运行它,但获得映射的 JSON,而我正在实现 NEST 以创建文档映射。研究如何使用它
    猜你喜欢
    • 1970-01-01
    • 2020-02-07
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多