2016-02-26 21 views
0

我有2個JSON模型可以代表elasticsearch索引的模型。第一:哪種模型更適合用於elasticsearch索引?

{ 
"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" 
}] 

其實第一和第二具有相同的含義和elasticsearch索引創建的。我認爲第一種模式不那麼多餘,第二種模式更加多餘。但是第一個彈性記錄表示爲第一彈性記錄,而第二個表示爲第二彈性記錄。這個事情會影響,當我搜索例如ID = 3。第一個,將返回整個記錄,第二個將返回ID = 3的記錄。

所以,我想你的建議所有,該模型對於彈性搜索更好。謝謝...

回答

1

elasticsearch內部沒有區別,因爲他使用Apache lucene將字段保存爲key = value。例如你第一個例子,我將保存爲child.id = 3,child.mama = tiga。

但是,在第一種情況下,子對象的一個​​好處將被編入索引爲Nested Object,它有很多可能性作爲過濾器,查詢和其他類型的東西。 看看嵌套的對象,我認爲這將闡明你的需求。

注意:儘可能使用聚合數據,elasticsearch是面向NoSql文檔的。

0

強烈建議您的第二個模型。 noSQL數據庫的關鍵原則是您複製數據以便查詢。

在ES中使用嵌套或父/子是可行的,但它使所有查詢更復雜。我們發現,扁平化所有東西都容易得多,並且使我們能夠更高效地使用Kibana。