我对ES文档感到困惑,事实上here他们声明索引必须放在映射目录(和indexname sub dirs)中:
可以在名为[mapping_name] .json的文件中定义映射 放置在config / mappings / _default位置下,或者位于 config / mappings / [index_name](用于应关联的映射) 只有特定的索引)。
但是在“配置”部分的here,它说明了:
索引模板也可以放在配置位置 (path.conf)在templates目录下(注意,请务必放置 它们在所有符合条件的主节点上)。例如,一个名为的文件 template_1.json可以放在config / templates下,它将是 如果它与索引匹配则添加。
我将我的映射放在/config/mappings/myindexname/mappinfile.json
中,就像:
{
"template": "maincontentindex",
"settings": {
"index": {
"analysis": {
"analyzer": {
"htmlStrippingAnalyzer": {
"tokenizer": "standard",
"filter": ["standard", "lowercase"],
"char_filter": "html_strip"
}
}
}
}
},
"mappings": {
"rendition": {
"_timestamp": {
"enabled": true,
"store" : true
},
"properties": {
"key": {
"type": "string",
"store": "yes",
"analyzer": "keyword"
},
"parentPage": {
"type": "string",
"store": "yes",
"analyzer": "keyword"
},
"type": {
"type": "string",
"store": "yes",
"analyzer": "keyword"
},
"language": {
"type": "string",
"store": "yes",
"analyzer": "keyword"
},
"device": {
"type": "string",
"store": "yes",
"analyzer": "keyword"
},
"territory": {
"type": "string",
"store": "yes",
"analyzer": "keyword"
},
"channel": {
"type": "string",
"store": "yes",
"analyzer": "keyword"
},
"template": {
"type": "string",
"store": "yes",
"analyzer": "keyword"
},
"meta": {
"properties": {
"content": {
"type": "string",
"store": "yes"
}
}
}
}
}
}
}
如果我使用REST Api将它放在服务器中它工作正常,如果我调用/ maincontentindex / rendition / _mapping我只是得到上面的结构(即使没有数据)。
但是对于目录我只得到404,如果我插入任何东西,那就是通常的动态映射。
答案 0 :(得分:31)
映射和模板之间存在差异。
Mappings包含您的字段以及您希望如何在elasticsearch中索引/存储它们。它们引用特定的索引和类型(或使用_default_
特殊类型时在同一索引中的多个类型)。您可以在通过create index api创建索引时提交映射,也可以通过put mapping api来修改现有索引的映射。
Index templates是一种自动将映射和索引设置应用于将来要创建的索引的方法,这些索引的名称与指定的模式匹配。假设映射是索引模板的一部分。索引模板也可以包含多种类型和索引设置的映射。
如果您有索引模板,可以将其放在templates
下,如参考文献中所述。如果您有类型的映射,则需要将其放在mappings
目录下。
您粘贴到问题中的json是一个索引模板,需要放在templates
文件夹下,而不是mappings
下。您所描述的使用get mapping api返回的内容不是您所说的模板本身,而是您在url中指定的索引/类型的当前映射(仅限模板的映射部分)。
另外,我建议你使用elasticsearch提供的REST API。在文件系统上使用文件看起来并不像弹性搜索方式。