Elasticsearch 查询在期望 > 10,000 时返回 10

Lio*_*cer 2 elasticsearch

我想检索所有的JSON对象中Elasticsearch有一个null的值awsKafkaTimestamp。这是我设置的查询:

{
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "tracer.awsKafkaTimestamp"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当我用 卷曲到我的 elasticsearch 端点时,DSL我只会得到几个值。我期待所有(10000+)个,因为我确信所有的awsKafkaTimestamp值都是null

这是我使用Postman. 如您所见,只有 10 个 JSON 对象返回给我:

在此处输入图片说明

Ada*_*ski 6

这是 elasticsearch 的正确行为。默认情况下,它只返回 10 条记录,并在 hits.total 字段中提供有关匹配搜索条件的文档总数的信息。要检索超过 10 个的数据,您应该在查询中指定大小字段,如下所示(您可以在此处阅读更多相关信息:https : //www.elastic.co/guide/en/elasticsearch/reference/current/search-request- from-size.html ):

{
    "from" : 0, "size" : 10,
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这不会得到整个结果集,因为大小参数被限制为 10000。超过这个数字你应该使用滚动 api。如果您将其设置为超过 10000 个 api,则会返回与此相关的错误。 (2认同)

Hkn*_*ntn 5

默认情况下,elasticsearch 会给你 10 个结果,即使它与10212. 您可以设置大小参数,但限制为 10000,因此您唯一的选择是使用滚动 API 来获取,

来自elasticsearch网站Scroll API的示例

curl -XGET 'localhost:9200/twitter/tweet/_search?scroll=1m' -d '
{
    "query": {
        "match" : {
            "title" : "elasticsearch"
        }
    }
}
'
Run Code Online (Sandbox Code Playgroud)