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

→ Ссылка