概述
// 创建嵌套对象mapping
PUT /earth_index
{
"mappings": {
"earthblog": {
"properties": {
"title":{ "type":"string"},
"body":{ "type":"string"},
"comments": {
"type": "nested",
"properties": {
"name": { "type": "string" },
"comment": { "type": "string" },
"age": { "type": "short" },
"stars": { "type": "short" },
"date": { "type": "date" }
}
}
}
}
}
}
// 插入数据
PUT /earth_index/earthblog/1
{
"title": "Nest eggs",
"body": "Making your money work...",
"comments": [
{
"name": "John Smith",
"comment": "Great article",
"age": 28,
"stars": 4,
"date": "2014-09-01"
},
{
"name": "Alice White",
"comment": "More like this please",
"age": 31,
"stars": 5,
"date": "2014-10-22"
}
]
}
// 非嵌套查询(Alice且28岁)
GET /earth_index/earthblog/_search
{
"query": {
"bool": {
"must": [
{ "match": { "comments.name": "Alice" }},
{ "match": { "comments.age": 28 }}
]
}
}
}
// 输出,无结果。
// 嵌套查询(Alice且28岁,或者,Alice且31岁)
GET /earth_index/earthblog/_search
{
"query": {
"nested": {
"path": "comments",
"query": {
"bool": {
"must": [
{
"match": {
"comments.name": "Alice"
}
},
{
"match": {
"comments.age": 28
}
}
]
}
}
}
}
}
// 输出,无结果。
// 嵌套查询(Alice且31岁)
GET /earth_index/earthblog/_search
{
"query": {
"nested": {
"path": "comments",
"query": {
"bool": {
"must": [
{
"match": {
"comments.name": "Alice"
}
},
{
"match": {
"comments.age": 31
}
}
]
}
}
}
}
}
// 输出,有结果,为之前插入的那条数据。
====================================================
// 创建非嵌套对象,字段类型自动映射
PUT /earth_index/earthblog2/1
{
"title": "Nest eggs",
"body": "Making your money work...",
"comments2": [
{
"name": "John Smith",
"comment": "Great article",
"age": 28,
"stars": 4,
"date": "2014-09-01"
},
{
"name": "Alice White",
"comment": "More like this please",
"age": 31,
"stars": 5,
"date": "2014-10-22"
}
]
}
// 非嵌套查询(Alice且28岁)
GET /earth_index/earthblog2/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"comments2.name": "Alice"
}
},
{
"match": {
"comments2.age": 28
}
}
]
}
}
}
// 输出:上面那条数据被当做符合条件的结果。但实际上Alice是31岁。
// 嵌套查询(Alice且31岁)
GET /earth_index/earthblog2/_search
{
"query": {
"nested": {
"path": "comments",
"query": {
"bool": {
"must": [
{
"match": {
"comments.name": "Alice"
}
},
{
"match": {
"comments.age": 31
}
}
]
}
}
}
}
}
// 输出:无结果。
// 查看mapping
GET /earth_index/earthblog/_mapping
{
"earth_index": {
"mappings": {
"earthblog": {
"properties": {
"body": {
"type": "text"
},
"comments": {
"type": "nested",
"properties": {
"age": {
"type": "short"
},
"comment": {
"type": "text"
},
"date": {
"type": "date"
},
"name": {
"type": "text"
},
"stars": {
"type": "short"
}
}
},
"title": {
"type": "text"
}
}
}
}
}
}
GET /earth_index/earthblog2/_mapping
{
"earth_index": {
"mappings": {
"earthblog2": {
"properties": {
"body": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"comments2": {
"properties": {
"age": {
"type": "long"
},
"comment": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"date": {
"type": "date"
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"stars": {
"type": "long"
}
}
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
最后
以上就是儒雅帅哥为你收集整理的elasticsearch 嵌套对象查询的全部内容,希望文章能够帮你解决elasticsearch 嵌套对象查询所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复