web-dev-qa-db-ja.com

Elasticsearchのマッピングファイルはどこに配置しますか?

私はESのドキュメントに混乱しています。実際 here は、インデックスがマッピングディレクトリ(およびindexnameサブディレクトリ)に移動する必要があると述べています。

マッピングは、[mapping_name] .jsonというファイル内で定義でき、config/mappings/_defaultの場所またはconfig/mappings/[index_name]の下に配置できます(特定のインデックスにのみ関連付ける必要があるマッピングの場合)。

しかし here の「config」セクションには、次のように記載されています。

インデックステンプレートは、テンプレートディレクトリの下の構成場所(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が取得されます。何かを挿入すると、通常の動的マッピングになります。

22
gotch4

マッピングとテンプレートには違いがあります。

Mappings フィールドと、elasticsearchでフィールドをインデックス化/格納する方法を含めます。特定のインデックスとタイプ(または_default_特殊タイプを使用する場合は同じインデックス内の複数のタイプ)を参照します。 create index api を使用してインデックスを作成するとき、または put mapping api を使用してマッピングを送信し、既存のインデックスのマッピングを変更できます。

インデックステンプレート は、マッピングおよびインデックス設定を、将来作成されるインデックスに自動的に適用する方法であり、その名前は指定されたパターンに一致します。マッピングがインデックステンプレートの一部であるとしましょう。インデックステンプレートには、複数のタイプのマッピングとインデックス設定も含めることができます。

インデックステンプレートがある場合は、リファレンスに記載されているように、templatesの下に配置できます。タイプのマッピングがある場合は、それをmappingsディレクトリの下に置く必要があります。

質問に貼り付けたjsonはインデックステンプレートであり、templatesフォルダーではなくmappingsフォルダーの下に配置する必要があります。説明したようにget mapping apiを使用して取得できるのは、あなたが言ったテンプレート自体ではなく、URLで指定したインデックス/タイプの現在のマッピングです(テンプレートのマッピング部分のみ)。

また、elasticsearchが提供するREST apiを使用することをお勧めします。ファイルシステムでファイルを使用することは、実際のelasticsearchの方法のようには見えません。

32
javanna