我对ES文档感到困惑,实际上,它们在这里指出索引必须位于映射目录(和indexname子目录)中:
可以在名为[mapping_name] .json的文件中定义映射,并将其放置在config / mappings / _default位置下或config / mappings / [index_name]下(对于仅应与特定索引关联的映射)。
但后来这里的“配置”一节中,它指出:
索引模板也可以放置在模板目录下的配置位置(path.conf)中(请注意,请确保将其放置在所有符合条件的主节点上)。例如,可以将一个名为template_1.json的文件放在config / templates下,如果它与索引匹配,则会添加该文件。
我把映射放进去,/config/mappings/myindexname/mappinfile.json就像:
/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,如果我插入任何东西,那只是通常的动态映射。
映射和模板之间有区别。
映射包含您的字段以及您如何在elasticsearch中索引/存储它们。它们引用特定的索引和类型(或使用_default_特殊类型时,在同一索引中有多个类型)。您可以在创建索引时通过create index api或通过put映射api提交映射,以修改现有索引的映射。
_default_
索引模板是一种将映射和索引设置自动应用于将来将要创建的,名称与指定模式匹配的索引的方法。假设映射是索引模板的一部分。索引模板也可以包含多种类型和索引设置的映射。
如果您有索引模板,则可以将其放在templates参考资料中提到的下方。如果您有类型的映射,则需要将其放在mappings目录下。
templates
mappings
您粘贴到问题中的json是一个索引模板,它需要放在该templates文件夹下,而不是该文件夹下mappings。所描述的使用get mapping api返回的内容不是您所说的模板本身,而是您在url中指定的索引/类型的当前映射(仅模板的映射部分)。
另外,我建议您使用elasticsearch提供的REST API。在文件系统上使用文件实际上看起来并不像Elasticsearch的处理方式。