elasticsearch 검색엔진의 상용 방법 (4) 집합 검색aggs

1. 자주 사용하는 집합 검색 문장
뉴스 인덱스 아래의 모든 뉴스를 통계하는 발표 기구는 각각 어떤 것들이 있는지
GET news/_search
{
  "aggs": {
    "publish_org": {
      "terms": {
        "field": "publish_org.keyword",
        "size": 10
      }
    }
  },
  "size": 0
}

참고:
집합된 필드가 없을 때text 형식 필드
결과는 다음과 같습니다.
{
  "took" : 32,
  "timed_out" : false,
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "hits" : {
    "total" : 10000,
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "publish_org" : {
      "doc_count_error_upper_bound" : 1601,
      "sum_other_doc_count" : 173772,
      "buckets" : [
        {
          "key" : " ",
          "doc_count" : 97325
        },
        {
          "key" : " ",
          "doc_count" : 27339
        },
        {
          "key" : "FX168 ",
          "doc_count" : 26442
        },
        {
          "key" : " ",
          "doc_count" : 16988
        },
        {
          "key" : " ",
          "doc_count" : 14284
        },
        {
          "key" : " ",
          "doc_count" : 12371
        },
        {
          "key" : " ",
          "doc_count" : 6981
        },
        {
          "key" : " ",
          "doc_count" : 6249
        },
        {
          "key" : " ",
          "doc_count" : 6237
        },
        {
          "key" : " ",
          "doc_count" : 6129
        }
      ]
    }
  }
}

반환 필드 설명(비공식):
aggregations: 집합의 결과
    publish_org: 검색 시 사용자 정의 반환 결과 이름
buckets: 집합된 결과 집합, 결과 수는size와 동일
키: 집합 필드publish_org의 값
    count:publish_org 필드에 대응하는 정보수
    doc_count_error_upper_bound、sum_other_doc_count의 통계 결과는 정확하지 않아서 설명을 하지 않습니다.
 
2. 다중 집합
뉴스 인덱스 아래의 모든 뉴스의 발표 기구를 통계하고, 이 발표 기구가 발표한 최초의 뉴스로 되돌아간다
GET news/_search
{
  "aggs": {
    "publish_org": {
      "terms": {
        "field": "publish_org.keyword",
        "size": 10
      },
      "aggs": {
        "result": {
          "top_hits": {
            "sort": [
              {
                "publish_time": {
                  "order": "desc"
                }
              }
              ], 
            "size": 1
          }
        }
      }
    }
  },
  "size": 0
}

구조 설명을 읽어들입니다.
1 층aggs: 첫 번째 집합
    publish_org: 첫 번째 집합 결과 집합 이름 사용자 정의
terms: 통합 조회
2층aggs: 1차 집합 결과에서 다시 집합
result: 사용자 정의 2층 집합 결과 집합 이름
    top_hits: 두 번째 레이어 집합의hits 결과(top_hits는 부분 검색 기능을 지원합니다.sort,highlight,size 등)
sort: 정렬
내부 크기:top_hits 결과 반환 수량
외부 크기: 일반 검색 결과 수량
 
3. 검색된 모든 버킷 수량 조회
뉴스 인덱스 아래의 뉴스는 모두 몇 개의 발표 기구가 있는지 통계한다
GET news/_search
{
  "aggs": {
    "publish_org_count": {
      "cardinality": {
        "field": "publish_org.keyword",
        "precision_threshold": 40000
      }
    }
  },
  "size": 0
}

구조 설명을 읽어들입니다.
    publish_org_count: 집합 결과 집합 이름
cardinality: 조회 버킷 수량
    precision_threshold: 통계 정밀도
참고:
    precision_threshold는 서버 메모리를 소모하여 통계 정밀도를 바꾸는 것이므로 신중하게 사용하십시오.es 기본 버킷 수량이 3000인 것은 정확한 통계입니다. 즉precision_threshold=3000, 3000을 찾았을 때 통계의 수량은 모두 모호값이고 최대 40000의 정확한 통계를 지원합니다
결과는 다음과 같습니다.
{
  "took" : 6642,
  "timed_out" : false,
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "hits" : {
    "total" : 123143,
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "publish_org_count" : {
      "value" : 11083
    }
  }
}

 
4. 집합 페이지 조회 버킷
상기 조회한 11080개의 뉴스 발표 기구를 페이지별로 전시하다
방법 1:
첫 번째 단계:buckets의 총수를 조회합니다. 상기 (3)
두 번째 단계: 검색된 버킷 총수를 두 번째 검색의size 매개 변수로 삼는다. 즉,
GET news/_search
{
  "aggs": {
    "publish_org": {
      "terms": {
        "field": "publish_org.keyword",
        "size": 11083
      }
    }
  },
  "size": 0
}

세 번째 단계: 두 번째 단계는 모든 버킷을 조회한 다음에 자신이 원하는 페이지에 따라 코드 차원에서 수동으로 페이지 처리를 할 것이다
 
방법 2:
첫 번째 단계:buckets의 총수를 조회합니다. 상기 (3)
두 번째 단계: 수동으로 buckets를 n등분으로 나누어 페이지별 집합 조회를 실현한다
계산 방법은 다음과 같습니다.
1,cardinality를 사용하여 버킷을 얻는 총수는 11083
2. 페이지마다 표시되는 데이터의 크기를 결정=10
3, 페이지 수 계산publish_org_count/10 + 1 = 1109
4. 검색 문장을 결합하면 다음과 같다.
#  

GET news/_search
{
  "aggs": {
    "publish_org": {
      "terms": {
        "field": "publish_org.keyword",
        "include": {
          "partition": 0,
          "num_partitions": 1109
        },
        "size": 10
      }
    }
  },
  "size": 0
}

#  

GET news/_search
{
  "aggs": {
    "publish_org": {
      "terms": {
        "field": "publish_org.keyword",
        "include": {
          "partition": 1,
          "num_partitions": 1109
        },
        "size": 10
      }
    }
  },
  "size": 0
}

#  , partition 

구문 설명(비공식):
include: 컬렉션 검색 페이지 기준
partition: 현재 buckets (현재 페이지 수)
    num_partitions: 모든 버킷을 몇 개의 버킷으로 나눈다 (총 몇 페이지)
내층size: 모든 버킷에 포함된 버킷 수 (페이지당 몇 개의 데이터)

좋은 웹페이지 즐겨찾기