Elasticsearch различные записи в порядке с нумерацией страниц - PullRequest
0 голосов
/ 26 марта 2019

Как получить записи после агрегирования в поле условий в порядке нумерации страниц. Пока у меня есть это:

{
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "user_id.keyword": [
              "user@domain.com"
            ]
          }
        },
        {
          "range": {
            "creation_time": {
              "gte": "2019-02-04T19:00:00.000Z",
              "lte": "2019-05-04T19:00:00.000Z"
            }
          }
        }
      ],
      "should": [
        {
          "wildcard": {
            "operation": "*sol*"
          }
        },
        {
          "wildcard": {
            "object_id": "*sol*"
          }
        },
        {
          "wildcard": {
            "user_id": "*sol*"
          }
        },
        {
          "wildcard": {
            "user_type": "*sol*"
          }
        },
        {
          "wildcard": {
            "client_ip": "*sol*"
          }
        },
        {
          "wildcard": {
            "country": "*sol*"
          }
        },
        {
          "wildcard": {
            "workload": "*sol*"
          }
        }
      ]
    }
  },
  "aggs": {
    "user_ids": {
      "terms": {
        "field": "country.keyword",
        "include": ".*United.*"
      }
    }
  },
  "from": 0,
  "size": 10,
  "sort": [
    {
      "creation_time": {
        "order": "desc"
      }
    }
  ]
}

Я изучил это , и некоторые люди говорят, что это возможно с помощью составных агрегатов или с помощью разделов. Но я не уверен, как на самом деле этого добиться.

Я также посмотрел на bucket_sort, но я не могу заставить его работать:

"my_bucket_sort": {
      "bucket_sort": {
        "sort": [
          {
            "user_ids": {
              "order": "desc"
            }
          }
        ],
        "size": 3
      }
    }

Я нуб в этом. Пожалуйста, помогите мне. Спасибо.

1 Ответ

1 голос
/ 26 марта 2019

Поскольку поле имеет статус страны и, вероятно, не имеет большого количества элементов, вы можете установить достаточно большое число size, чтобы возвращать все страны в одном запросе

  "aggs": {
    "user_ids": {
      "terms": {
        "field": "country.keyword",
        "include": ".*United.*",
        "size": 10000
      }
    }
  }

Или альтернативнодля поля высокой мощности вы можете сначала отфильтровать агрегацию, а затем использовать разбиение для просмотра значений

{
  "size": 0,
  "aggs": {
    "user_ids": {
      "filter": {
        "wildcard" : { "country" : ".*United.*" }
      },
      "aggs": {
        "countries": {
          "terms": {
            "field": "country.keyword",
            "include": {
              "partition": 0,
              "num_partitions": 20
            },
            "size": 10000
          }
        }
      }
    }
  }
}

, где вы будете увеличивать значение partition с каждым отправленным запросом до 19

Подробнее см. эластичная документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...