Фильтрация документов по неизвестному значению поля
Я пытаюсь создать запрос для фильтрации моих документов по одному (может быть любому) значению из поля (в моем случае "host.name"). Дело в том, что я ранее не знал уникальных значений этого поля. Мне нужно найти их и выбрать тот, который будет использоваться в запросе.
Я попробовал следующий запрос, используя безболезненный сценарий, но мне не удалось достичь цели.
{
"sort" : [{"@timestamp": "desc"}, {"host.name": "asc"}],
"query": {
"bool": {
"filter": {
"script": {
"script": {
"source": """
String k = doc['host.name'][0];
return doc['host.name'].value == k;
""",
"lang": "painless"
}
}
}
}
}
Буду признателен, если кто-нибудь поможет мне улучшить эту идею, предложив мне новую.
1 ответ
TL;DR вы не можете.
Контекст запроса сценария работает с одним документом за раз, поэтому у вас не будет доступа к значениям полей других документов. Вы можете использовать
scripted_metric
агрегация, которая позволяет перебирать все документы, но это всего лишь агрегация, а не запрос.
Я бы предложил сначала запустить простой
terms
agg, чтобы выяснить, с какими значениями вы работаете, а затем соответствующим образом составить свои запросы.