2017-10-10 3 views
0

안녕하세요, 내 웹 사이트에서 검색 창을 만들려고합니다. 나는 수천 건의 회사 기사를 가지고있다.탄성 검색 집계 및 필터

GET articles/_search 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "multi_match": { 
      "query": "assistant", 
      "fields": ["title"] 
      } 
     } 
     ] 
    } 
    }, 
    "size": 0, 
    "aggs": { 
    "by_company": { 
     "terms": { 
     "field": "company.keyword", 
     "size": 10 
     } 
    } 
    } 
} 

결과는 다음과 같습니다 :이 코드를 실행하면 이제

"aggregations": { 
"by_company": { 
    "doc_count_error_upper_bound": 5, 
    "sum_other_doc_count": 409, 
    "buckets": [ 
    { 
     "key": "University of Miami", 
     "doc_count": 6 
    }, 
    { 
     "key": "Brigham & Women's Hospital(BWH)", 
     "doc_count": 4 
    }, 

을 나는 그래서 난 쿼리를 다음 실행할 마이애미 대학의 필터 기사 싶어 :

GET indeed_psql/job/_search 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "multi_match": { 
      "query": "assistant", 
      "fields": ["title"] 
      } 
     } 
     ], 
     "filter": { 
     "term": { 
      "company.keyword": "University of Miami" 
     } 
     } 
    } 
    }, 
    "size": 0, 
    "aggs": { 
    "by_company": { 
     "terms": { 
     "field": "company.keyword", 
     "size": 10 
     } 
    } 
    } 
} 

하지만 지금은 결과 :

"aggregations": { 
    "by_company": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 0, 
     "buckets": [ 
     { 
      "key": "University of Miami", 
      "doc_count": 7 
     } 
     ] 
    } 

왜 갑자기 이전 집계에 있었을 때 그들 중 7 명은 6 명 이었습니까? 다른 대학 필터에서도 마찬가지입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까 ? 표준 tokenizer를 사용하지 않고 있으며 english_stemmer, english_stopwords, english_keywords를 사용하는 필터에서. 당신의 도움을 주셔서 감사합니다.

답변

1

첫 번째 쿼리 문서 개수가 잘못되었을 수 있습니다. 첫 번째 응답에서 "doc_count_error_upper_bound"는 5입니다. 즉, 반환 된 집계의 일부 용어가 쿼리 된 각 샤드의 최상위 결과로 나타나지 않았습니다. 문서 수는 상위 N 키에 대한 샤드를 쿼리하는 과정에서 "누락"되었을 수 있으므로 너무 높지 않고 항상 너무 낮습니다.

몇 개의 샤드가 있습니까?

 
6 UMiami // returned 
6 UMich // returned 
3 BWH // returned 
3 BYU 
2 MGH 
:

 
Shard 1  Shard 2  Shard 3 
3 BYU  3 UMiami 3 UMiami 
2 UMich  2 BWH  2 UMich 
2 MGH  2 UMich  1 BWH 
1 UMiami  1 MGH  1 BYU 

귀하의 각 파편에서 상위 3 개 조건을 결과하는 것은로 병합 :이 3 개 파편, 그리고 당신의 집계 크기가 3이고 경우 예를 들어, 문서의 배포는 다음과 같이이었다

상위 3 개 결과 만 반환됩니다. 거의 모든 키가 적게 계산됩니다.

Shard 1의 UMiami 문서는 깊이 3 이상이므로 고려하지 않을 것입니다. 그러나 UMiami 만보기 위해 필터링하면 연결된 모든 문서가 취소됩니다 각 샤드에서 정확한 카운트로 끝납니다.

shard_size 매개 변수를 사용하여 재생할 수 있습니다. 그러면 Elasticsearch가 각 샤드에 대해 조금 더 자세히 보일 정도로 대략적인 수가 계산됩니다. 그러나이 패싯에 대해 총 7 개의 문서가 있다고 가정하면 샤드 중 하나에서만 해당 문서가 하나만있을 가능성이 높습니다. 따라서 해당 문서의 모든 문서를 집계하지 않고 상위 집계에 표시하기가 어려울 수 있습니다.

카운트 근사 및 오류 유도 here - tldr에 대한 자세한 내용은 Elasticsearch에서 개별 샤드의 상위 집계를 기반으로 해당 패싯의 총 문서 수를 추측합니다.

+0

감사합니다. U는 오늘을 구했다 :) –