Elasticsearch查询以返回所有记录

616

我在 Elasticsearch 中有一个小型数据库,为了测试目的,我想要拉回所有记录。我尝试使用以下形式的 URL...

http://localhost:9200/foo/_search?pretty=true&q={'matchAll':{''}}

请问有人可以给我实现这个功能所需的URL吗?


1
...其中“foo”是您想显示所有记录的索引名称。 - jonatan
1
所有仅使用“size”查询参数的答案都是不正确的。无论查询中的“size”值如何,ES在响应中最多返回“index.max_result_window”个文档(默认为10k)。请参考“scroll”和“search_after”。 - narendra-choudhary
我只需要这一行代码就能够返回所有记录:http://curl -XGET 'localhost:9200/foo/_search' - Mr. N
30个回答

6
你可以使用_count API来获取size参数的值:
http://localhost:9200/foo/_count?q=<your query>

返回{count:X, ...}。提取值“X”,然后执行实际查询:
http://localhost:9200/foo/_search?q=<your query>&size=X

1
将大小设置为X可能会出现意想不到的并发故障:考虑一下在进行计数和在下一个查询中设置大小之间添加记录会发生什么...但是如果您有成千上万条记录需要获取,那么这是错误的方法。相反,您应该使用“滚动”查询。 - Harry Wood

6

调整大小的最佳方法是在URL前使用 size=数字

Curl -XGET "http://localhost:9200/logstash-*/_search?size=50&pretty"

注意:此大小可定义的最大值为10000。对于任何超过一万的值,它都希望您使用滚动功能,以最小化对性能的影响。

从哪个版本开始出现最大尺寸? - WoodyDRN
这可能是在某种程度上“最佳”的方式,但实际上有点简单。如果你有成千上万的记录,那么最好的方式是使用“滚动”查询。 - Harry Wood
使用“从哪里开始”和“大小”方法,您将遇到深度分页问题。请使用滚动API来转储所有文档。 - Daniel Schneiter

5

很简单!你可以使用sizefrom参数!

http://localhost:9200/[your index name]/_search?size=1000&from=0

然后逐渐更改from,直到获取所有的数据。

4
如果数据包含许多文档,请勿使用此方法...每次跳转到“下一页”,Elastic搜索速度都会变得越来越慢!请改用SearchAfter方法。 - Joshlo
4
此解决方案无法处理总数据大小超过10,000的情况。选项size=1000&from=10001将会失败。 - iclman
3
失败了。参数 from + size 不能超过索引设置的 index.max_result_window,默认为10,000。 - stelios
1
如果数据包含成千上万个文档,则正确的答案是使用“滚动”查询。 - Harry Wood
使用“from”和“size”方法,您将遇到深度分页问题。请使用滚动API来转储所有文档。 - Daniel Schneiter

5

从Kibana DevTools中,它是:

GET my_index_name/_search
{
  "query": {
    "match_all": {}
  }
}

4
使用Kibana控制台和我的索引作为搜索的索引,可以贡献以下内容。要求索引仅返回索引的4个字段,您还可以添加大小以指示索引要返回多少个文档。从ES 7.6开始,您应该使用_source而不是filter,这样会响应更快。
GET /address/_search
 {
   "_source": ["streetaddress","city","state","postcode"],
   "size": 100,
   "query":{
   "match_all":{ }
    }   
 }

4

这非常有帮助 - 对我来说改变了一切,现在我可以在晚上真正地希望获得结果。 - Florian Heigl

4

使用“从哪里开始”和“大小”方法,您将遇到深度分页问题。请使用滚动API来转储所有文档。 - Daniel Schneiter

4

size参数将默认显示10条结果的数量增加到500条。

http://localhost:9200/[索引名称]/_search?pretty=true&size=500&q=*:*

逐步更改from参数以获取所有数据。

http://localhost:9200/[索引名称]/_search?size=500&from=0

3

针对 Elasticsearch 6.x

请求: GET /foo/_search?pretty=true

响应: 在 Hits -> total 中,提供文档的计数。

    {
      "took": 1,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 1001,
        "max_score": 1,
        "hits": [
          {

2

Elasticsearch默认返回10条记录,因此需要明确提供大小。

在请求中添加大小以获取所需的记录数。

http://{host}:9200/{index_name}/_search?pretty=true&size=(记录数)

注意:最大页面大小不能超过index.max_result_window索引设置,该设置默认为10,000。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接