elasticsearch 如何从Elasticsearch索引中获取每个索引有5000万个文档的随机文档,elasticsearch,random,elasticsearch,Random" /> elasticsearch 如何从Elasticsearch索引中获取每个索引有5000万个文档的随机文档,elasticsearch,random,elasticsearch,Random" />

elasticsearch 如何从Elasticsearch索引中获取每个索引有5000万个文档的随机文档

elasticsearch 如何从Elasticsearch索引中获取每个索引有5000万个文档的随机文档,elasticsearch,random,elasticsearch,Random,我想从大约60个ES索引中随机抽取2000个文档,每个索引包含大约5000万个文档,总共大约30亿个文档。我尝试在Kibana开发工具页面上执行以下操作: GET some_index_abc_*/_search { "size": 2000, "query": { "function_score": { "query": { "match_phrase": { "field_a": "some phrase" }

我想从大约60个ES索引中随机抽取2000个文档,每个索引包含大约5000万个文档,总共大约30亿个文档。我尝试在Kibana开发工具页面上执行以下操作:

GET some_index_abc_*/_search
{
  "size": 2000,
  "query": {
    "function_score": {
      "query": {
        "match_phrase": {
          "field_a": "some phrase"
        }
      },
      "random_score": {}
    }
  }
}
但这个查询永远不会返回。刷新Dev Tools页面后,我得到一个页面,告诉我ES集群状态为红色(这似乎不是巧合,我已经尝试过好几次)。没有随机函数的其他查询(计数、简单匹配所有查询)可以正常工作。我已经读到函数分数查询往往很慢,但使用随机函数分数是我能够找到的从ES获取随机文档的唯一方法。我想知道是否还有其他更快的方法可以从多个大型ES索引中随机抽取文档


编辑:如果可能的话,我想完全使用内置的ES功能进行随机采样-我不想编写任何代码,例如,在我这边实现水库采样。我还尝试使用更小的大小(10个文档)运行我的查询,结果与2000年相同。

如果直接复制/粘贴,则在“size”属性开头的两组双引号可能会出现问题。这意味着您的查询太重,群集无法处理。要检查此假设,请在单个索引上运行相同的查询。您可能还想用更小的
大小来测试这一点。要从50000000条记录中选取2000条记录,您可以尝试。修复了语法错误(不是问题的原因-我在运行查询后添加了它)并澄清了要求。您能够做些什么吗?在“大小”的开头有两组双引号如果直接复制/粘贴,属性可能会出现问题。这意味着您的查询太重,群集无法处理。要检查此假设,请在单个索引上运行相同的查询。您可能还想用更小的
大小来测试这一点。要从50000000条记录中选取2000条记录,您可以尝试。修复了语法错误(不是问题的原因-我在运行查询后添加了它)并澄清了要求。您能做些什么吗?