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

查看所有标签

猜你喜欢:

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

图解互联网金融

图解互联网金融

史册 / 化学工业出版社 / 2015-1-1 / 39.80元

《图解互联网金融》用“漫画+图解”的形式,为普通人讲述最实用的互联网金融知识。 全书从互联网金融的全景、第三方支付、P2P网贷、众筹、互联网销售平台、互联网理财、网络银行、互联网保险八个方面,全面解读了互联网金融的运营模式、发展前景和风险防控等内容。能帮助读者更好地利用互联网金融为自己创造财富。 《图解互联网金融》适合对互联网金融感兴趣的读者阅读。一起来看看 《图解互联网金融》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

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

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具