我在哪里放置Elasticsearch的映射文件?

时间:2013-09-17 16:41:32

标签: json elasticsearch

我对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,如果我插入任何东西,那就是通常的动态映射。

1 个答案:

答案 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。在文件系统上使用文件看起来并不像弹性搜索方式。