返回所有记录的Elasticsearch查询

返回所有记录的Elasticsearch查询,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我在Elasticsearch中有一个小数据库,出于测试目的,我想把所有记录都拉回来。我正在尝试使用表单的URL http://localhost:9200/foo/_search?pretty=true&q={'matchAll':{''}} 有人能给我你用来完成这个任务的URL吗?我认为lucene语法是受支持的,所以: http://localhost:9200/foo/_search?pretty=true&q=*:* 大小默认为10,因此您可能还需要&size=BIGNUMB

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

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

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

我认为lucene语法是受支持的,所以:

http://localhost:9200/foo/_search?pretty=true&q=*:*

大小默认为10,因此您可能还需要
&size=BIGNUMBER
才能获取10个以上的项目。(其中BIGNUMBER等于您认为大于数据集的数字)

但是,elasticsearch文档用于大型结果集,使用扫描搜索类型

例如:

然后按照上面的文档链接继续请求

编辑:
scan
在2.1.0中已弃用

扫描
与按
\u doc
排序的常规
滚动
请求相比,不提供任何好处。(由@christophe roussy发现)

注意:答案与旧版本的Elasticsearch
0.90
有关。此后发布的版本具有更新的语法。请参考其他答案,这些答案可能会为您正在寻找的最新答案提供更准确的答案

下面的查询将返回您希望返回的\u结果

curl -XGET 'localhost:9200/foo/_search?size=NO_OF_RESULTS' -d '
{
"query" : {
    "match_all" : {}
  }
}'
现在,这里的问题是希望返回所有记录。因此,在编写查询之前,您自然不会知道结果的值

我们如何知道您的文档中存在多少记录?只需在下面键入查询

