如何在ElasticSearch中标记和排除过滤器?

时间:2015-11-30 13:29:33

标签: php elasticsearch solr lucene bigdata

喜欢当为分面/聚合过滤器设置过滤器时,应该将其排除,因此我们不会得到一个结果。

如果用户选择某个品牌,结果应仅包含所选品牌,但聚合应返回已存在的所有品牌过滤器,以便用户也可以选择其他品牌。

我们如何在Elasticsearch中做到这一点?可以使用标记和排除过滤器

在solr中访问相同内容

1 个答案:

答案 0 :(得分: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" },
  }
}
'