结合嵌套查询与过滤
问题描述:
我使用ES 2.1,并具有以下映射:结合嵌套查询与过滤
"startDate": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss:SSS||yyyy-MM-dd HH:mm:ss",
"index": "not_analyzed",
"store": true
},"identities": {
"type": "nested",
"properties": {
"identityatt": { "type": "integer", "index": "not_analyzed", "store": true },
"identitykey": { "type": "string", "index": "not_analyzed", "store": true },
"identityval": { "type": "string", "index": "not_analyzed", "store": true },
"identitytype": { "type": "integer", "index": "not_analyzed", "store": true }
}
}
下列查询是个好人,他们回到我所期望的:
{ "size": 50,
"query": {
"filtered": {
"filter": {
"range": {
"startDate": {
"from": "2016-02-19 11:11:25",
"to": "2016-02-27 11:11:25",
"include_lower": true,
"include_upper": true
}
}}}}}
这一个过滤器通过一个时间范围,并与下一个我想检索所有具有特殊的身份类型
{
"size": 50,
"query": {
"nested": {
"path": "identities",
"filter": {
"term": {
"identities.identitytype": "2"
}
}}}}
但我似乎没有ge将这两者结合起来进行查询。
我试着将时间范围查询添加到嵌套过滤器中的过滤器,将两个过滤器都嵌套在一个bool过滤器中,我也试着用filtered
查询,但没有把这两个过程结合起来。
查看https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html的示例,它也包含一个范围查询,不同之处在于它位于嵌套对象内,而我的startDate
未包含在嵌套对象中。
有关如何组合这些查询的任何想法?
编辑
我也试了一下在此建议:Combined non-Nested and Nested Query in Elasticsearch并且得到错误"No query registered for [filter]"
{
"size": 50,
"query": {
"bool": {
"must": [
{"filter": {
"range": {
"startDate": {
"from": "2016-02-19 11:11:25",
"to": "2016-02-27 11:11:25",
"include_lower": true,
"include_upper": true
}
}
}},
{"nested": {
"path": "identities",
"filter": { "bool": { "must": [{
"term": {
"identities.identitytype": "2"
},
"range": {
"startDate": {
"from": "2016-02-19 11:11:25",
"to": "2016-02-27 11:11:25",
"include_lower": true,
"include_upper": true
}
}}]}
}
}
}
]
}}}
答
下面的查询应该工作。您不能在nested
之内嵌套range
查询,您需要将其保留在bool/must
之外的同一级别。
{
"size": 50,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"range": {
"startDate": {
"from": "2016-02-19 11:11:25",
"to": "2016-02-27 11:11:25",
"include_lower": true,
"include_upper": true
}
}
},
{
"nested": {
"path": "identities",
"filter": {
"term": {
"identities.identitytype": "2"
}
}
}
}
]
}
}
}
}
}