curl -XGET 'localhost:9200/foo/_search' -d '
这将为您提供一个与下面类似的结果

 {
hits" : {
  "total" :       2357,
  "hits" : [
    {
      ..................
结果total告诉您文档中有多少记录可用。因此,这是一个很好的方法来了解NO\u结果的值

curl -XGET 'localhost:9200/_search' -d ' 
搜索所有索引中的所有类型

curl -XGET 'localhost:9200/foo/_search' -d '
http://127.0.0.1:9200/foo/_search/?size=1000&pretty=1
                                   ^
在foo索引中搜索所有类型

curl -XGET 'localhost:9200/foo1,foo2/_search' -d '
在foo1和foo2索引中搜索所有类型

curl -XGET 'localhost:9200/f*/_search
在以f开头的任何索引中搜索所有类型

curl -XGET 'localhost:9200/_all/type1,type2/_search' -d '
在所有索引中搜索用户和tweet类型

curl -XGET 'localhost:9200/foo/_search' -d '
http://127.0.0.1:9200/foo/_search/?size=1000&pretty=1
                                   ^
注意size参数,它将显示的点击次数从默认值(10)增加到每个碎片1000次


还可以使用
服务器:9200/\u stats
获取所有别名的统计信息。。与每个别名的大小和元素数一样,这非常有用,并提供了有用的信息

elasticsearch(ES)支持从ES群集索引获取数据的GET或POST请求

当我们进行GET时:

http://localhost:9200/[your index name]/_search?size=[no of records you want]&q=*:*
当我们发布帖子时:

http://localhost:9200/[your_index_name]/_search
{
  "size": [your value] //default 10
  "from": [your start index] //default 0
  "query":
   {
    "match_all": {}
   }
}   
我建议使用带有elasticsearch的UI插件
这将帮助您更好地了解您创建的索引,并测试您的索引

Elasticsearch将变得显著更慢,如果您只添加一些大的数字作为大小,获取所有文档的一种方法是使用扫描和滚动ID

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

POST /foo/_search?scroll=1m
{
    "size": 100,
    "query": {
        "match_all": {}
    }
}
{"_scroll_id":"c2Nhbjs1OzUyNjE6NU4tU3BrWi1UWkNIWVNBZW43bXV3Zzs1Mzc3OkhUQ0g3VGllU2FhemJVNlM5d2t0alE7NTI2Mjo1Ti1TcGtaLVRaQ0hZU0FlbjdtdXdnOzUzNzg6SFRDSDdUaWVTYWF6YlU2Uzl3a3RqUTs1MjYzOjVOLVNwa1otVFpDSFlTQWVuN211d2c7MTt0b3RhbF9oaXRzOjIyNjAxMzU3Ow==","took":109,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":22601357,"max_score":0.0,"hits":[]}}
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/test/_search?scroll=1m&size=100' -d '{
  "slice": {
    "id": 0, 
    "max": 10 
  }
}'
由此产生的结果将包含一个_scroll_id,您必须查询该id才能获得下一个100块

POST /_search/scroll 
{
    "scroll" : "1m", 
    "scroll_id" : "<YOUR SCROLL ID>" 
}
POST/\u搜索/滚动
{
“滚动”:“1m”,
“滚动\u id”:”
}

简单!您可以使用
size
from
参数

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

然后您逐渐地从更改
,直到获得所有数据。

如果您想提取数千条记录,那么。。。一些人给出了使用“scroll”的正确答案(注意:有些人还建议使用“search_type=scan”。这已被弃用,并且在v5.0中被删除。您不需要它)

http://localhost:9200/[indexName]/_search?size=500&from=0 从“搜索”查询开始,但指定“滚动”参数(这里我使用1分钟超时):

这包括你的第一批点击。但我们还没有结束。上述curl命令的输出如下:

POST /foo/_search?scroll=1m
{
    "size": 100,
    "query": {
        "match_all": {}
    }
}
{"_scroll_id":"c2Nhbjs1OzUyNjE6NU4tU3BrWi1UWkNIWVNBZW43bXV3Zzs1Mzc3OkhUQ0g3VGllU2FhemJVNlM5d2t0alE7NTI2Mjo1Ti1TcGtaLVRaQ0hZU0FlbjdtdXdnOzUzNzg6SFRDSDdUaWVTYWF6YlU2Uzl3a3RqUTs1MjYzOjVOLVNwa1otVFpDSFlTQWVuN211d2c7MTt0b3RhbF9oaXRzOjIyNjAxMzU3Ow==","took":109,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":22601357,"max_score":0.0,"hits":[]}}
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/test/_search?scroll=1m&size=100' -d '{
  "slice": {
    "id": 0, 
    "max": 10 
  }
}'
但是,传递scroll_id并不是为手动完成而设计的。最好的办法是编写代码来完成。e、 g.在爪哇:

    private TransportClient client = null;
    private Settings settings = ImmutableSettings.settingsBuilder()
                  .put(CLUSTER_NAME,"cluster-test").build();
    private SearchResponse scrollResp  = null;

    this.client = new TransportClient(settings);
    this.client.addTransportAddress(new InetSocketTransportAddress("ip", port));

    QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
    scrollResp = client.prepareSearch(index).setSearchType(SearchType.SCAN)
                 .setScroll(new TimeValue(60000))                            
                 .setQuery(queryBuilder)
                 .setSize(100).execute().actionGet();

    scrollResp = client.prepareSearchScroll(scrollResp.getScrollId())
                .setScroll(new TimeValue(timeVal))
                .execute()
                .actionGet();

现在,在最后一个命令上循环使用SearchResponse提取数据。

这是我使用python客户端找到的最佳解决方案

http://localhost:9200/[indexName]/_search?size=500&from=0
#初始化滚动条
page=es.search(
索引='yourIndex',
doc_type='yourType',
滚动='2m',
搜索类型='扫描',
尺寸=1000,
正文={
#您的查询的主体
})
sid=页面[''滚动\u id']
滚动大小=页面['hits']['total']
#开始滚动
同时(滚动大小>0):
打印“滚动…”
page=es.scroll(scroll\u id=sid,scroll='2m')
#更新滚动ID
sid=页面[''滚动\u id']
#获取上次滚动中返回的结果数
滚动大小=len(第['hits']['hits']页)
打印“滚动大小:”+str(滚动大小)
#对获取的页面执行某些操作

使用java客户端

import static org.elasticsearch.index.query.QueryBuilders.*;
QueryBuilder qb=术语查询(“多”、“测试”);
SearchResponse scrollResp=client.prepareSearch(测试)
.addSort(FieldSortBuilder.DOC\u FIELD\u NAME,SortOrder.ASC)
.setScroll(新时间值(60000))
.setQuery(qb)
.setSize(100).execute().actionGet()//每个卷轴将返回每个碎片100次点击
//滚动直到没有点击返回
做{
for(SearchHit:scrollResp.getHits().getHits()){
//处理打击。。。
}
scrollResp=client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(新时间值(60000)).execute().actionGet();
}while(scrollResp.getHits().getHits().length!=0);//零点击标志着滚动和while循环的结束。

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

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

注:此尺寸中可定义的最大值为10000。对于任何超过一万的值,它希望您使用滚动功能,以最大限度地减少对性能的影响。

您可以使用size=0,这将返回所有文档 范例

尺寸=1000&pretty=1

您需要指定大小
  "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,
       ...
curl -XGET '{{IP/localhost}}:9200/{{Index name}}/{{type}}/_search?scroll=10m&pretty' -d '{
"query": {
"filtered": {
"query": {
"match_all": {}
}}'
    {
      "took": 1,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 1001,
        "max_score": 1,
        "hits": [
          {
curl -X GET 'localhost:9200/foo/_search?q=*&pretty' 
curl -XGET 'localhost:9200/index/type/_search?scroll=1m' -d '
{
   "size":10000,
   "query" : {
   "match_all" : {}
    }
}'
curl -XGET  'localhost:9200/_search/scroll'  -d'
{
   "scroll" : "1m", 
   "scroll_id" : "" 
}'
from elasticsearch.helpers import scan

doc_generator = scan(
    es_obj,
    query={"query": {"match_all": {}}},
    index="my-index",
)

# use the generator to iterate, dont try to make a list or you will get out of RAM
for doc in doc_generator:
    # use it somehow
curl -X GET "localhost:9200/_search?pretty=true" -H 'Content-Type: application/json' -d'
{
    "query": {
        "match_all": {}
    }
}
'
{
  "query": { "match_all": {} },
  "size": 1
}
GET my_index_name/_search
{
  "query": {
    "match_all": {}
  }
}
from elasticsearch_dsl import Search
from elasticsearch_dsl import connections

connections.create_connection(hosts=['localhost'])

s = Search(index="foo")
response = s.scan()

count = 0
for hit in response:
    # print(hit.to_dict())  # be careful, it will printout every hit in your index
    count += 1

print(count)
GET my_index_name/my_type_name/_search
{
   "query":{
      "match_all":{}
   },
   size : 20,
   from : 3
}
http://${HOST}:9200/${INDEX}/_search?pretty=true&q=*:*&scroll=10m&size=5000
http://${HOST}:9200/_cat/indices?v
curl localhost:9200/foo_index/_search?size=1000
curl 'localhost:9200/foo_index/_search?size=100&scroll=1m&pretty'
{
  "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADEWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ==",
  "took" : 0,
...
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/_search/scroll' -d '{
  "scroll": "1m",
  "scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADAWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ=="
}'
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/test/_search?scroll=1m&size=100' -d '{
  "slice": {
    "id": 0, 
    "max": 10 
  }
}'
GET /address/_search
 {
   "_source": ["streetaddress","city","state","postcode"],
   "size": 100,
   "query":{
   "match_all":{ }
    }   
 }