我有2个JSON模型,可以表示弹性搜索索引的模型。第一:
{
"id" : 1,
"nama" : "satu",
"child" : {
"id" : 2,
"nama" : "dua",
"child" : [
{
"id" : 3
"nama" : "tiga"
},
{
"id" : 4,
"nama" : "empat"
}
}
}
}
第二名:
[{
"parent1id" : 1,
"parent1nama" : "satu",
"parent2id" : 2,
"parent2nama" : "dua",
"id" : 3,
"nama" : "tiga"
},
{
"parent1id" : 1,
"parent1nama" : "satu",
"parent2id" : 2,
"parent2nama" : "dua",
"id" : 4,
"nama" : "empat"
}]
实际上,第一个和第二个具有相同的含义并为弹性搜索索引创建。我认为第一个模型不那么冗余,第二个模型更冗余。但是第一个,表示为1个弹性记录,但第二个表示为2个弹性记录。当我搜索例如ID = 3时,这件事会产生影响。第一个将返回整个记录,第二个将返回ID = 3的记录。
所以,我想要你的所有建议,哪个模型更适合弹性搜索。感谢...
答案 0 :(得分:1)
弹性搜索内部没有区别,因为他使用Apache lucene将字段保存为key = value。例如,你第一个例子我将保存为child.id = 3,child.mama = tiga。
但是在第一种情况下,一个好的观点是,子对象将被编入索引为Nested Object,它有很多可能性,如过滤器,查询和其他类型的东西。 看看嵌套对象,我认为这将澄清您的需求。
注意:尽可能使用聚合数据,elasticsearch是面向NoSql文档的。
答案 1 :(得分:0)
我强烈建议你的第二个模特。 noSQL数据库的一个关键原则是您复制数据以便于查询。
在ES中使用嵌套或父/子是可行的,但它会使您的所有查询更加复杂。我们发现扁平化所有内容更容易使用,并且使我们能够更有效地使用Kibana。