ドキュメントごとに異なる属性を保存してクエリしたい。このようなもの:
JSON:
{
name: "doc1",
metadata: [
{ color: "red" },
{ data: [ "value1", "value2", "value3" ] },
{ size: 500 },
{ avail: true },
]
},
...
{
name: "doc4980",
metadata: [
{ otherValues: [ 55, 33 ] },
{ important: true },
]
}
キーと値は、新しい属性が必要になるたびにユーザーによって定義されるため、多くのドキュメントでは異なります。
次の構造 (2 番目のオブジェクトのみの例) は、これを elasticsearch に格納するのに最適ですか? (属性名の代わりに、属性を追加したユーザーなどの詳細を参照できるmongodb IDを使用したい)
"_source" : {
"name": "doc4980",
"metadata":[
{
k: "51d69d8f0c62690000000011",
v: [ 55, 33 ]
},
{
k: "51d69d8f0c62690000000016",
v: true
}
]
}
クロス オブジェクトの一致を避けるために、次のマッピングを使用します。
{
"my_type" : {
"properties" : {
"metadata" : {
"type" : "nested"
},
}
}
}