В настоящее время я довольно запутался в структурировании запросов в эластичных. Поясню, что я имею в виду следующий шаблон, который отлично работает для меня:Elastic (search): Как правильно структурировать вложенные запросы?
{
"template" : {
"query" : {
"filtered" : {
"query" : {
"bool" : {
"must" : [
{ "match" : {
"user" : "{{param_user}}"
} },
{ "match" : {
"session" : "{{param_session}}"
} },
{ "range" : {
"date" : {
"gte" : "{{param_from}}",
"lte" : "{{param_to}}"
}
} }
]
}
}
}
}
}
}
Ok, поэтому я хочу, чтобы получить записи конкретного сеанса пользователя, в течение определенного периода времени. Теперь, если вы берете llok по этой ссылке http://www.elastic.co/guide/en/elasticsearch/guide/current/combining-filters.html вы можете найти следующий запрос:
{
"query" : {
"filtered" : {
"filter" : {
"bool" : {
"should" : [
{ "term" : {"price" : 20}},
{ "term" : {"productID" : "XHDK-A-1293-#fJ3"}}
],
"must_not" : {
"term" : {"price" : 30}
}
}
}
}
}
}
В этом примере мы имеем право после "filtered"
"filter"
ключевого слова. Однако, если я обменяю свой второй "query"
на "filter"
, как в примере, мой шаблон больше не будет работать. Это действительно противоречиво, и я потратил много времени, чтобы понять это. Кроме того, я не понимаю, почему мы должны утихомиривать ФИЛЬТР В ОТДЕЛЬНЫХ ̶ ̶ ̶{̶ ̶}̶
, даже если они уже отделилась решеткой ̶s̶y̶n̶t̶a̶x̶.̶
Другой вопрос, у меня было, что я предложил, чтобы соответствовать несколько полей я могу просто набираете как чего-л:
{
"query" : {
"match" : {
"user" : "{{param_user}}",
"session" : "{{param_session}}"
}
}
}
, но казалось, что я должен использовать булев запрос, который я не знал, так что я искал «упругим мульти матч», но есть что-то совсем другое.
Мой вопрос: где я могу найти, как правильно структурировать запрос (smth как PEG)? Документация дает только базовые примеры, но не указывает, что мы можем на самом деле делать и как.
С наилучшими пожеланиями, Jan
Edit: Ok я только что нашел случайно, что я не могу обменять "query"
с "filter"
в "match"
является запросом, а не фильтр. Но опять же, что насчет "range"
? Кажется, это запрос, а также фильтр ... Есть ли резюме ключевых слов, определяющих, в каком контексте они могут быть использованы?
Хорошо, это делает больше смысла. Я не очень хорошо понимал разницу между фильтром и запросом.Помог мне много, но я боюсь, что ваша ссылка сломана;) – Jan
Исправлено. Просто на самом деле не скопировал ссылку: P В любом случае это просто документы Elasticsearch. ;-) Вы можете видеть запросы и фильтры, доступные там. Как только вы получите представление о вложенных запросах/фильтрах, он станет очень простым в использовании. –
Да, я вижу. Таким образом, идея состоит в том, чтобы использовать запросы для уменьшения размера выбранных документов (только соответствующие), и фильтры затем используются, чтобы сузить их еще больше в зависимости от того, чего хочет пользователь? – Jan