모든 레코드를 반환하는 Elasticsearch 쿼리


490

Elasticsearch에 작은 데이터베이스가 있으며 테스트 목적으로 모든 레코드를 가져오고 싶습니다. 양식의 URL을 사용하려고합니다 ...

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

누군가 당신이 이것을 달성하는 데 사용할 URL을 줄 수 있습니까?


1
여기서 "foo"는 모든 레코드를 표시하려는 색인의 이름입니다.
jonatan

답변:


744

나는 lucene 구문이 지원된다고 생각합니다.

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

크기는 기본적으로 10으로 설정되므로 &size=BIGNUMBER10 개 이상의 항목을 가져와야 할 수도 있습니다. (여기서 BIGNUMBER는 데이터 세트보다 큰 숫자라고 생각합니다)

그러나 elasticsearch 문서 스캔 검색 유형을 사용하여 큰 결과 세트를 제안 합니다.

EG :

curl -XGET 'localhost:9200/foo/_search?search_type=scan&scroll=10m&size=50' -d '
{
    "query" : {
        "match_all" : {}
    }
}'

위의 문서 링크에 따라 계속 요청하십시오.

편집 : scan2.1.0에서 더 이상 사용되지 않습니다.

scanscroll의해 정렬 된 일반 요청에 비해 어떠한 이점도 제공하지 않습니다 _doc. 탄력적 문서 링크 (@ christophe-roussy에 의해 발견)


6
감사. 이것은 내가 지금 필요한 것을 반환하는 최종 결과였습니다 ... localhost : 9200 / foo / _search? size = 50 & pretty = true & q = * : *
John Livermore

2
@Steve

1
귀하의 답변에 감사합니다 @Steve. 나는 그것이 새로운 질문에 대해 충분히 중요하다고 생각하지 않았습니다. 명시 적으로 언급되지 않았으므로 여기에서 확인을 요청하는 것으로 나타났습니다.
Churro

8
scan + scroll-requests를 사용해야합니다. size = BIGNUMBER를 사용하는 경우 Lucene은 해당 숫자의 점수에 메모리를 할당하므로 너무 크게 만들지 마십시오. :)
Alex Brasetvik 19시 33 분

4
스캔은 2.1.0에서 더 이상 사용되지 않습니다 : elastic.co/guide/en/elasticsearch/reference/current/…
Christophe Roussy

137
http://127.0.0.1:9200/foo/_search/?size=1000&pretty=1
                                   ^

size param을 확인 하면 적중이 기본 (10)에서 샤드 당 1000으로 증가합니다.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html


10
한 가지 명심해야 할 점은 (Elasticsearch 문서에서) : from + size는 index.max_result_window 인덱스 설정 (기본 값은 10,000)을 초과 할 수 없습니다.
user3078523

2
이것은 바로 user3078523이며, 모든 1000 리턴,이 방법의 한계가max_result_window
스텔리오스

1
최대 값을 가지고 있으며 (수천 개의 레코드가있는 경우) 최대 값을 향한 다소 고집스러운 접근 방식입니다. 대신 "스크롤"쿼리를 사용해야합니다.
Harry Wood

37

elasticsearch (ES)는 ES 클러스터 인덱스에서 데이터를 가져 오기위한 GET 또는 POST 요청을 모두 지원합니다.

우리가 GET을 할 때 :

http://localhost:9200/[your index name]/_search?size=[no of records you want]&q=*:*

우리가 POST를 할 때 :

http://localhost:9200/[your_index_name]/_search
{
  "size": [your value] //default 10
  "from": [your start index] //default 0
  "query":
   {
    "match_all": {}
   }
}   

elasticsearch http://mobz.github.io/elasticsearch-head/ 와 함께 UI 플러그인을 사용하는 것이 좋습니다 . 이렇게하면 인덱스를 더 잘 느끼고 인덱스를 테스트하는 데 도움이됩니다.


3
다른 사용자가 언급했듯이 : from+ sizeindex.max_result_window기본적으로 10,000으로 설정된 인덱스 설정을 초과 할 수 없습니다
stelios

