Elasticsearch От и Размер по агрегации для нумерации страниц

Прежде всего, я хочу сказать, что требование, которого я хочу достичь, очень хорошо работает на SOLR 5.3.1, но не на ElasticSearch 6.2 как сервисе на AWS.

Мой фактический запрос очень большой и сложный, и он отлично работает на кибане, но не тогда, когда я пересекаю от = 100 и размер = 50, так как он показывает ошибку на консоли кибана,

Что я знаю:

Для обычного поиска максимум от может быть 10000, а для агрегированного поиска максимум от может быть 100

Если я пересекаю этот предел, мне придется изменить максимальный предел, что невозможно, поскольку я использую ES в AWS в качестве службы ИЛИ Я использую API прокрутки с функцией идентификатора прокрутки для получения разбитых на страницы данных.

Scroll API работает хорошо, так как я использовал его для другой части моего проекта, но когда я пытаюсь использовать тот же Scroll с агрегацией, он не работает должным образом.

Здесь с API прокрутки первый поиск получает агрегированные данные, а второй вызов с идентификатором прокрутки не возвращает агрегированные результаты, показывающие только результат попаданий

Запрос по Кибане

GET /properties/_search
{
  "size": 10,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "published": true
          }
        },
        {
          "match": {
            "country": "South Africa"
          }
        }
      ]
    }
  },
  "aggs": {
    "aggs_by_feed": {
      "terms": {
        "field": "feed",
        "order": {
          "_key": "desc"
        }
      },
      "aggs": {
        "tops": {
          "top_hits": {
            from: 100,
            size: 50,
            "_source": [
              "id",
              "feed_provider_id"
            ]
          }
        }
      }
    }
  },
  "sort": [
    {
      "instant_book": {
        "order": "desc"
      }
    }
  ]
}

С поиском на python: проблема, с которой я сталкиваюсь при этом поиске, при первом поиске агрегированные данные получают вместе с данными хитов, но при следующем вызове с идентификатором прокрутки он не возвращает агрегированные данные, показывающие только данные хитов.

if index_name is not None and doc_type is not None and body is not None:
   es = init_es()
   page = es.search(index_name,doc_type,scroll = '30s',size = 10, body = body)
   sid = page['_scroll_id']
   scroll_size = page['hits']['total']

   # Start scrolling
   while (scroll_size > 0):

       print("Scrolling...")
       page = es.scroll(scroll_id=sid, scroll='30s')
       # Update the scroll ID
       sid = page['_scroll_id']

       print("scroll id: " + sid)

       # Get the number of results that we returned in the last scroll
       scroll_size = len(page['hits']['hits'])
       print("scroll size: " + str(scroll_size))

       print("scrolled data :" )
       print(page['aggregations'])

С Elasticsearch-DSL на python: при таком подходе я пытаюсь выбрать _source имена полей как id а также feed_provider_id на втором aggs ig tops->top_hits

es = init_es()
    s = Search(using=es, index=index_name,doc_type=doc_type)

    s.aggs.bucket('aggs_by_feed', 'terms', field='feed').metric('top','top_hits',field = 'id')
    response = s.execute()
    print('Hit........')
    for hit in response:
        print(hit.meta.score, hit.feed)
    print(response.aggregations.aggs_by_feed)
    print('AGG........')
    for tag in response.aggregations.aggs_by_feed:
        print(tag)

Итак, мой вопрос

Разве невозможно получить данные, используя поля from и size для агрегированного запроса выше из =100?

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

В некотором ответе на SO сказано использовать раздел, но я не знаю, как использовать его в моем сценарии. Как управлять результатами агрегирования эластичного поиска с помощью From / Size?

Некоторые другие говорят, что эта функция в настоящее время не поддерживается ES (в настоящее время по запросу функции). Если это невозможно, что еще можно сделать вместо группировки в Solr?

0 ответов