es的对象类型nested和object区别

文章讨论了在Elasticsearch中处理多层级对象时,使用nested类型而非object类型的查询差异。当查询数学分数为90的学生时,object类型会导致张三被重复返回,而nested类型能准确匹配到张三这一条记录,确保查询结果的精确性。
摘要由CSDN通过智能技术生成

有个多层级对象需要储存到es

[{name:"张三",subject:[{name:"english",score:50},{name:"math",score:90}]},
{name:"李四",subject:[{name:"english",score:90},{name:"math",score:50}]}]

使用object实际储存结果

{name:"张三",
subject.name:"english",
subject.score:50,
subject.name:"math",
subject.score:90
}

使用nested实际储存结果

{name:"张三",subject:[{subject_name:"english",score:50},{subject_name:"math",score:90}]}

需要查询数学90分的学生
使用object的查询
会查出来两条数据,但实际需求应该只有张三。
但是使用nested就可以实现,查询方法为

GET /order/search
{
	"query": {
		"bool": {
			"must": {
				"nested": {
					"path": "subject",
					"query": {
						"bool": {
							"must": [{
								"term": {
									"subject.subject_name": "math"
								}

							}, {
								"term": {
									"subject.score": 90
								}

							}]
						}
					}
				}
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值