2012-09-05 1 views
5

elasticsearch 0.19.9로 작업하는 패싯이 있습니다.elasticsearch 패싯 수가 반환되었습니다.

{ 
    "query" : { 
     "match_all" : { } 
    }, 
    "facets" : { 
     "tag" : { 
      "terms" : { 
       "field" : "tag", 
       "all_terms" : true 
      } 
     } 
    } 

} 내가 알고있는 것처럼

, 이것은 나에게 모든 것을 제공한다 : 그러나 내가 할 수 있어야 문서에 따르면 카운트> 0

이 모든 측면을 반환하고 싶습니다 비록 카운트가 0이더라도 패싯을 채울 수 있습니다.

그러나 이것은 여전히 ​​상위 10 개 패싯을 카운트 단위로 반환합니다. 어떤 기본 크기입니다. 반환 된면의 수에 영향을 미치는 유일한 점은 실제로 "size" : N을 설정하는 것입니다. 여기서 N은 반환 될면의 수입니다.

이 값을 매우 높게 설정할 수는 있지만 해킹을 시도한 것 같습니다.

내가 뭘 잘못하고 있는지에 대한 아이디어가 있으십니까?

답변

4

아무런 잘못하지 않았습니다. 당신은 그것을 정확하게 알아 냈습니다! github에 open issue이라는 용어가있어서 Terms Stats facet과 유사합니다. 모든 용어를 다시 얻으려면 size = 0으로 설정할 수 있습니다. 지금 당장 당신은 높은 가치를 사용해야합니다. 다소 까다 롭습니다. 나는 동의합니다. 반면에 너무 많은 항목을 반환하지 않도록주의하십시오!

+1

의견을 보내 주셔서 감사합니다 ... 내가 듣고 싶지 않은 내용 이었지만. –

+0

일반적인 질문은 실제로 용어 패싯을 수행 한 후에 0보다 큰 수, 즉 count> 0 인 용어를 필터링하는 방법이라고 생각합니다. 패싯 용어는 카운트를 제공하지만 카운트도 필터링하려고합니다. –

3
{ 
    "query" : { 
     "match_all" : { } 
    }, 
    "facets" : { 
     "tag" : { 
      "terms" : { 
       "field" : "tag", 
       "size" : 2147483647, 
       "all_terms" : false 
      } 
     } 
    } 
} 

(가) "수 : 0"을 제거하는 유일한 방법은 거짓으로 "all_terms"를 넣어하는 것입니다, 당신의 Elasticsearch 인스턴스에 크기 번호가 높은 당신이 할 수있는 한 불가능 설정 (예 위입니다 PHP에서 정수가 가질 수있는 최대 부호 값).

가장 좋은 방법은 아니지만 지금까지 알려진 유일한 방법입니다. 패싯 필터가 현재 작동하지 않습니다 (Elasticsearch를 업데이트하고 개선하지 않는 한).

+1

너무 많은 용어가 없습니다. 이 접근 방식은 나를 위해 완벽하게 작동했습니다. 검색 결과는 충분히 빠릅니다. 감사! – anbiniyar