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

Sum*_*Rai 40 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_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
Run Code Online (Sandbox Code Playgroud)

我已将限制设置为15,但我不想让它无限制,以便我可以获得所有数据,我无法设置限制,因为我的数据不断变化,我想获得所有数据.

Zac*_*ach 29

您可以使用fromsize参数来浏览所有数据.这可能会非常慢,具体取决于您的数据以及索引中的数据.

http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html

  • 是的,`size:0`将逐字归零.它不等于要求`Integer.MAX_VALUE`.该惯例[在其他一些地方] [http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_size]使用,但可能是混乱的来源. (8认同)
  • 如果你真的*想要一切,那么"如果设置为0,则大小将设置为Integer.MAX_VALUE.",但分页绝对是正确的解决方案.我已经看到由于在一个查询中请求太多而导致集群崩溃. (3认同)
  • 同意,`size:0`在您执行指标或存储桶时很有用,并且想要计算存储桶中有多少东西没有返回实际文档. (3认同)
  • "'size':0"对我不起作用,使用高整数值(例如php的max)可能会导致致命错误.分页绝对是最佳选择. (2认同)

Dav*_*vid 8

另一种方法是首先执行a searchType: 'count',然后使用sizeset to 进行常规搜索results.count.

这里的优点是它可以避免依赖UPPER_BOUND这个类似SO问题中建议的幻数,并避免构建Shay Banon 在此描述的过大优先级队列的额外开销.它还可以让您保持结果排序,不像scan.

最大的缺点是它需要两个请求.根据您的情况,这可能是可以接受的.


tra*_*nes 8

文档中,"请注意,from + size不能超过index.max_result_window默认为10,000 的索引设置".所以,我非常承认临时解决方法就是通过size: 10000或10,000减,如果我使用from的说法.

请注意,按照下面的Matt评论,如果您有大量文档,正确的方法是使用滚动API.我成功地使用了这个,但只使用了python接口.


Rac*_*len 7

使用扫描方法,例如

 curl -XGET 'localhost:9200/_search?search_type=scan&scroll=10m&size=50' -d '
 {
    "query" : {
       "match_all" : {}
     }
 }
Run Code Online (Sandbox Code Playgroud)

看到这里

  • 请注意,扫描在2.1中已弃用:https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_21_search_changes.html#breaking_21_search_changes (2认同)