Ruby 将弹性搜索限制设置为";无限制“;
如何从弹性搜索中获取所有结果,因为结果仅显示限制为10。我得到了一个类似以下的查询:Ruby 将弹性搜索限制设置为";无限制“;,ruby,
elasticsearch,Ruby,
elasticsearch,如何从弹性搜索中获取所有结果,因为结果仅显示限制为10。我得到了一个类似以下的查询: @data = Athlete.search :load => true do size 15 query do boolean do must { string q, {:fields => ["name", "other_names", "nickname", "short_name"], :phrase
@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,但我不想将其设为无限,以便我可以获得所有数据
我无法设置限制,因为我的数据不断变化,我希望获得所有数据。使用扫描方法,例如
curl -XGET 'localhost:9200/_search?search_type=scan&scroll=10m&size=50' -d '
{
"query" : {
"match_all" : {}
}
}
请参见您可以使用
from
和size
参数浏览所有数据。这可能会非常慢,具体取决于您的数据以及索引中有多少数据
另一种方法是首先执行
搜索类型:“count”
,然后执行正常搜索,将大小设置为结果。count
这里的优点是它避免了如中所建议的那样依赖于上界
的幻数,并避免了构建Shay Banon所描述的过大优先级队列的额外开销。它还允许您对结果进行排序,这与扫描
不同
最大的缺点是它需要两个请求。根据您的情况,这可能是可以接受的。来自“请注意,From+size
不能超过默认为10000的index.max\u result\u窗口的index设置”。因此,我承认我的特别解决方案是只传递size:10000
或10000减去from,如果我使用from
参数
请注意,根据下面Matt的评论,如果您有大量文档,正确的方法是使用。我已经成功地使用了这个方法,但仅限于python接口。我不能使用scan方法,因为我需要对上面的内容进行排序。是否有其他方法可以收集所有必需的数据?为什么需要按相关性排序的所有结果?你会注意到像谷歌这样的搜索引擎返回的结果不会超过1000条。这是因为你越深入,每个页面需要做的工作就越多,尤其是在分布式环境中。请注意,扫描在2.1中已被弃用:@ChristopherRoussy三年前回答过!但是谢谢。注意。所有扫描链接都已断开。。。ElasticSearch只是想忘记它,如果你真的想要所有东西,那么“如果设置为0,大小将设置为Integer.MAX_VALUE”,但分页绝对是正确的解决方案。我看到集群由于在一个查询中请求太多而崩溃。“大小”:0对我不起作用,使用高整数值(例如php的max)可能会导致致命错误。分页绝对是最好的选择。是的,size:0
将实际返回零结果。这并不等于要求整数.MAX\u值
。但是使用了这种约定,这可能是产生混淆的原因。同意,size:0
在执行度量或存储桶时非常有用,并且在返回实际文档的情况下要计算存储桶中有多少内容。窗口大小不能超过10000。它的起始+大小不能超过10000。因此,如果你的情况是from=8000,size=5000,那么即使你的窗口大小大大小于10000,它也会失败。你的评论的结果是我的答案应该被编辑,删除“或10,00减去…”以确保正确吗?问题是他如何获得所有数据。所以,即使你删除了减法建议,你的答案在这里也不起作用。这个问题的唯一答案是,如果你想发布相关信息,可以使用滚动。