2016-06-27 6 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カテゴリを持っているので、巨大なネットワークトラフィックを作ります。私はすべての親と1つのレベルの子を取得したい

.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をshow.Myしたいカテゴリのみを取得できますか。同様

ルート猫 Firtsレベル セカンドレベル (しかし、バケットは、すべてのレベルの子を持つ)

答えて

0

ないデフォルトでは、検索結果が返される実際の集計に影響を与え、あなたは何を意味するか確認してください。もう1つの選択肢は、集約そのものにフィルターを使用することです。しかしこれはあなたの要求に依存しています。集計にフィルタを実装するためのドキュメントを確認します。

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

+0

私は私の質問Jettroを編集しました。カテゴリ集計を取得すると、すべてのレベルの子供を取得する必要はありません。 – eyildiz