이 접근 방식은 최대 값을 가지며 (수천 개의 레코드가있는 경우) 최대 값을 향한 다소 고집스러운 접근 방식입니다. 대신 "스크롤"쿼리를 사용해야합니다
Harry Wood

이상하게도 공식 문서 curl -XGET ... -d '{...}'un공식적인 혼합 스타일 요청입니다. 올바른 GET 및 POST 형식을 보여 주셔서 감사합니다.
Jesse Chisholm

28

참고 : 정답은 이전 버전의 Elasticsearch와 관련이 0.90있습니다. 그 이후 릴리스 된 버전에는 업데이트 된 구문이 있습니다. 찾고있는 최신 답변에보다 정확한 답변을 제공 할 수있는 다른 답변을 참조하십시오.

아래 쿼리는 반환하려는 NO_OF_RESULTS를 반환합니다.

curl -XGET 'localhost:9200/foo/_search?size=NO_OF_RESULTS' -d '
{
"query" : {
    "match_all" : {}
  }
}'

여기서 질문은 모든 레코드가 반환 되기를 원한다는 입니다. 따라서 자연스럽게 쿼리를 작성하기 전에 NO_OF_RESULTS 값을 알 수 없습니다 .

문서에 몇 개의 레코드가 있는지 어떻게 알 수 있습니까? 아래에 검색어를 입력하십시오.

curl -XGET 'localhost:9200/foo/_search' -d '

이것은 당신에게 아래와 같은 결과를 줄 것입니다

 {
hits" : {
  "total" :       2357,
  "hits" : [
    {
      ..................

결과 총계 는 문서에서 사용 가능한 레코드 수를 알려줍니다. 따라서 이것이 NO_OF RESULTS 의 가치를 아는 좋은 방법입니다

curl -XGET 'localhost:9200/_search' -d ' 

모든 지수에서 모든 유형 검색

curl -XGET 'localhost:9200/foo/_search' -d '

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 '

모든 색인에서 사용자 및 트윗 검색 유형


9
기본적으로 ES는 크기 매개 변수가 기본 쿼리에 포함되어 있지 않으면 10 개의 결과를 반환합니다.
lfender6445

이전 응답은 3 살이었습니다. 현재 업데이트로 업데이트했습니다.
vjpandian

19

이것은 파이썬 클라이언트를 사용하여 찾은 최고의 솔루션입니다

  # Initialize the scroll
  page = es.search(
  index = 'yourIndex',
  doc_type = 'yourType',
  scroll = '2m',
  search_type = 'scan',
  size = 1000,
  body = {
    # Your query's body
    })
  sid = page['_scroll_id']
  scroll_size = page['hits']['total']

  # Start scrolling
  while (scroll_size > 0):
    print "Scrolling..."
    page = es.scroll(scroll_id = sid, scroll = '2m')
    # Update the scroll ID
    sid = page['_scroll_id']
    # Get the number of results that we returned in the last scroll
    scroll_size = len(page['hits']['hits'])
    print "scroll size: " + str(scroll_size)
    # Do something with the obtained page

https://gist.github.com/drorata/146ce50807d16fd4a6aa

자바 클라이언트 사용

import static org.elasticsearch.index.query.QueryBuilders.*;

QueryBuilder qb = termQuery("multi", "test");

SearchResponse scrollResp = client.prepareSearch(test)
        .addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC)
        .setScroll(new TimeValue(60000))
        .setQuery(qb)
        .setSize(100).execute().actionGet(); //100 hits per shard will be returned for each scroll
//Scroll until no hits are returned
do {
    for (SearchHit hit : scrollResp.getHits().getHits()) {
        //Handle the hit...
    }

    scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
} while(scrollResp.getHits().getHits().length != 0); // Zero hits mark the end of the scroll and the while loop.

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-scrolling.html


고마워 마크, 바로 내가 찾던 것입니다! 필자의 경우 (ELK 6.2.1, python 3) search_type 인수가 유효하지 않고 ELK 6.0 이후로 document_type이 더 이상 필요하지 않습니다.
Christoph Schranz

완벽한 솔루션! 감사. 나는 사용 elasticsearch_dsl==5.4.0하고 있었고 없이 작동합니다 search_type = 'scan',.
Usman Maqbool

ES 6.3. 이 예제는 Elasticsearch 서비스를 중단시키고 size=100005 ~ 7 회 반복 사이 에을 사용하여 110k 문서를 스크롤하려고합니다 . 와 status=127, main ERROR Null object returned for RollingFile in Appenders, main ERROR Unable to locate appender "rolling" for logger config "root"아니오에 로그인/var/log/elasticsearch/elasticsearch.log
스텔리오스

기록을 위해, 파이썬 클라이언트 scan는 후드 아래에서 스크롤을 수행하는 도우미를 구현합니다 ( 리트 버전 5.xx부터)
MCMZL

search_type = 'scan'더 이상 사용되지 않습니다. 이전 문서에 잘 묻혀있는 몇 가지 흥미로운 차이점이 있지만 비슷한 코드가 없으면 작동합니다. elastic.co/guide/en/elasticsearch/reference/1.4/… 특히, search_type = scan을 사용하지 않기 위해 마이그레이션 할 때 첫 번째 '검색'쿼리는 처리 할 첫 번째 결과 배치와 함께 제공됩니다.
Harry Wood

12

크기로 큰 숫자를 추가하면 Elasticsearch가 상당히 느려집니다. 모든 문서를 가져 오는 데 사용하는 한 가지 방법은 스캔 및 스크롤 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": {}
    }
}

