wake-up-neo.com

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

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

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

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

422
John Livermore

나는 lucene 문법이 이렇게 지원된다고 생각한다.

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

크기는 기본적으로 10이므로 10 개 이상의 항목을 얻으려면 &size=BIGNUMBER가 필요할 수도 있습니다. (여기서 BIGNUMBER는 데이터 세트보다 크다고 생각되는 숫자와 같습니다)

하지만 검색 검색 유형을 사용하여 큰 결과 집합에 대해서는 elasticsearch documentation suggests 를 사용합니다.

예 :

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

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

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

scan_doc별로 정렬 된 일반 scroll 요청보다 이점을 제공하지 않습니다. 신축성있는 문서에 링크 (@ christophe-roussy가 보았습니다)

648
Steve Casey
http://127.0.0.1:9200/foo/_search/?size=1000&pretty=1
                                   ^

크기 param 에 주목하십시오. 기본값은 샤드 당 기본값 (10)에서 1000으로 증가합니다.

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

121
lfender6445

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와 UI 플러그인을 사용할 것을 제안합니다. http://mobz.github.io/elasticsearch-head/ 이것은 여러분이 만든 색인의 느낌을 더 잘 얻고 색인을 테스트하는 데 도움이 될 것입니다.

30
Prerak Diwan

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

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

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

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

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

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

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

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

결과 total는 문서에서 사용 가능한 레코드 수를 나타냅니다. 따라서 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 '

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

24
vjpandian

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

  # 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

Java 클라이언트 사용

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

17
Akira Sendoh

별칭에 대한 통계를 얻으려면 server:9200/_stats도 사용하십시오. 별칭 당 요소의 크기와 수와 같은 매우 유용한 정보를 제공하며 유용한 정보를 제공합니다.

10
TheEnglishMe

수천 개의 레코드를 가져 오려면 ... '스크롤'을 사용하는 것에 대한 올바른 답을 몇 사람이주었습니다 (참고 : 일부 사용자는 "search_type = scan"을 사용하도록 제안했습니다.)이 버전은 더 이상 사용되지 않으며 v5.0에서는 제거되었습니다. 너는 필요 없어)

'검색'검색어로 시작하지만 '스크롤'매개 변수를 지정합니다 (여기에서 1 분의 시간 제한을 사용하고 있습니다).

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

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

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

다음 명령을 실행해야 할 때 _scroll_id를 사용하는 것이 중요합니다.

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

그러나 주위에 scroll_id 전달 수동으로 수행 할 수 있도록 설계된 것이 아닙니다. 최선의 방법은 코드를 작성하여 수행하는 것입니다. 예 : Java :

    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를 사용하여 데이터를 추출합니다.

7
Somum

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

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

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

7
Aminah Nuraini

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

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

참고 :이 크기로 정의 할 수있는 최대 값은 10000입니다. 만 이상의 값은 성능에 미치는 영향을 최소화 할 수있는 스크롤 기능을 사용해야합니다.

6
akshay misra

Elasticsearch는 크기가 큰 숫자를 추가하는 경우 중요도 느려질 것입니다. 모든 문서를 가져 오는 데 사용하는 한 가지 방법은 스캔 및 스크롤 ID를 사용하는 것입니다.

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

6
WoodyDRN

http : // localhost : 9200/foo/_search/ ? 크기 = 1000 & pretty = 1

기본값은 10이므로 크기 쿼리 매개 변수를 지정해야합니다.

5
Edwin Ikechukwu

_count API를 사용하여 size 매개 변수의 값을 가져올 수 있습니다.

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

{count:X, ...}를 반환합니다. 값 'X'를 추출한 다음 실제 쿼리를 수행하십시오.

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

size param은 표시되는 히트를 기본값 (10)에서 500으로 증가시킵니다.

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

모든 데이터를 얻으려면 시작 단계를 단계별로 변경하십시오.

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

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
Anurag

Kibana DevTools에서 :

GET my_index_name/_search
{
  "query": {
    "match_all": {}
  }
}
2
belostoky
curl -X GET 'localhost:9200/foo/_search?q=*&pretty' 
2
Dhruv Sharma

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

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

크기 (1)을보고 싶은 결과의 수로 바꾸십시오!

2
christouandr7

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

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

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

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

2
Satyendra Sharma

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

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

탄성 검사 참조

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

이것은 당신이 원하는 것을 성취하기위한 쿼리입니다. (나는 쿼리를 더 잘 이해하는 데 도움이되므로 키 바나를 사용할 것을 제안합니다)

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

"match_all"쿼리를 사용해야하는 모든 레코드를 가져옵니다.

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

from은 (는) 건너 뛰기와 같으며 처음 세 레코드는 건너 뜁니다.

정확히 모든 레코드를 가져 오려면 키바나에서이 쿼리를 치고 "크기"와 함께 사용하면 결과의 "총"필드의 값을 사용하십시오.

0
niranjan harpale

모든 색인에서 모든 레코드를 반환하려면 다음을 수행 할 수 있습니다.

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
exceltior

@Akira Sendoh를 제외한 누구도 실제로 모든 문서를 얻는 방법에 답변하지 않았습니다. 하지만 그 솔루션조차도 내 ES 6.3 서비스 로그없이 작동하지 않습니다. 낮은 수준의 elasticsearch-py 라이브러리를 사용하여 저에게 도움이되는 유일한 방법은 scan helper를 사용하는 것입니다scroll() api를 사용합니다 :

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
chefarov

파이썬 패키지를 사용하는 간단한 해결책 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 를 참조하십시오.

0
asmaier

ElasticSearch가 반환하는 최대 결과는 크기를 제공하여 10000입니다.

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

그런 다음 결과를 가져오고 _scroll_id 값을 가져오고이 값을 scroll_id에 넣으려면 Scroll API를 사용해야합니다.

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