#elasticsearch #elasticsearch-painless #elasticsearch-scripting
#elasticsearch #elasticsearch- безболезненный #elasticsearch-скриптинг
Вопрос:
Я пытаюсь создать запрос для фильтрации моих документов по одному (может быть любому) значению из поля (в моем случае «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, чтобы выяснить, с какими значениями вы работаете, а затем соответствующим образом строить свои запросы.