当我尝试在ElasticSearch设置中禁用动态映射时,我遇到了错误。我正在使用ElasticSearch 1.7版本来实现。
StackTrace:
/
设置摘要:
/page/1
我发现ES端点上的设置中禁用了动态映射,但作业失败。我有一个avro json映射文件和es json映射文件,其中avro json映射文件是超集,而es json映射文件是子集。我不希望超集映射文件中的所有字段都反映在ES索引上,而只反映在子集映射文件中的转储字段。我做错了还是有其他方法可以做到。
感谢。
答案 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
示例:
运行映射
PUT /my_index
{
"mappings": {
"testing": {
"dynamic": "false",
"properties": {
"field1": {
"type": "string",
"index": "analyzed"
}
}
}
}
}
以testing
类型索引文档
POST /my_index/testing/1
{
"field1":"demo",
"field99":"anotherDemo"
}
GET /my_index/testing/_mapping
的回复
{
"my_index": {
"mappings": {
"testing": {
"dynamic": "false",
"properties": {
"field1": {
"type": "string"
}
}
}
}
}
}
正如您将看到field99没有映射。