我们正在考虑使用弹性搜索。但我们无法决定是否应该使用嵌套对象或普通对象。有什么优点和缺点?
我们有高度架构更改的数据源。(每小时)
答案 0 :(得分:1)
普通对象和嵌套对象之间最大的区别之一是普通对象被展平。如果在内部对象中使用数组,则无法区分对象的单独属性。举个例子,假设你有一个有球员的球队:
{
"team": {
"name":"the best",
"players": [
{
"firstname":"Ron",
"lastname":"Red"
},
{
"firstname":"Bea",
"lastname":"Blue"
}
]
}
}
这将被编入索引:
team.name=the best
team.players.firstname=[ron,bea]
team.players.lastname=[red,blue]
使用嵌套对象可以解决此问题,但是您必须开始使用嵌套查询和聚合。因此,如果您要查询名字为Ron且姓氏为红色的人,则需要嵌套名称。
关于你关于快速更改架构的评论的最后一句话。这是一个不同的问题。无论你选择什么结构。根据架构的变化,可能意味着您必须重新索引所有内容。
希望有所帮助