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