이 결과에는 다음 100 청크를 얻기 위해 쿼리 해야하는 _scroll_id가 포함됩니다.

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

1
이 답변에는 더 많은 업데이트가 필요합니다. search_type=scan더 이상 사용되지 않습니다. 따라서 제거해야하지만 동작이 약간 변경되었습니다. 첫 번째 데이터 배치는 초기 검색 호출에서 돌아옵니다. 귀하가 제공하는 링크는 올바른 방법을 보여줍니다.
Harry Wood

1
내 의견은 실제로 크기가 훨씬 느리기 때문에 크기로 숫자를 추가 할 수는 없다는 사실에 주목했습니다. 그래서 코드 예제를 제거하고 사람들이 링크를 따라 올바른 코드를 얻을 수 있습니다.
WoodyDRN

1
@WoodyDRN 답변에 코드를 작성하는 것이 좋습니다 (오래된 경우에도). 링크가 죽어도 여전히 사용할 수 있습니다.
22

11

server:9200/_stats또한 별 명당 요소의 크기 및 수와 같이 모든 별명에 대한 통계를 가져 오는 데 사용 하면 매우 유용하고 유용한 정보를 제공합니다.


2
그러나 내가 기억하는 것으로부터 ES는 요청 당 16000 개의 데이터 만 가져올 수 있습니다. 따라서 데이터가 16000 이상이면이 솔루션으로는 충분하지 않습니다.
Aminah Nuraini

10

수천 개의 레코드를 가져 오려면 몇 명의 사람들이 '스크롤'을 사용하는 정답을주었습니다 (참고 : 일부 사람들은 "search_type = scan"을 사용하도록 제안했습니다. 이는 더 이상 사용되지 않으며 v5.0에서는 제거되었습니다. 당신은 필요하지 않습니다)

'검색'쿼리로 시작하지만 '스크롤'매개 변수를 지정하십시오 (여기서는 1 분 시간 초과를 사용하고 있습니다).

curl -XGET 'http://ip1:9200/myindex/_search?scroll=1m' -d '
{
    "query": {
            "match_all" : {}
    }
}
'

여기에는 첫 번째 조회 일괄 처리가 포함됩니다. 그러나 우리는 여기서 끝나지 않습니다. 위 curl 명령의 출력은 다음과 같습니다.

