Я новичок в Elastic search и узнаю о том, как работает инструмент. У меня есть база данных «аудита», содержащая записи HTTP-запросов к различным конечным точкам в моем приложении и время их выполнения.
Вы можете представить себе этот вымышленный пример:
18 jan 2018 18:06:00: POST /user/1/books
18 jan 2018 18:07:00: POST /user/3/books
18 jan 2018 18:06:03: GET /books/search?title=Hello
19 jan 2018 17:04:01: GET /books/search?title=AnotherBook&pagesMoreThan=300
В моем примере параметры 1 и 3 и параметры запроса являются переменными частями.
Мне интересно, как лучше построить мои документы, чтобы они могли отвечать на следующие вопросы:
- Сколько раз кто-то вызывал конечную точку, чтобы получить книги от пользователей за определенный период времени (любого пользователя)?
- Сколько раз кто-то искал книги (без учета параметров)?
Для этого мне нужно было бы иметь возможность игнорировать переменные части в каждом из URL. Мне нужно было бы получить счет, например, /user/.?/books
или /books/search
.
Каков рекомендуемый способ сделать это вasticsearch?
Одна вещь, о которой я могу подумать, - это то, что она не входит в обязанности самого поиска, и, возможно, мне следует предварительно обработать ее, когда я пишу документы. Так что, возможно, я могу сохранить его как
{
"url": "/user/?/books",
"path_parameters": [1]
},
{
"url": "/books/search",
"parameters": ["title=AnotherBook", "pagesMoreThan=300"]
}
Даже в этом случае определение того, какие части URL-адреса являются переменными, является непростой задачей, поэтому, возможно, это даже невозможно из-за того, что я не указываю вручную все URL-адреса, которые могут возникнуть.
Я также заметил, чтоasticsearch имеет функции агрегации данных, но я не уверен, что это достаточно гибко, чтобы поддерживать то, что мне нужно.
Есть рекомендации?