2016-03-22 1 views
1

Я использую «жуткий» камень для поиска elastics в моем приложении ROR. Но я не нашел никакой документации для прокрутки elasticsearch api. Когда я перехожу на последнюю страницу записей, я становлюсь ниже ошибки.Как использовать elasticsearch scroll api с использованием жевательной резинки?

[500] {"error":{"root_cause":[{"type":"query_phase_execution_exception","reason":"Result window is too 
large, from + size must be less than or equal to: [10000] but was [19450]. See the scroll api for a more 
efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] 
index level parameter."}],"type":"search_phase_execution_exception","reason":"all shards failed", 
"phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"recordings","node":"tgLqH_wwRUG6NmY0PCB0nA", 
"reason":{"type":"query_phase_execution_exception","reason":"Result window is too large, from + size must 
be less than or equal to: [10000] but was [19450]. See the scroll api for a more efficient way to request 
large data sets. This limit can be set by changing the [index.max_result_window] index level 
parameter."}}]},"status":500} 

Есть ли способ реализации elasticsearch прокрутки апи в жевательном драгоценном камне или их любой другой вариант?

+0

Он выглядит, как прямо сейчас, 17 августа 2016 года, Жевательные имеет открытая ошибка для конкретного использования Chewy со списком API: https://github.com/toptal/chewy/issues/327 –

ответ

0

Просто сделайте размер запроса меньше, и вы можете использовать свиток в партиях:

# @example Call the `scroll` API until all the documents are returned 
    # 
    #  # Index 1,000 documents 
    #  client.indices.delete index: 'test' 
    #  1_000.times do |i| client.index index: 'test', type: 'test', id: i+1, body: {title: "Test #{i}"} end 
    #  client.indices.refresh index: 'test' 
    # 
    #  # Open the "view" of the index by passing the `scroll` parameter 
    #  # Sorting by `_doc` makes the operations faster 
    #  r = client.search index: 'test', scroll: '1m', 
       body: {size: 100, sort: ['_doc']} 
    # 
    #  # Display the initial results 
    #  puts "--- BATCH 0 -------------------------------------------------" 
    #  puts r['hits']['hits'].map { |d| d['_source']['title'] }.inspect 
    # 
    #  # Call the `scroll` API until empty results are returned 
    #  while r = client.scroll(scroll_id: r['_scroll_id'], scroll: '5m') and not r['hits']['hits'].empty? do 
    #  puts "--- BATCH #{defined?($i) ? $i += 1 : $i = 1} -------------------------------------------------" 
    #  puts r['hits']['hits'].map { |d| d['_source']['title'] }.inspect 
    #  puts 
    #  end 

Пример взят из here с использованием Elasticsearch DSL Gem