请教下,sr on es,像这种嵌套的mapping,怎么取到最里层的值。如何建表合适。我搜的样例,都不带多级mapping的 { ""mappings"": { ""_doc"": { ""properties"": { ""created_at"": { ""type"": ""long"" }, ""resource"": { ""properties"": { ""cats"": { ""properties"": { ""name"": { ""type"": ""keyword"" }, ""sub_cats"": { ""properties"": { ""name"": { ""type"": ""keyword"" }, ""sub_cats"": { ""properties"": { ""name"": { ""type"": ""keyword"" } } } } } } }, ""ids"": { ""type"": ""keyword"" }, ""tags"": { ""type"": ""keyword"" } } } ""updated_at"": { ""type"": ""long"" } } } } }
在 Elasticsearch 中,如果使用嵌套映射,可以按以下步骤获取最里层的值:
使用 .(句点)符号连接嵌套字段的名称,以获取其路径。例如,以下路径获取 address.street 字段的值:
address.street
脚本:
使用脚本可以动态访问嵌套字段。以下脚本获取 address.street 字段的值:
doc['address.street'].value
嵌套查询:
嵌套查询允许您查询嵌套字段。以下嵌套查询获取 address.street 字段的值:
{
"query": {
"nested": {
"path": "address",
"query": {
"match": {
"address.street": "Main Street"
}
}
}
}
}
对于聚合查询,可以使用聚合函数来提取嵌套字段的值。例如,以下查询使用 max 聚合函数获取 address.street 字段的最大值:
{
"aggs": {
"max_street": {
"max": {
"field": "address.street"
}
}
}
}
示例:
假设您有以下 JSON 文档:
{
"name": "John Doe",
"address": {
"street": "Main Street",
"city": "Anytown"
}
}
要获取 address.street 字段的值,可以使用以下查询:
脚本:
{
"script": {
"source": "doc['address.street'].value"
}
}
嵌套查询:
{
"query": {
"nested": {
"path": "address",
"query": {
"match": {
"address.street": "Main Street"
}
}
}
}
}
聚合函数:
{
"aggs": {
"max_street": {
"max": {
"field": "address.street"
}
}
}
}
这三个查询都将返回以下结果:
"Main Street"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云EMR是云原生开源大数据平台,为客户提供简单易集成的Hadoop、Hive、Spark、Flink、Presto、ClickHouse、StarRocks、Delta、Hudi等开源大数据计算和存储引擎,计算资源可以根据业务的需要调整。EMR可以部署在阿里云公有云的ECS和ACK平台。