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过滤》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

基于模型的设计

基于模型的设计

2011-8 / 69.00元

《基于模型的设计:MSP430/F28027/F28335DSP篇》的最大特色就是软硬件结合,在使用最新版本Simulink的基础上,结合多型号板卡实现设计开发。书中不仅详细剖析了MSP430/F28027/F28335板卡功能,而且使用Simulink演示了从建模到模型验证、从定点设计到处理器在环、从代码生成到硬件联调等诸多方面,内容充实,确实是一本学习基于模型设计进行DSP开发的较为理想的工程......一起来看看 《基于模型的设计》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

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

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具