Запрос вasticsearch с несколькими диапазонами на несколько дат
Последующийrange_query возвращает результат, как и ожидалось:
{"query": {
"bool": {
"must": [
{
"range": {
"created_at": {
"gte": "2013-12-09"
}
}
}
]
}
}
}
Но, вместе с несколькими запросами диапазона, ничего не возвращает:
{"query": {
"bool":{
"must": [
{
"and": [
{
"range": {
"created_at": {
"gte": "2013-12-09"
}
}
},
{
"range": {
"happens_on": {
"lte": "2013-12-16"
}
}
},
{
"range": {
"created_at": {
"lte": "2013-12-14"
}
}
}
]
}
]
}
}
}
Как правильно использовать несколько запросов range_queries для нескольких полей?
РЕДАКТИРОВАТЬ: Ах, хорошо, вот где я использую range_filter, а не range_query? Это звучало многообещающе, поэтому я переписал свой запрос, используя только фильтр с одним диапазоном. Выкладываю все это здесь, на случай, если я испорчу запрос где-нибудь еще. Я выполняю GET, и все внутри исходного ключа на самом деле является JSON, но я удалил экранированные дефисы для удобства чтения:
{
"source": {
"filtered": {
"filter": {
"and": [
{
"term": {
"restricted": false
}
},
{
"not": {
"term": {
"deleted": true
}
}
},
{
"range": {
"happens_on": {
"lte": "2013-12-16"
}
}
}
]
},
"query": {
"bool": {
"must": [
]
}
}
},
"from": 0,
"size": 10
}
}
К сожалению, моя проблема все та же: я не получаю никаких хитов.
EDIT2: Итак, спускаясь по аллее диапазонов внутри предложения must, как предложил Njal. Это дает мне многодиапазонный запрос:
{
"source": {
"filter": {
"and": [
{
"term": {
"restricted": false
}
},
{
"not": {
"term": {
"deleted": true
}
}
}
]
},
"from": 0,
"query": {
"bool": {
"must": [
{
"range": {
"happens_on": {
"gte": "2013-12-06"
}
}
},
{
"range": {
"created_at": {
"gte": "2013-12-15"
}
}
},
{
"range": {
"happens_on": {
"lte": "2013-12-17"
}
}
},
{
"range": {
"created_at": {
"lte": "2013-12-17"
}
}
}
]
}
},
"size": 10
}
}
Все еще никаких результатов не возвращено. Я делаю какие-либо очевидные ошибки здесь?