在ElasticSearch Put Mapping

时间:2015-11-10 16:35:06

标签: elasticsearch nest elasticsearch-net

我们正在升级到ElasticSearch 2.0并遇到了我们在Nest 1.7.0中的映射问题:我们有两种类型共享一个字段(格式相同):

"@timestamp": {
            "type": "date",
            "format": "epoch_millis||dateOptionalTime"
          }

当我们尝试在启动时为其中一个受影响的类型添加映射(我们目前每次PUT映射),我们会收到此错误:

{
  "error": {
    "root_cause": [{
      "type": "merge_mapping_exception",
      "reason": "Merge failed with failures {[mapper [@timestamp] is used by multiple types. Set update_all_types to true to update [format] across all types.]}"
    }],
    "type": "merge_mapping_exception",
    "reason": "Merge failed with failures {[mapper [@timestamp] is used by multiple types. Set update_all_types to true to update [format] across all types.]}"
  },
  "status": 400
}

我们正在使用描述here的基于代码的映射,但是我没有看到从这种方法挂起查询字符串的方法,而没有使用我们的客户端的Raw属性使用这样的东西:

_client.Raw.IndicesPutMapping("ourindex", "ourtype", PutMappingDescriptorObj, parameters => parameters.AddQueryString("update_all_types", null));

我已经浏览了Nest的2.0 branch,但是没有找到任何对这些映射调用的update_all_types查询字符串参数的引用。

假设可以使IndicesPutMapping()调用起作用,那么这是我们唯一的选择吗?我开始怀疑我们是否应该只是有条件地添加这些映射。

1 个答案:

答案 0 :(得分:0)

事实证明我们能够找到另一种方式:当我们创建映射时,我们没有明确地为我们的// formatted strangely to make the addition more obvious _client.Map<OurType>(m => m.Properties(ps => ps .Date(d => d.Name(es => es.Date) // es is a reference to an instance of OurType, and Date is the name of the field being mapped to @timestamp .Format("epoch_millis||dateOptionalTime") // this is what fixed it ) //other props ) //other stuff ); 字段提供格式,而2.0似乎导致系统将其视为改变,因此我们的问题。在我们的映射逻辑中,我们能够通过这些日期字段的现有格式固定,如下所示:

Comparator