2

オブジェクトのマッピングがあるとします。マッピングは次のとおりです。

{"my_type":
    {"properties":
        {"name":{"type":"string","store":"yes","index":"not_analyzed"},
         "more":{"type":"object",
                 "properties":{"a_known_number":{"type":"long","index":"yes"},
                               "some_json_object":{"type":"object"}
                              }
                }
        }
    }
}

「some_json_object」が持つサブフィールドはわかりませんが、このオブジェクトのみを保存したいが、サブフィールドのインデックスを作成したくないことは知っています。僕にできる:

    {"my_type":
    {"properties":
        {"name":{"type":"string","store":"yes","index":"not_analyzed"},
         "more":{"type":"object",
                 "properties":{"a_known_number":{"type":"long","index":"yes"},
                               "some_json_object":{"type":"object","store":"yes","index":"no"}
                              }
                }
        }
    }
}

結果のサブフィールドのすべてに影響しますか?

4

1 に答える 1

6

いいえ、「オブジェクト」全体をインデックスなしとして指定することはできません。ただし、これを行うために dynamic_templates ( http://www.elasticsearch.org/guide/reference/mapping/root-object-type/ ) を使用できます。

{
   "my_type":{
      "properties":{
         "name":{
            "type":"string",
            "store":"yes",
            "index":"not_analyzed"
         }
      },
      "dynamic_templates":[
         {
            "stored_json_object_template":{
               "path_match":"some_json_object.*",
               "mapping":{
                  "store":"yes",
                  "index":"no"
               }
            }
         }
      ]
   }
}

これは、「some_json_object」のすべてのプロパティを保存された文字列としてマップするようマッパーに指示します。

更新 すべてのプロパティ タイプに一致させるために、マッピングからタイプを削除しました (match_path => path_match)。

更新 2 その後、インデックスを作成する場合:

{
   "mappings":{
      "my_type":{
         "properties":{
            "name":{
               "type":"string",
               "store":"yes",
               "index":"not_analyzed"
            }
         },
         "dynamic_templates":[
            {
               "stored_json_object_template":{
                  "path_match":"some_json_object.*",
                  "mapping":{
                     "store":"yes",
                     "index":"no"
                  }
               }
            }
         ]
      }
   }
}

そしてオブジェクトにインデックスを付けます:

{
   "Name":"Henrik",
   "some_json_object":{
      "string":"string",
      "long":12345
   }
}

次に、次のマッピングを取得します。

{
   "testindex":{
      "my_type":{
         "dynamic_templates":[
            {
               "stored_json_object_template":{
                  "mapping":{
                     "index":"no",
                     "store":"yes"
                  },
                  "path_match":"some_json_object.*"
               }
            }
         ],
         "properties":{
            "name":{
               "type":"string",
               "index":"not_analyzed",
               "store":true,
               "omit_norms":true,
               "index_options":"docs"
            },
            "some_json_object":{
               "properties":{
                  "long":{
                     "type":"long",
                     "index":"no",
                     "store":true
                  },
                  "string":{
                     "type":"string",
                     "index":"no",
                     "store":true
                  }
               }
            }
         }
      }
   }
}
于 2013-06-11T13:37:59.197 に答える