如何从弹性搜索中获得所有结果,因为结果仅显示限制为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,但我不想让它无限制,以便我可以获得所有数据,我无法设置限制,因为我的数据不断变化,我想获得所有数据 .
4 回答
从docs,“请注意
from + size
不能超过index.max_result_window
索引设置,默认为10,000” . 所以我公认的非常特别的解决方案是,如果我使用from
参数,只需传递size: 10000
或10,000减去 .请注意,按照下面的Matt评论,如果您有大量文档,正确的方法是使用scroll api . 我成功地使用了这个,但只使用了python接口 .
您可以使用
from
和size
参数来浏览所有数据 . 这可能会非常慢,具体取决于您的数据以及索引中的数据 .http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html
另一种方法是首先执行
searchType: 'count'
,然后执行常规搜索,并将size
设置为results.count
.这里的优点是它可以避免依赖于this similar SO question中建议的
UPPER_BOUND
的幻数,并避免构建过多的优先级队列的额外开销,Shay Banon描述了here . 与scan
不同,它还可以让您对结果进行排序 .最大的缺点是它需要两个请求 . 根据您的情况,这可能是可以接受的 .
使用扫描方法,例如
见here