如何在弹性搜索中选择对象类型?

时间:2015-01-04 01:55:58

标签: elasticsearch

我们正在考虑使用弹性搜索。但我们无法决定是否应该使用嵌套对象或普通对象。有什么优点和缺点?

我们有高度架构更改的数据源。(每小时)

1 个答案:

答案 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且姓氏为红色的人,则需要嵌套名称。

关于你关于快速更改架构的评论的最后一句话。这是一个不同的问题。无论你选择什么结构。根据架构的变化,可能意味着您必须重新索引所有内容。

希望有所帮助