动态映射已禁用在ElasticSearch中无效

时间:2017-05-12 23:02:47

标签: hadoop elasticsearch dynamic-mapping

当我尝试在ElasticSearch设置中禁用动态映射时,我遇到了错误。我正在使用ElasticSearch 1.7版本来实现。

StackTrace:

/

设置摘要:

/page/1

我发现ES端点上的设置中禁用了动态映射,但作业失败。我有一个avro json映射文件和es json映射文件,其中avro json映射文件是超集,而es json映射文件是子集。我不希望超集映射文件中的所有字段都反映在ES索引上,而只反映在子集映射文件中的转储字段。我做错了还是有其他方法可以做到。

感谢。

1 个答案:

答案 0 :(得分:0)

那是因为你设置了"index.mapper.dynamic": false,这意味着如果没有先声明新类型,就不会自动创建新类型。

您想要做的是在您的类型的映射中设置"dynamic": "false" PUT /test_index { "mappings": { "test_type": { "dynamic": "false" } } } 欲了解更多信息: https://www.elastic.co/guide/en/elasticsearch/guide/1.x/dynamic-mapping.html

示例:

  1. 运行映射 PUT /my_index { "mappings": { "testing": { "dynamic": "false", "properties": { "field1": { "type": "string", "index": "analyzed" } } } } }

  2. testing类型索引文档 POST /my_index/testing/1 { "field1":"demo", "field99":"anotherDemo" }

  3. GET /my_index/testing/_mapping的回复 { "my_index": { "mappings": { "testing": { "dynamic": "false", "properties": { "field1": { "type": "string" } } } } } }

  4. 正如您将看到field99没有映射。