Elasticsearch От и Размер по агрегации для нумерации страниц - PullRequest
0 голосов
/ 15 мая 2018

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

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

ЧтоЯ знаю:

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

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

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

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

запрос на Kibana

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"
      }
    }
  ]
}

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

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)

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

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

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

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

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

...