2016-06-27 2 views
0

각 문서에는 범주 트리가 있습니다. 마찬가지로탄성 검색 집계 대형 버킷

[{ 
name: "RootCat", 
parentId: 104319, 
id: 104319 
}, 
{ 
name: "FirstLevel", 
parentId: 104319, 
id: 104328 
}, 
{ 
name: "n Level", 
parentId: 104328, 
id: 107929 
}] 

내가 좋아하는 각 검색에 대한 트리를 갖고 싶어 문제 :

Root Cat 
    - First Level 
     --Second Level-1 
     --Second Level-2 

집계 모든 버킷을 마련. 그리고 나는 약 40000 범주를 가지고 있으므로 거대한 네트워크 트래픽을 발생시킵니다. 난 내가 모든 부모와 함께 한 수준의 아이를 얻고 싶은

.Filter(SearchConstants.Aggregation.Category, 
y => y.Aggregations(r => r.Filter("filteredAggs", 
cc => cc.Filter(GetPostFilters(searchQuery))             .Aggregations(ra => ra.Nested("cat", 
ty => ty.Path(rtw => rtw.CategoryList).Aggregations(
abc => abc.Terms("categoryId", t => t.Field(q => q.CategoryList.First().Id).Size(0) 

And here i get all category buckets.All level children

아래 필터 aggreagtion을하고 싶은데요하려는 경우에만 범주를 얻을 수있는 방법. 마찬가지로

루트 고양이 Firts 레벨 두번째 레벨 (단, 양동이는 모든 수준의 아이들이)

답변

0

확실하지 당신이 무슨 뜻인지, 기본적으로 검색 결과에 미치는 영향 반환되는 실제 집계. 또 다른 옵션은 집계 자체에서 필터를 사용하는 것입니다. 그러나 이것은 귀하의 요구 사항에 달려 있습니다. 집계에 필터를 구현하기위한 문서를 확인하십시오

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/search-aggregations-bucket-filter-aggregation.html

+0

내가 내 질문에 Jettro을 편집했다. 간단히 말해서 나는 카테고리 집단을 얻을 때 모든 레벨의 아이들을 얻고 싶지 않습니다. – eyildiz