Установка предела для эластичного поиска на "неограниченное"
Как я могу получить все результаты от поиска по эластичности, так как результаты показывают только предел до 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, но я не сделаю его неограниченным, чтобы я мог получить все данные
Я не могу установить предел, поскольку мои данные продолжают меняться, и я хочу получить все данные.
Ответы
Ответ 1
Вы можете использовать параметры from
и size
для просмотра всех ваших данных. Это может быть очень медленным в зависимости от ваших данных и количества в индексе.
http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html
Ответ 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
.
Самым большим недостатком является то, что он требует двух запросов. В зависимости от ваших обстоятельств это может быть приемлемым.