什么是nested结构, 简单可以理解为是嵌套数据类型… 嵌套类型需要实现定义好mapping.
需要注意的是,默认的嵌套形式的kv并不是nested类型的,要提前定义mapping .
文章有些地方写的不严谨,后期会更新, 请查看原文链接 http://xiaorui.cc/?p=2376
下面是一个nested的数据样例, 我们首先手动指定mappings nested
PUT /xiaorui.cc { "mappings": { "my_type": { "properties": { "user": { "type": "nested" } } } } }
然后我们开始扔数据
PUT xiaorui.cc/blog/1 { "group" : "fans", "user" : [ { "first" : "fengyun", "last" : "rui" }, { "first" : "dehua", "last" : "liu" }, { "first" : "fengyun", "last" : "liu" } ] }
然后进行查询,我们先用传统的方式查询. 我们查询的目的是匹配liufengyun,但是他的返回结果肯定不是我们所需要的.
GET xiaorui.cc/blog/_search { "query": { "bool": { "must": [ { "match": { "user.first": "fengyun" }}, { "match": { "user.last": "liu" }} ] } } }
那对于nested该如何查询数据,需要在query filter里,指定path。
GET xiaorui.cc/blog/_search { "query": { "nested": { "path": "user", "query": { "bool": { "must": [ { "match": { "user.first": "fengyun" }}, { "match": { "user.last": "liu" }} ] } } } } }
注意其中几个参数:
1 path 定义了嵌套的对象,可以是列表
2 score_mode 定义里嵌套对象计算的分数与当前查询分数的处理方式,有avg,sum,max,min以及none。none就是不做任何处理,其他的看字面意思就好理解。
3 query/filter是查询的方式,内部定义了针对嵌套对象的查询,注意内部的查询一定要是用全路径, 比如 user.first user.last .
对于elasticsearch nested就说这么多了….
使用kibana绘制图表的时候,kibana支持nested的类型吗?