2015-11-30 29 views
0

Like當濾波器設置爲分面/聚合濾波器時,應該排除,所以我們不會得到一個結果。如何在ElasticSearch中標記和排除篩選器?

如果用戶選擇某個品牌,結果應該只包含所選品牌,但聚合應返回已存在的所有品牌過濾條件,以便用戶也可以選擇其他品牌。

我們如何在Elasticsearch中做到這一點?可以使用標籤訪問solr並排除過濾器

回答

0

使用post_filter過濾搜索結果,但仍顯示聚合中的所有數據。

Post Filter

的post_filter應用於搜索命中在 搜索請求的最末端,聚合已經計算了。它 目的是最好的例子來解釋:

curl -XGET localhost:9200/shirts/_search -d ' 
{ 
    "query": { 
    "filtered": { 
     "filter": { 
     { "term": { "brand": "gucci" }} 
     } 
    } 
    }, 
    "aggs": { 
    "colors": { 
     "terms": { "field": "color" }, 
    }, 
    "color_red": { 
     "filter": { 
     "term": { "color": "red" } 
     }, 
     "aggs": { 
     "models": { 
      "terms": { "field": "model" } 
     } 
     } 
    } 
    }, 
    "post_filter": { 
    "term": { "color": "red" }, 
    } 
} 
' 
+0

如何檢查是否用戶選擇兩種顏色?像「color_red」:我將如何創建另一個?使用或運算符。如果是,請給json –

+0

使用OR過濾器添加額外的過濾器 - https://www.elastic.co/guide/en/elasticsearch/reference/1.4/query-dsl-or-filter.html –

+0

我知道了。謝謝。 :) –