我有自然适合
等文档的数据{
"name": "Multi G. Enre",
"books": [
{
"name": "Guns and lasers",
"genre": "scifi",
"publisher": "orbit"
},
{
"name": "Dead in the night",
"genre": "thriller",
"publisher": "penguin"
}
]
}
(示例来自嵌套和has_child
文档的a good review
为了在Kibana和其他软件(混合遗留和懒惰)中分析它们,它们被夷为平地:
{
"name": "Multi G. Enre",
"book_name": "Guns and lasers",
"book_genre": "scifi",
"book_publisher": "orbit"
}
{
"name": "Multi G. Enre",
"book_name": "Dead in the night",
"book_genre": "thriller",
"book_publisher": "penguin"
}
除了索引大小的明显增长之外,查询此类扁平记录(查询类型为"writer with scifi books from penguin"
)与嵌套式记录(而不是父级/子级记录)通常会产生性能影响吗?
答案 0 :(得分:3)
查询平面指数将会更好,更好! noSQL数据库背后的整个想法是对数据进行非规范化。
在您的第一个示例中,请注意每次添加图书时都需要更新该记录。这是ES / noSQL中的一个大禁忌。 ES记录应该是不可变的。幕后更新实际上是删除+插入,非常昂贵。