1、為什麼要有父子文件?
(1)、nested object的資料建模,是採取類似冗餘資料的方式,將多個資料都放在一起,維護成本就比較高;
(2)、parent-child資料建模,採取的是類似於關係型資料庫的三正規化,多個實體都分割開來,每個實體之間都通過一些關聯方式,進行了父子關係的關聯,各種資料不需要都放在一起,父doc和子doc分別在進行更新的時候,都不會影響對方;
為什麼父子文件效能好?雖然資料實體之間分割開來,但是我們在搜尋的時候,由es自動為我們處理底層的關聯關係,並且通過一些手段保證搜尋效能。
2、父子文件核心:父子關係元資料對映,用於確保查詢時候的高效能,但是有乙個限制:父子資料必須存在於乙個shard中;(多個type之間有父子關係,用_parent指定父type);
父子關係資料存在乙個shard中,而且對映其關聯關係的元資料,因此在搜尋父子關係資料的時候,不用跨分片。
3、例項:乙個it公司有多個研發中心,每個研發中心有多個員工
put /company
, "employee": }}}
在員工employee中定義乙個_parent,型別為部門rd_center
在員工employee中定義乙個_parent,型別為部門rd_center
(2)、填充部門資料
post /company/rd_center/_bulk}}
}
(3)、填充員工employee資料:
put /company/employee/1?parent=1
parent=1指定了父文件的id,在填充employee資料的時候,shard路由並不是由employee的id=1指定的,而是由rd_center doc的id=1指定,這樣才能保證父文件和子文件在乙個shard上;
填充employee資料
post /company/employee/_bulk}}
}
4、父子文件搜尋
需求1:搜尋有2023年以後出生的員工的研發中心
get /company/rd_center/_search}}
}}}
需求2:搜尋有名叫張三的員工的研發中心
get /company/rd_center/_search}}
}}
需求3:搜尋有至少2個以上員工的研發中心
get /company/rd_center/_search}}
}}
需求4:搜尋在中國的研發中心的員工
get /company/employee/_search }}
}}
需求5:統計每個國家的喜歡每種愛好的員工有多少個
get /company/rd_center/_search
, "aggs": ,
"aggs": }}
}}
}}}
5、祖孫三層的文件模型
國家-部門-員工
put /company
, "rd_center":
},"employee": }}}
country-rd_center-employee
(2)、填充資料
post /company/country/_bulk}}
post /company/rd_center/_bulk}}
}put /company/employee/1?parent=1&routing=1
country用自己的id去路由;rd_center用country的id去路由;employee,如果也是僅僅指定乙個parent,那麼用的是rd_center的id去路由,這就導致祖孫三層資料不會在乙個shard上;因此孫子輩的文件要手動指定routing,指定為爺爺輩的資料的id
需求1:搜尋有爬山愛好的員工所在的國家
get /company/country/_search}}
}}
}}
elasticsearch中rollover的用法
滾動索引一般可以與索引模板結合使用,實現按一定條件自動建立索引。設定rollover之後,滿足條件後,會自動新建索引,將索引別名轉向新索引。當現有的索引太久或者太大時,往往使用rollover index建立新索引。新建索引模板,模板內容如下 put template mytemplate type...
elasticsearch中的mapping簡介
elasticsearch 以下簡稱es 是沒有模式 schema 的,當我們執行以下命令 filter的功能很容易理解 乙個filter就是乙個轉換資料的方法,輸入乙個字串,這個方法返回另乙個字串,比如乙個將字串轉為小寫的方法就是乙個filter很好的例子。乙個analyzer由一組順序排列的fi...
Elasticsearch中Head外掛程式的使用
在學習elasticsearch的過程中,必不可少需要通過一些工具檢視es的執行狀態以及資料。如果都是通過rest請求,未免太過麻煩,而且也不夠人性化。此時,head可以完美的幫助你快速學習和使用elasticsearch。elasticsearch集群搭建請參考前一篇文章 系統節點名ip 軟體版本...