elastic search中父子關係文件

2021-09-25 16:44:36 字數 2137 閱讀 7850

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 軟體版本...