{ "_scroll_id", 5 "실패": 109, "TIMED_OUT": 거짓, "_ 파편": { "총"5 "성공"을 "c2Nhbjs1OzUyNjE6NU4tU3BrWi1UWkNIWVNBZW43bXV3Zzs1Mzc3OkhUQ0g3VGllU2FhemJVNlM5d2t0alE7NTI2Mjo1Ti1TcGtaLVRaQ0hZU0FlbjdtdXdnOzUzNzg6SFRDSDdUaWVTYWF6YlU2Uzl3a3RqUTs1MjYzOjVOLVNwa1otVFpDSFlTQWVuN211d2c7MTt0b3RhbF9oaXRzOjIyNjAxMzU3Ow는 ==", "했다"0}, "히트" : { "total": 22601357, "max_score": 0.0, "hits": []}}

다음에 다음 명령을 실행해야하므로 _scroll_id를 편리하게 사용해야합니다.

    curl -XGET  'localhost:9200/_search/scroll'  -d'
    {
        "scroll" : "1m", 
        "scroll_id" : "c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1" 
    }
    '

그러나 scroll_id를 전달하는 것은 수동으로 수행하도록 설계된 것이 아닙니다. 최선의 방법은 코드를 작성하는 것입니다. 예를 들어 자바에서 :

    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();

이제 마지막 명령에서 LOOP는 SearchResponse를 사용하여 데이터를 추출합니다.


6

단순한! 당신은 사용할 수 있습니다 sizefrom매개 변수!

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

from모든 데이터를 얻을 때까지 점진적으로 변경합니다 .


4
데이터에 많은 문서가 포함 된 경우이 방법을 사용하지 마십시오 ... "다음 페이지"로 갈 때마다 Elastic이 느리고 느려집니다! SearchAfter를 대신 사용하십시오
Joshlo

3
또한 전체 데이터 크기가 10,000 이상인 경우이 솔루션이 작동하지 않습니다. size = 1000 & from = 10001 옵션이 실패합니다.
iclman

2
실제로 실패합니다. 매개 변수 from+ size는 index.max_result_window 인덱스 설정을 초과 할 수 없습니다. 기본값은 10,000입니다.
stelios

1
데이터에 수천 개의 문서가 포함 된 경우 정답은 '스크롤'쿼리를 사용하는 것입니다.
Harry Wood

fromand size-approach를 사용하면 Deep Pagination 문제가 발생합니다. scroll API를 사용하여 모든 문서를 덤프하십시오.
다니엘 슈나 이터

5

크기를 조정하는 가장 좋은 방법 은 URL 앞에 size = number 를 사용하는 것 입니다.

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

참고 :이 크기로 정의 할 수있는 최대 값은 10000입니다. 10,000보다 큰 값의 경우 성능에 영향을 줄 가능성을 최소화하는 스크롤 기능을 사용해야합니다.


어떤 버전부터 최대 크기가 발생합니까?
WoodyDRN

그것은 어느 시점까지는 "최상의"방법 일지 모르지만 실제로는 약간의 노디입니다. 수천 개의 레코드가있는 경우 가장 좋은 방법은 "스크롤"쿼리입니다.
Harry Wood

from 및 size-approach를 사용하면 Deep Pagination 문제가 발생합니다. scroll API를 사용하여 모든 문서를 덤프하십시오.
다니엘 슈나 이터

5

_countAPI를 사용 하여 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


4

size param은 적중을 기본값 (10)에서 500으로 증가시킵니다.

http : // localhost : 9200 / [indexName] / _search? pretty = true & size = 500 & q = * : *

변경 에서 모든 데이터를 얻기 위해 단계별로.

http : // localhost : 9200 / [indexName] / _search? size = 500 & from = 0

3

Elasticsearch 6.x의 경우

의뢰: GET /foo/_search?pretty=true

응답 : 조회수-> 합계에서 문서 수를 제공하십시오.

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

3

작은 데이터 세트 인 경우 (예 : 1K 레코드) 간단히 지정하면됩니다 size.

curl localhost:9200/foo_index/_search?size=1000

일치하는 모든 쿼리 는 암시의로, 필요하지 않습니다.

