Подтвердить что ты не робот

Установка предела для эластичного поиска на "неограниченное"

Как я могу получить все результаты от поиска по эластичности, так как результаты показывают только предел до 10. У меня есть запрос вроде:

@data = Athlete.search :load => true do
          size 15
          query do
            boolean do
              must { string q, {:fields => ["name", "other_names", "nickname", "short_name"], :phrase_slop => 5} }
              unless conditions.blank?
                conditions.each do |condition|
                  must { eval(condition) }
                end
              end
              unless excludes.blank?
                excludes.each do |exclude|
                  must_not { eval(exclude) }
                end
              end
            end
          end
          sort do
            by '_score', "desc"
          end
        end

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

4b9b3361

Ответ 2

Из docs: "Обратите внимание, что from + size не может быть больше, чем параметр индекса index.max_result_window, который по умолчанию равен 10 000". Поэтому мое, по общему признанию, очень ad-hoc решение состоит в том, чтобы просто передать size: 10000 или 10 000 минус, если я использую аргумент from.

Обратите внимание, что следующий комментарий Мэтта ниже, правильный способ сделать это, если у вас есть больший объем документов, - это использовать прокрутить api, Я использовал это успешно, но только с интерфейсом python.

Ответ 3

используйте метод сканирования, например.

 curl -XGET 'localhost:9200/_search?search_type=scan&scroll=10m&size=50' -d '
 {
    "query" : {
       "match_all" : {}
     }
 }

см. здесь

Ответ 4

Другой подход - сначала выполнить searchType: 'count', а затем выполнить обычный поиск с size, установленным на results.count.

Преимущество здесь заключается в том, что он избегает в зависимости от магического числа для UPPER_BOUND, как предложено в этом подобном вопросе SO, и избегает дополнительных накладных расходов на строительство слишком большого количества приоритетная очередь, которую Shay Banon описывает здесь. Это также позволяет вам сортировать результаты, в отличие от scan.

Самым большим недостатком является то, что он требует двух запросов. В зависимости от ваших обстоятельств это может быть приемлемым.