ElasticSearch. Не могу понять, как правильно составить запрос
Нужно найти события в ES по сложному фильтру, собрал рабочий, но не полный вариант:
{
"_source": [
"anyField",
"secondField",
"anotherField",
"_id"
],
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "*****",
"fields": [
"anyField",
"anotherField"
],
"operator": "and"
}
},
{
"range": {
"processingTime": {
"gte": "1800000"
}
}
}
]},
"filter": [
{
"match":{
"typeName": "ANYvalue"
}
}
]
},
"size": 10000
"sort": [
{
"_id": {
"unmapped_type": "keyword",
"order": "asc"
}
}
]
}
мне нужна выборка по нескольким значениям в "typeName", пробовал несколько перестроений запроса, например такой:
{
"_source": [
"anyField",
"secondField",
"anotherField",
"_id"
],
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "*****",
"fields": [
"anyField",
"anotherField"
],
"operator": "and"
}
},
{
"range": {
"processingTime": {
"gte": "1800000"
}
}
}
]},
"filter": [
{
"match":{
"typeName": ["ANYvalue","SECONDvalue","ANOTHERvalue"]
}
}
]
},
"size": 10000
"sort": [
{
"_id": {
"unmapped_type": "keyword",
"order": "asc"
}
}
]
}
Подскажите, пожалуйста, что можно исправить?
Ответы (1 шт):
Автор решения: Сергей Храмов
→ Ссылка
Используйте should:
{
"_source": [
"anyField",
"secondField",
"anotherField",
"_id"
],
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "*****",
"fields": [
"anyField",
"anotherField"
],
"operator": "and"
}
},
{
"range": {
"processingTime": {
"gte": "1800000"
}
}
}
],
"should" : [
{ "term" : { "typeName" : "ANYvalue" } },
{ "term" : { "typeName" : "SECONDvalue" } },
{ "term" : { "typeName" : "ANOTHERvalue" } }
]
}
},
"size": 10000
"sort": [
{
"_id": {
"unmapped_type": "keyword",
"order": "asc"
}
}
]
}
Подробности в документации https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html