2017-05-06 8 views
0

내 elasticsearch 데이터베이스에는 'myindex'(색인은 myindex_1, myindex_2 등)와 같은 단어로 시작하는 수백 개의 색인이 포함되어 있습니다. 이러한 모든 색인에는 동일한 'doc_type'이 포함됩니다 (예 : 'mydoctype').탄성 검색 : 색인의 와일드 카드 검색에서 하나의 문서 찾기

이 doc_type에는 여러 개의 문서가 있습니다. 다른 필드들 중에서 각 문서에는 고유 번호가있는 myid라는 id 필드가 있습니다.

나는 각 문서에서 가장 낮은 myid 번호를 가진 기준으로 각 색인에서 하나의 문서를 얻고 싶습니다.

나는이 작업을 수행하는 데 사용 :

curl -XGET 'http://<es_host>/myindex*/mydoctype/_search?_source_include=duration&from=0&size=10000&pretty' 

그러나 이것은 각 인덱스의 mydoctype에서 모든 문서의 큰 목록을 생성합니다.

그래서, 나는 SO 여기에 본 몇 가지 예에 따라이 작업을 수행하려고 :

curl -XGET 'http://<es_host>/myindex*/mydoctype/_search?_source_include=duration&from=0&size=10000&pretty' -d ' 
    { 
     "sort": [ 
      {"myid": "asc"} 
     ] 
    } 
' 

위의 단지를 정렬하고 만되는 크기에, 여전히 모든 문서를 나열합니다. 크기를 1로 변경하면 문서가 정확히 1 개만 반환됩니다.

나는 각 색인의 doctype에서 문서의 목록을 찾고 있는데, 여기에는 해당 문서가 해당 색인의 doctype에서 가장 낮은 myid 값을 갖습니다.

내가 사용할 수있는 몇 가지 쿼리가 있습니까? 개별적으로 각 색인을 반복하여 검색 한 다음 가장 낮은 myid로 문서를 가져 오려고했지만이 검색은 완료하는 데 오래 걸립니다.

답변

0

이 같은 가장 낮은 myid 값이 아니라 하나 개의 문서를 반환 top_hits를 사용하여 다음 _index 필드에 terms 집계를 할 수 있습니다 :

POST /myindex*/mydoctype/_search 
{ 
    "size": 0, 
    "aggs": { 
    "indexes": { 
     "terms": { 
     "field": "_index", 
     "size": 500 
     }, 
     "aggs": { 
     "lowest": { 
      "top_hits": { 
      "size": 1, 
      "_source": ["myid", "duration"], 
      "sort": { 
       "myid": "asc" 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

당신을 감사합니다! 이것은 내가 취할 수있는 것보다 훨씬 길다. 그러나 인덱스 수에 따라 몇 백 개를 예상했지만 10 개의 결과 만 반환합니다. 그게 왜 어떤 아이디어일까요? – bhairav

+0

'terms' 집계에'size' 매개 변수를 추가했습니다. 잘 보이도록 조절하십시오. – Val

+0

그 트릭을 했어 !! 정말 고맙습니다! – bhairav