Elasticsearch的nested过滤

栏目: 后端 · 发布时间: 7年前

内容简介:记录一个对nested嵌套文档的过滤问题,这两天一不小心踩了个小坑。我有一个nested字段是这样定义的:需求:符合条件的父文档必须包含至少一个满足下面条件的main_category子文档:

记录一个对nested嵌套文档的过滤问题,这两天一不小心踩了个小坑。

我有一个nested字段是这样定义的:

'main_category' => [
    'type' => 'nested',
    'dynamic' => false,
    'properties' => [
        'id' => [ // 分类ID
            'type' => 'long',
        ],
        'level' => [    // 层级
            'type' => 'integer',
        ],
        'parent_id' => [ // 父分类
            'type' => 'long',
        ],
        'title' => [ // 标题
            'type' => 'keyword',
        ],
        'nicktitle' => [    // 别名
            'type' => 'keyword',
        ],
    ],
],

需求:符合条件的父文档必须包含至少一个满足下面条件的main_category子文档:

  • level=1
  • id=10

因为查询还包含对父文档的一些过滤条件,所以我当时的查询就写成了这样:

{
	"query": {
		"bool": {
			"filter": [{
				"nested": {
					"path": "main_category",
					"query": {
						"term": {
							"main_category.id": 10
						}
					}
				}
			}, {
				"nested": {
					"path": "main_category",
					"query": {
						"term": {
							"main_category.level": 1
						}
					}
				}
			}]
		}
	}
}

这个查询的意思是,有任意一个main_category满足id=10,有另外任意一个main_category满足level=1即可,即满足2个条件的子文档不必是同一个,所以得到的结果是错误的。

正确的做法应该是先通过nested关键字进入到子文档的上下文中,然后过滤同时满足2个条件的子文档:

{
	"query": {
		"bool": {
			"filter": [{
				"nested": {
					"path": "main_category",
					"query": {
						"bool": {
							"filter": [{
								"term": {
									"main_category.id": 10
								}
							}, {
								"term": {
									"main_category.level": 1
								}
							}]
						}
					}
				}
			}]
		}
	}
}

经过nested进入子文档上下文,然后执行普通的bool过滤即可filter得到同时满足2个条件的子文档,那么对应的父文档也就满足了条件。

本篇博客完~


以上所述就是小编给大家介绍的《Elasticsearch的nested过滤》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

技术之瞳——阿里巴巴技术笔试心得

技术之瞳——阿里巴巴技术笔试心得

阿里巴巴集团校园招聘笔试项目组 / 电子工业出版社 / 2016-11 / 69

《技术之瞳——阿里巴巴技术笔试心得》由阿里巴巴集团校园招聘笔试项目组所著,收集了阿里历年校招中的精华笔试题,涉 及多个领域。《技术之瞳——阿里巴巴技术笔试心得》中内容大量结合了阿里巴巴的实际工作场景,以例题、解析、习题的形式,引 导读者深入理解技术上的关键点、紧要处,夯实基础,启发思考。《技术之瞳——阿里巴巴技术笔试心得》内容不仅专业、有趣,更 是将理论知识与实践应用结合起来,以场景化的问答娓娓道......一起来看看 《技术之瞳——阿里巴巴技术笔试心得》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具