我在Elasticsearch中有一个小数据库,出于测试目的,我想把所有记录拉回来。我正在尝试使用表单的URL…

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

有人能给我你要用来完成这个的URL吗?


当前回答

如果你只是添加一些大的数字作为大小,Elasticsearch会变得非常慢,一种获取所有文档的方法是使用scan和scroll id。

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html

在Elasticsearch v7.2中,您可以这样做:

POST /foo/_search?scroll=1m
{
    "size": 100,
    "query": {
        "match_all": {}
    }
}

这样的结果将包含一个_scroll_id,您必须查询它来获得下一个100块。

POST /_search/scroll 
{
    "scroll" : "1m", 
    "scroll_id" : "<YOUR SCROLL ID>" 
}

其他回答

默认情况下Elasticsearch返回10条记录,因此应该显式提供大小。

添加大小与请求,以获得所需的记录数量。

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

注意: 最大页面大小不能超过索引。Max_result_window索引设置,默认值为10,000。

简单!你可以使用size和from参数!

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

然后逐渐改变,直到你得到所有的数据。

要从所有索引中返回所有记录,您可以执行:

curl -XGET http://35.195.120.21:9200/_all/_search?size=50&pretty

输出:

  "took" : 866,
  "timed_out" : false,
  "_shards" : {
    "total" : 25,
    "successful" : 25,
    "failed" : 0
  },
  "hits" : {
    "total" : 512034694,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "grafana-dash",
      "_type" : "dashboard",
      "_id" : "test",
      "_score" : 1.0,
       ...

你可以使用_count API来获取size参数的值:

http://localhost:9200/foo/_count?q=<your query>

返回{count:X,…}。提取值'X',然后执行实际查询:

http://localhost:9200/foo/_search?q=<your query>&size=X

来自Kibana DevTools的:

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