Ответ 1
Вам нужно использовать bool query для объединения разных запросов. Затем вы можете выбрать, должен ли совпадать каждый отдельный запрос, должен соответствовать (необязательно) или не соответствовать.
Для справки здесь приведен код. Я пытаюсь сделать плагин hubot, который регистрируется в elasticsearch, а затем использует команды hubot для поиска этих журналов.
https://gist.github.com/4050748
Я пытаюсь получить записи, соответствующие двум запросам.
{
query: {
match: {
user: "SomeUsername"
},
range: {
date: {
from: (Date.now() - 3600)
}
}
},
size: 50
}
Я ожидал:
Я получил:
Как мне получить все записи с некоторым именем пользователя за последний час? Нужно ли использовать match_all с фильтрами? Является ли то, что я пытаюсь не поддерживать?
В SQL это будет что-то вроде:
Select (*) from messages where user_name = ? and time > ?
Вам нужно использовать bool query для объединения разных запросов. Затем вы можете выбрать, должен ли совпадать каждый отдельный запрос, должен соответствовать (необязательно) или не соответствовать.
Для всех, кто наткнулся на этот вопрос и задается вопросом, как выглядит комбинация запроса соответствия и диапазона в ElasticSearch, этот пример будет выглядеть как
curl 'localhost:9200/<index>/_search?pretty=true' -d '{
"query" : {
"bool": {
"must": [
{
"match": {
"user": "SomeUsername"
}
},
{
"range" : {
"date": {
"gt": "now-1h"
}
}
}
]
}
}
}'