如何从Elasticsearch索引中获取随机文档,每个文档包含5000万个文档

时间:2017-06-23 15:08:51

标签: elasticsearch random

我想从大约60个ES索引中抽取2000个随机文档,每个索引持有大约5000万个文档,总共大约30亿个文档。我已尝试在Kibana Dev Tools页面上执行以下操作:

GET some_index_abc_*/_search
{
  "size": 2000,
  "query": {
    "function_score": {
      "query": {
        "match_phrase": {
          "field_a": "some phrase"
        }
      },
      "random_score": {}
    }
  }
}

但是这个查询永远不会返回。在刷新Dev Tools页面后,我得到一个页面,告诉我ES群集状态为红色(似乎不是巧合 - 我已多次尝试过)。没有随机函数的其他查询(计数,简单的match_all查询)工作正常。我已经读过,功能评分查询往往很慢,但使用随机功能评分是我能从ES获取随机文档的唯一方法。我想知道是否有其他更快的方法可以从多个大型ES索引中对随机文档进行采样。

编辑:如果可能的话,我想完全使用内置的ES功能进行随机抽样 - 我不想写任何代码到例如在我的最后实施水库采样。我也尝试用更小的文件运行我的查询--10个文档 - 我得到了与2000相同的结果。

0 个答案:

没有答案