一尘不染

如何将Elasticsearch的映射文件放在哪里?

elasticsearch

我对ES文档感到困惑,实际上它们在这里指出索引必须位于映射目录(和indexname子目录)中:

可以在名为[mapping_name] .json的文件中定义映射,并将其放置在config / mappings /
_default位置下或config / mappings / [index_name]下(对于仅应与特定索引关联的映射)。

但后来这里的“配置”一节中,它指出:

索引模板也可以放置在模板目录下的配置位置(path.conf)中(请注意,请确保将其放置在所有符合条件的主节点上)。例如,可以将一个名为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,如果我插入任何东西,那只是通常的动态映射。


阅读 618

收藏
2020-06-22

共1个答案

一尘不染

映射和模板之间有区别。

映射包含您的字段以及您如何在elasticsearch中索引/存储它们。它们引用特定的索引和类型(或使用_default_特殊类型时,在同一索引中有多个类型)。您可以在创建索引时通过create
index api
或通过put映射api提交映射,以修改现有索引的映射。

索引模板是一种将映射和索引设置自动应用于将来将要创建的,名称与指定模式匹配的索引的方法。假设映射是索引模板的一部分。索引模板也可以包含多种类型和索引设置的映射。

如果您有索引模板,则可以将其放在templates参考资料中提到的下方。如果您有类型的映射,则需要将其放在mappings目录下。

您粘贴到问题中的json是一个索引模板,它需要放在该templates文件夹下,而不是该文件夹下mappings。所描述的使用get mapping
api返回的内容不是您所说的模板本身,而是您在url中指定的索引/类型的当前映射(仅模板的映射部分)。

另外,我建议您使用elasticsearch提供的REST API。在文件系统上使用文件实际上看起来并不像Elasticsearch的处理方式。

2020-06-22