背景:
随着es 版本的不断向前演进,在es 6.x 版本中,已经开始有意识地,主动的去弱化 type 这个概念。原因简单来说就是,es 底层存储时,相同 type的数据会存储在一起,但类比到数据库中的表,我们知道,不同数据库的同样名称的表的数据是不存储在一起的;所以type 对于 es 删除来说有害无利。为解决此问题,es 决定在 6.x 版本中 弱化之,在 7.x 版本中 会彻底删除 type。
join 类型 是 es 6.x 版本新产生的一个类型,其产生是为了弥补 type 被弱化,被删除的影响。因为 在 es 5.x 甚至以前,parent-child 数据在 es 中存储 关键就在于 建立 一个索引,不同的 type 去区分父子;当es 6.x 决定放弃 type 时,join 类型 应运而生,它为解决 parent-child 而来。
本文章主要记录一下 个人使用 join 类型处理问题时遇到的不会之处,欢迎大家帮忙更新!
一、使用 logstash 全量更新 mysql 数据 到 es 6.x 的配置文件编写(含parent、child)
参考:https://discuss.elastic.co/t/how-to-create-a-parent-using-the-new-join-type-with-logstash/119523/2
(1)创建含 join 类型数据的索引(使用mapping)
PUT logstash-index-name
{
"mappings": {
"doc": {
"properties": {
"join_field": {
"type": "join",
"relations": {
"customer": "actions"
}
}
}
}
}
}
索引:logstash-index-name,type:doc,parent-child 关系:“customer”: “actions”
(2)父表对应的 logstash 配置增加如下部分:
mutate {
add_field => { "join_field" => "customer" }
}
</