次のように見えるElasticsearch(v2.3.1)マッピングにネストされたドキュメントのインデックスを作成しようとしています (ドキュメントのこの例に基づいて) :
PUT /my_index
{
"mappings": {
"blogpost": {
"properties": {
"title": { "type": "string" },
"comments": {
"type": "nested",
"properties": {
"name": { "type": "string" },
"comment": { "type": "string" }
}
}
}
}
}
}
ただし、そのマッピングに適合するためにJSONドキュメントがどのように見える必要があるのか理解できません。私が試した
PUT /my_index/some_type/1
{
"title": "some_title",
"comments": {
"name": "some_name",
"comment": "some_comment"
}
}
と同様に
PUT /my_index_some_type/1
{
"title": "some_title",
"comments": [
{
"name": "some_name",
"comment": "some_comment"
}
]
}
どちらも結果として
{
"error":
{
"root_cause":
[
{
"type": "remote_transport_exception",
"reason": "[Caiman][172.18.0.4:9300][indices:data/write/index[p]]"
}
],
"type": "illegal_argument_exception",
"reason": "object mapping [comments] can't be changed from nested to non-nested"
},
"status": 400
}
ネストされたドキュメントにインデックスを付ける正しい形式はどれですか?作業例は大歓迎です。ここのSOまたは他のページにあるほとんどの例は、ドキュメントが以前にインデックス付けされた方法ではなく、ネストされたクエリに集中しています。
タイプsome_type
のドキュメントを実際に作成しているようで、comments
は通常のobject
にデフォルト設定されます(つまり、nested
ではありません)。同じインデックスのcomments
マッピングタイプのblogpost
というネストされたオブジェクト。
代わりにこれを試してください、それは動作するはずです:
PUT /my_index/blogpost/1
{
"title": "some_title",
"comments": {
"name": "some_name",
"comment": "some_comment"
}
}