2014-09-04 2 views
0

Когда я хотел бы получить огромное количество документов из elasticsearch индекса, я всегда использую сканирование и прокрутки техника из elasticsearch (http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/scan-scroll.html) следующим образом:Сортировать огромное количество документов в Elasticsearch

conn = Elasticsearch(hosts = HOSTS) 

the_query = { 'query': { 'match_all': { } }, 'sort': { 'created_at': { 'order': 'asc' } } } # would like sort the documents according to the 'created_at' date 

scanResp = conn.search(index=TARGET_INDEX, doc_type=TARGET_DOC_TYPE, body=the_query, search_type='scan', scroll='10m') 
scrollId = scanResp['_scroll_id'] 
doc_num = 1 

response = conn.scroll(scroll_id = scrollId, scroll='10m') 

while (len(response['hits']['hits']) > 0): 
    for item in response['hits']['hits']: 
     print '\tDocument ' + str(doc_num) + ' of ' + str(response['hits']['total']) 
     doc_num += 1 

     # ==================== 
     # Process the item 
     # ==================== 
     the_doc = item['_source'] 


    # end for item 
    scrollId = response['_scroll_id'] 
    if doc_num >= response['hits']['total']: 
     break 
    response = conn.scroll(scroll_id = scrollId, scroll='10m') 
# end of while 

Однако, как упомянутая документация elasticsearch, полученные документы не будут отсортированы, поэтому результат не будет тем, что я хочу.

Мой вопрос: Как я могу отсортировать огромное количество документов в Elasticsearch?

Спасибо :)

ответ

1

скроллинг дорого при переборе отсортированного списка, но если вы настаиваете, удалите «» сканирования search_type из вашего запроса. scan отключает сортировку при прокрутке.

Смежные вопросы