什么是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的类型吗?