2016-02-19 136 views
0

我正在映射一个couchbase网关文档,我想告诉elasticsearch避免索引由网关添加的内部属性,如“_sync”,该对象包含另一个名为“channels”的对象,其格式如下:如何在elasticsearch中映射动态字段值?

"channels": { 
    "i7de5558-32ad-48ca-bf91-858c3a1e4588": 12 
} 

所以我想这个对象的映射是这样的:

"channels": { 
    "type": "object", 
    "properties": { 
     "i7de5558-32ad-48ca-bf91-858c3a1e4588": { 
      "type": "integer", 
      "index": "not_analyze" 
     } 
    } 
} 

的问题是,按键总是在不断变化,所以我不知道我是否应该使用通配符这样的“ *“:{”type“:”integer“,”index“:”not_analyze“}或者做其他事情。 有什么建议吗?

回答

1

如果这些字段是整数类型的,你不必在映射中明确地提供它们。您可以创建一个空映射,索引具有这些字段的文档。 Elasticsearch将推断字段的类型并动态更新映射。您也可以使用dynamic templates

{ 
"mappings": { 
    "my_type": { 
    "dynamic_templates": [ 
     { 
      "analysed_string_template": { 
       "path_match": "channels.*", 
       "mapping": { 
       "type": "integer" 
       } 
      } 
     } 
    ] 
    } 
    } 
} 
+0

非常感谢,这没有把戏。 – onizukaek

0

那里`s动态的方式做到这一点,因为你需要,被称为dynamic template

使用模板,你能这样创建规则:

PUT /my_index 
{ 
    "mappings": { 
     "my_type": { 
      "date_detection": false 
     } 
    } 
} 

你的情况,你可以创建一个模板将通道对象内的所有新闻字段设置为not_analyze。 希望它能帮到

相关问题