Фильтрация документов по неизвестному значению поля

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

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