13

次のようなオブジェクトの動的マッピングを作成しようとしています:

  {
    "product": {
        "productId": 99999,
        "manufacturerId": "A0001",
        "manufacturerCode": "A101LI",
        "name": "Test Product",
        "description": "Describe the product here.",
        "feature_details":{
            "category": "Category1",
            "brand": "Brand Name"
        },
        "feature_tpcerts":{
            "certifiedPass": true,
            "levelCertified": 2
        },
        "feature_characteristics":{
            "amount": 0.73,
            "location": 49464
        }
    }
}

プロパティをネストされたタイプにしたいとfeature_*思います。これは、下のマッピングでnested_featureテンプレートを使用して定義したもので、期待どおりに機能しています。ただし、プロパティのネストされたオブジェクト内の各プロパティを、追加のプロパティが定義された状態feature_*にすることも必要です。2 番目の nested_template テンプレートを試しましたが、成功しませんでした。multi_valuefacet

 {
    "product" : {
        "_timestamp" : {"enabled" : true, "store": "yes" },
        "dynamic_templates": [
            {
              "nested_feature": {
                "match" : "feature_*",
                "mapping" : {
                  "type" : "nested",
                  "stored": "true"
                }
              }
            },
            {
                "nested_template": {
                    "match": "feature_*.*",
                    "mapping": {
                        "type": "multi_field",
                        "fields": {
                            "{name}": {
                                "type": "{dynamic_type}",
                                "index": "analyzed"
                            },
                            "facet": {
                                "type": "{dynamic_type}",
                                "index": "not_analyzed"
                            }
                        }
                    }
                }
            }           
        ],
        "properties" : {
            "productId" : { "type" : "integer", "store" : "yes"},
            "manufacturerId" : { "type" : "string", "store" : "yes", "index" : "analyzed"},
            "manufacturer" : { "type" : "string", "store" : "yes", "index" : "not_analyzed"},
            "manufacturerCode" : { "type" : "string", "store" : "yes"},
            "name" : {"type" : "string", "store" : "yes"},
            "description": {"type": "string", "index" : "analyzed"}
        }
    }
}

残念ながら、プロパティ内のfeature_*プロパティは別のプロセスから作成され、ほとんどすべての名前と値のペアになる可能性があります。動的テンプレートを使用してプロパティをネストされたものとしてセットアップし、ネストされたオブジェクト内の各プロパティをmulti_field追加のプロパティで作成する方法に関する提案はありfacetますか?

4

1 に答える 1

29

path_matchパターンがフィールド パス全体を参照する場合は代わりに使用する必要がありmatchます。それ以外の場合は、その名前 (最後の部分) のみが考慮されます。ルート オブジェクトのリファレンス ページを参照してください。このページには、動的テンプレートに関連するドキュメントも含まれています。

たとえば、数値フィールドやブール値フィールドにmatch_mapping_typeは設定できないため、使用することもできます。"index":"analyzed"その場合、フィールドのタイプに応じてさまざまなことをしたいかもしれません。

あなたのドキュメントには、実際には必要のない製品ルート オブジェクトが含まれていることに気付きました。タイプ名はすでに製品であるため、削除します。

また、実際に必要でない限り、フィールドを明示的に保存することは避けます。elasticsearch では、デフォルトで_sourceフィールドが保存されているため、常に必要になります。

あなたのケースでは、次のマッピングが機能するはずです (ドキュメントに製品ルート オブジェクトが含まれていない場合)。

{
      "product" : {
          "dynamic_templates": [
              {
                "nested_feature": {
                  "match" : "feature_*",
                  "mapping" : {
                    "type" : "nested"
                  }
                }
              },
              {
                  "nested_template": {
                      "path_match": "feature_*.*",
                      "match_mapping_type" : "string",
                      "mapping": {
                          "type": "multi_field",
                          "fields": {
                              "{name}": {
                                  "type": "{dynamic_type}",
                                  "index": "analyzed"
                              },
                              "facet": {
                                  "type": "{dynamic_type}",
                                  "index": "not_analyzed"
                              }
                          }
                      }
                  }
              }                
          ]
      }
  }
于 2013-10-11T09:29:20.817 に答える