【问题标题】:Nest and elastic search- update mapping for nested object?嵌套对象的嵌套和弹性搜索更新映射?
【发布时间】:2015-11-26 18:01:16
【问题描述】:

我正在尝试向现有嵌套文档添加新属性。我的文档如下所示:

"mappings": {
  "test": {
    "_routing": {
      "required": true,
      "path": "tId"
    },
    "properties": {

      "series": {
        "type": "nested",
        "properties": {

          "iType": {
            "type": "string",
            "index": "not_analyzed",
            "doc_values": true
          },
          "isValid": {
            "type": "boolean"
          },

        },
      },
    }
  }

我要插入到嵌套文档“系列”的属性是“iType”。 如何使用 NEST put mapping API 更新现有映射?

任何帮助将不胜感激。

提前致谢。

#####*****已更新*****##########

我需要用属性更新嵌套元素的映射:

"iType": {
  "type": "string",
  "fields": {
    "raw": {
      "type": "string",
      "index": "not_analyzed",
      "doc_values": true,
      "fielddata": {
        "loading": "eager_global_ordinals"
      }
    }
  }
},

我如何用 NEST 做到这一点?

我的查询如下:

var response2 = elasticClient.Map < Test > (e => e
  .Properties(props => props
    .NestedObject < series > (s => s
      .Properties(sprops => sprops
        .String(n => n.Name(name => "iType"))))));

我得到一个异常:无法获取嵌套 sobject 映射的字段名称 查询中需要更正吗?

【问题讨论】:

    标签: elasticsearch nest


    【解决方案1】:

    您可以通过

    更新嵌套对象的映射
    var response = client.Map<YourType>(m => m
        .Properties(p => p
            .NestedObject<YourNestedType>(n => n
                .Name(name => name.NestedObject)
                .Properties(pp => pp
                    .String(s => s.Name(name => name.NewProp))
                ))));
    

    更新

    这是您可以使用multi fields 更新索引映射的方法:

    var response = client.Map<Test>(m => m
        .Properties(p => p
            .NestedObject<Series>(nested => nested
                .Name(name => name.Series)
                .Properties(pp => pp
                    .MultiField(mf => mf
                        .Name(name => name.iType)
                        .Fields(f => f 
                            .String(s => s.Name(n => n.iType))
                            .String(s => s
                                .Name(n => n.iType.Suffix("raw"))
                                .Index(FieldIndexOption.NotAnalyzed)
                                .DocValues()
                                .FieldData(fd => fd
                                    .Loading(FieldDataLoading.EagerGlobalOrdinals))))))
                ))); 
    

    您遇到了异常,因为您没有为嵌套对象指定名称,请再看一下我的映射定义:

    希望对你有帮助。

    【讨论】:

    • 感谢您的回答。我已经更新了这个问题。我需要向属性添加原始属性。如何做到这一点?
    • 我需要添加一个名为“IType”的新属性,其属性为“raw”,如问题更新部分所述。
    猜你喜欢
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多