Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将弹性搜索限制设置为";无限制“;_Ruby_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Ruby,elasticsearch" /> elasticsearch,Ruby,elasticsearch" />

Ruby 将弹性搜索限制设置为";无限制“;

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

如何从弹性搜索中获取所有结果,因为结果仅显示限制为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,但我不想将其设为无限,以便我可以获得所有数据
我无法设置限制,因为我的数据不断变化,我希望获得所有数据。

使用扫描方法,例如

 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减去…”以确保正确吗?问题是他如何获得所有数据。所以,即使你删除了减法建议,你的答案在这里也不起作用。这个问题的唯一答案是,如果你想发布相关信息,可以使用滚动。