Упругий поиск, вложенный фильтр

Вот структура документа, возвращенная API Elastic Search:

{ "process_name":"process01", "beat": { "hostname":"12345","name":"blablabla" }, }

Фильтрация по process_name была простой, но как я могу фильтровать по host_name, который вложен в ритм?

  • Неудачная попытка 1

{ "size":10000, "query" : { "bool" : { "should": [ { "match" : { "process_name" : "process01" } }, { "match" : { "process_name" : "process02" } } ], "must": [ { "match" : { beat: { "hostname":"12345" } } } ] } } }

сообщение об ошибке 1:

(не удалось десериализовать объект type=class com.logshero.api.SearchApiRequest):

  • Неудачная попытка 2

{ "size":10000, "query" : { "bool" : { "should": [ { "match" : { "process_name" : "process01" } }, { "match" : { "process_name" : "process02" } } ], "must": [ { "match" : { "hostname":"12345" } } ] } } }

сообщение об ошибке 2:

{ "хиты":{"всего":0,"max_score": нулевая, "хиты":[]}}

1 ответ

Решение

Вы можете использовать следующий запрос. Вы также должны убедиться, что ритм в ваших отображениях определен как вложенный тип.

{
    "size": 10000,
    "query": {
        "bool": {
            "should": [{
                "match": {
                    "process_name": "process01"
                }
            }, {
                "match": {
                    "process_name": "process02"
                }
            }],
            "must": [{
                "match": {
                    "beat.hostname": "12345"
                }
            }]
        }
    }
}

Спасибо

Другие вопросы по тегам