1M 레코드와 같은 중간 크기의 데이터 세트가있는 경우 로드 할 메모리가 충분하지 않을 수 있으므로 스크롤 이 필요합니다 .

스크롤은 DB의 커서와 같습니다. Elasticsearch에서는 중단 한 위치를 기억하고 인덱스의 동일한 뷰를 유지합니다 (즉, 검색자가 새로 고침 을 수행하지 못하게하고 세그먼트가 병합되지 않도록합니다 ).

API 측면에서 첫 번째 요청에 스크롤 매개 변수를 추가해야합니다.

curl 'localhost:9200/foo_index/_search?size=100&scroll=1m&pretty'

첫 페이지와 스크롤 ID를 다시 얻습니다.

{
  "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADEWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ==",
  "took" : 0,
...

기억 이 돌아 스크롤 ID 및 타임 아웃 모두 다음 페이지에 유효합니다 . 여기서 가장 일반적인 실수 scroll는 한 페이지 (예 : 100 개 레코드) 대신 전체 데이터 세트 (예 : 1M 레코드)를 처리하기 위해 매우 큰 시간 초과 (값 ) 를 지정하는 것입니다.

다음 페이지를 얻으려면 마지막 스크롤 ID와 다음 페이지를 가져올 때까지 지속되어야하는 시간 초과를 입력하십시오.

curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/_search/scroll' -d '{
  "scroll": "1m",
  "scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADAWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ=="
}'

내보낼 품목이 많으면 (예 : 1B 문서) 병렬 처리를 원할 것입니다. 이 작업은 슬라이스 스크롤을 통해 수행 할 수 있습니다 . 10 개의 스레드로 내보내려고한다고 가정하십시오. 첫 번째 스레드는 다음과 같은 요청을 발행합니다.

curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/test/_search?scroll=1m&size=100' -d '{
  "slice": {
    "id": 0, 
    "max": 10 
  }
}'

일반 스크롤 요청과 마찬가지로 첫 페이지와 스크롤 ID를 다시 얻습니다. 데이터의 1/10을 얻는다는 점을 제외하고는 일반 스크롤과 똑같이 소비합니다.

다른 스레드는 id1, 2, 3 ...을 제외하고 동일하게 수행됩니다 .



2

기본적으로 Elasticsearch는 10 개의 레코드를 반환하므로 크기를 명시 적으로 제공해야합니다.

원하는 레코드 수를 얻기 위해 요청으로 크기를 추가하십시오.

http : // {host} : 9200 / {index_name} / _search? pretty = true & size = (레코드 수)

참고 : 최대 페이지 크기는 index.max_result_window 인덱스 설정 (기본 값은 10,000)을 초과 할 수 없습니다.



2

python 패키지 elasticsearch-dsl을 사용하는 간단한 솔루션 :

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)

https://elasticsearch-dsl.readthedocs.io/en/latest/api.html#elasticsearch_dsl.Search.scan참조하십시오 .


1

elasticSearch로 반환되는 최대 결과는 크기를 제공하여 10000입니다.

curl -XGET 'localhost:9200/index/type/_search?scroll=1m' -d '
{
   "size":10000,
   "query" : {
   "match_all" : {}
    }
}'

그런 다음 결과를 가져 오기 위해 Scroll API를 사용해야하고 _scroll_id 값을 가져 와서이 값을 scroll_id에 넣어야합니다

curl -XGET  'localhost:9200/_search/scroll'  -d'
{
   "scroll" : "1m", 
   "scroll_id" : "" 
}'

스크롤 API는 첫 번째 요청부터 시작해야합니다.
다니엘 슈나 이터

1

공식 문서는이 질문에 대한 답변을 제공합니다! 여기서 찾을 수 있습니다 .

{
  "query": { "match_all": {} },
  "size": 1
}

크기 (1)을 원하는 결과 수로 바꾸십시오!


이 질문의 저자는 사전 정의 된 양의 결과가 아니라 '모든'결과를 요구했습니다. 문서에 대한 링크를 게시하는 것이 도움이되지만 문서는이를 달성하는 방법을 설명하지 않으며 답변도하지 않습니다.
Maarten00

