我有學生模型和班級模型,它們有多對多的關系。
(一個學生可以注冊多個班級,一個班級可以包含多個學生)
我有 Enrollment 表作為連接表。
(您可以在以下網站獲取圖片)
https://fmhelp.filemaker.com/help/18/fmp/en/index.html#page/FMP_Help/many-to-many-relationships.html
■ Student table
attributes:
?name
?age
■ Class table
attributes:
?className
?desrciption
■ Enrollment table
attributes:
?studentId
?classId
我認為這是典型的多對多關系,我正在使用 MySQL 和 Rails。
我想知道我是否可以在 Elasticsearch 上實作這種關系。我讀過一些文章說 Elasticsearch 不支持它,但是有沒有任何技巧或最佳實踐呢?
uj5u.com熱心網友回復:
您的用例更適合關系資料庫。
在彈性搜索中分別存盤和查詢資料,在API(業務端)中加入資料。
Elasticsearch 沒有連接的概念。它基于非規范化的概念。非規范化用于以添加冗余資料為代價來提高查詢的回應時間。來自不同表的資料可以組合并存盤在一個地方,避免了連接的需要,從而以存盤(資料的重復性)為代價更快地檢索。
您的檔案相當于表格中的行可以建模如下
{
studentName:"",
"age":"",
....
classes:[
{
className:"class1",
...
},
{
className:"class2",
...
}
]
}
對于每個學生,存盤與他/她相關的所有課程。這將導致學生之間的班級資料重復。這將導致更快的搜索但更慢的更新,因為課堂資料的任何變化都需要在學生之間進行更新。
您還可以以其他方式對資料進行建模,將班級作為父級,并將其下的學生陣列。根據您的用例進行選擇。
對于您的子模型,您可以使用不同的資料型別。
- 物件——資料被展平。
- 模型屬性之間保持嵌套關系。
- 子/父子模型變成不同的檔案。當子模型資料頻繁變化時使用。它不會對父檔案進行重新索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/513925.html
上一篇:根據最大值或最小值折疊結果
