Elasticsearch - Как сопоставить диапазон номеров в строке - PullRequest
1 голос
/ 07 апреля 2020

Я хотел бы написать запрос, который находит события журнала, которые содержат имя и число +/- 5. Поскольку я не знаю точную структуру этого события журнала, я не могу извлечь число в отдельном поле int ,

Мой запрос в настоящее время выглядит следующим образом.

    baseQuery = {
            "query": {
                    "bool": {
                    "must": [
                            {"match": {"sim_session" : "session_id"}},
                            {"match": {"event" : "putFilenameHere"}},
                            {"bool": {
                                    "should": [
                                            {"match_phrase": {"event" : "Name"}},
                                            #Search for the line in the event text
                                            {"match": {"event" : "42"}}
                                    ],
                                    "minimum_should_match" : 2
                            }}
                    ]
                    }
            }
            }

Таким образом, я могу найти события, которые содержат «Имя» и число «42» (которое рассматривается как строка), но я хотел бы найти события, которые содержат «Имя» и 37 или 38 или 39, или 40, или 41, или 42, или 43, или 44, или 45, или 46, или 47. Есть ли более умный способ добиться этого, чем выполнить один и тот же запрос 11 раз с другим числом?

Сценарий выполнение этого запроса записано в python.

Thx

1 Ответ

1 голос
/ 07 апреля 2020

Вы можете применить предварительную предварительную обработку диапазона для запроса:

  1. Если ваше поле event является текстовым, ваша строка запроса будет автоматически разбита на токены и запрашиваться с использованием каждого числового токена:
"match": {
  "event": "37 38 39 40 41 42 43 44 45"
}
Если ваше поле event является ключевым словом, используйте запрос условий:
"terms": {
  "event": ["37", "38", "39", "40", "41", "42", "43", "44", "45"]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...