from 및 size-approach를 사용하면 Deep Pagination 문제가 발생합니다. scroll API를 사용하여 모든 문서를 덤프하십시오.
다니엘 슈나 이터

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,
       ...

0
curl -XGET '{{IP/localhost}}:9200/{{Index name}}/{{type}}/_search?scroll=10m&pretty' -d '{
"query": {
"filtered": {
"query": {
"match_all": {}
}}'

이 코드 스 니펫은 문제를 해결할 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자에게 질문에 대한 답변을 제공하고 있으며 해당 사람들이 귀하의 코드 제안 이유를 모를 수도 있습니다.
Stamos

0

@Akira Sendoh를 제외하고는 실제로 모든 문서를 얻는 방법에 대답하지 않았습니다. 그러나 그 솔루션조차도 로그없이 ES 6.3 서비스를 중단 시킵니다. 저수준 elasticsearch-py라이브러리를 사용하여 나를 위해 일한 유일한 것은 api 를 사용하는 스캔 도우미 를 사용하는 것입니다 scroll().

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

그러나 요즘 더 깔끔한 방법 elasticsearch-dsl은 라이브러리를 통하는 것 같습니다 . 예를 들어 http://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#hits


0

여전히 누군가가 유스 케이스에 대해 Elasticsearch에서 검색 할 모든 데이터를 찾고 있다면 여기에 내가 한 일이 있습니다. 또한 모든 데이터는 모든 인덱스 및 모든 문서 유형을 의미합니다. Elasticsearch 6.3을 사용하고 있습니다.

curl -X GET "localhost:9200/_search?pretty=true" -H 'Content-Type: application/json' -d'
{
    "query": {
        "match_all": {}
    }
}
'

Elasticsearch 참조


0

이것은 원하는 것을 달성하기위한 쿼리입니다 (질의를 더 잘 이해하는 데 도움이되므로 Kibana를 사용하는 것이 좋습니다)

GET my_index_name/my_type_name/_search
{
   "query":{
      "match_all":{}
   },
   size : 20,
   from : 3
}

모든 레코드를 얻으려면 "match_all"쿼리를 사용해야합니다.

size는 가져올 레코드 수 (종류 제한)입니다. 기본적으로 ES는 10 개의 레코드 만 반환합니다.

from은 건너 뛰기와 같습니다. 처음 3 개의 레코드를 건너 뜁니다.

정확히 모든 레코드를 가져 오려면 Kibana에서이 쿼리에 도달 한 후 결과에서 "total"필드의 값을 사용하고 "size"와 함께 사용하십시오.


이 쿼리의 제한 사항은 size + from이 "index.max_result_window"보다 작거나 같아야한다는 것입니다. 많은 수의 문서 (기본적으로 10000+)에는이 쿼리가 적용되지 않습니다.
KarelHusa

0

Elasticsearch 7.5.1 사용

http://${HOST}:9200/${INDEX}/_search?pretty=true&q=*:*&scroll=10m&size=5000

& size = $ {number}로 배열의 크기를 지정할 수도있는 경우

색인을 모르는 경우

http://${HOST}:9200/_cat/indices?v

0

kibana console 및 my_index를 색인으로 사용하여 다음을 검색 할 수 있습니다. 색인에서 색인의 4 개 필드 만 리턴하도록 요청하면 색인에 의해 리턴 될 문서 수를 표시하기 위해 크기를 추가 할 수도 있습니다. ES 7.6부터는 필터보다 _source를 사용해야 응답 속도가 더 빠릅니다.

GET /address/_search
 {
   "_source": ["streetaddress","city","state","postcode"],
   "size": 100,
   "query":{
   "match_all":{ }
    }   
 }

-5

size = 0을 사용하면 모든 문서 예제를 반환합니다.

curl -XGET 'localhost:9200/index/type/_search' -d '
{
   size:0,
   "query" : {
   "match_all" : {}
    }
}'

1
이것은 누적 된 정보를 리턴하지만 적중 자체는 아닙니다.
user732456
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.