哪种模型更适合弹性搜索索引?

时间:2016-02-26 17:04:02

标签: arrays json indexing elasticsearch model

我有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的记录。

所以,我想要你的所有建议,哪个模型更适合弹性搜索。感谢...

2 个答案:

答案 0 :(得分:1)

弹性搜索内部没有区别,因为他使用Apache lucene将字段保存为key = value。例如,你第一个例子我将保存为child.id = 3,child.mama = tiga。

但是在第一种情况下,一个好的观点是,子对象将被编入索引为Nested Object,它有很多可能性,如过滤器,查询和其他类型的东西。 看看嵌套对象,我认为这将澄清您的需求。

注意:尽可能使用聚合数据,elasticsearch是面向NoSql文档的。

答案 1 :(得分:0)

强烈建议你的第二个模特。 noSQL数据库的一个关键原则是您复制数据以便于查询。

在ES中使用嵌套或父/子是可行的,但它会使您的所有查询更加复杂。我们发现扁平化所有内容更容易使用,并且使我们能够更有效地使用Kibana。