如何从Elasticsearch获取过滤选项

时间:2018-10-15 21:37:20

标签: elasticsearch

我在Elasticsearch中有数据。我想在要显示在UI上的多个字段上生成过滤器选项。
我在elasticsearch中有衣服的数据,在elasticsearch中有属性"Brand", "Color", "Price"
我想从elasticsearch获取适用的品牌,颜色和价格范围列表。
另外,我希望根据过滤器的选择来修改列表,例如,如果用户在品牌中选择了"nike",则不应获取"nike"中不存在的颜色。

我的ES映射

{
    "mappings":{
        "products": {
            "properties": { 
              "title": { "type": "text"}, 
              "description": { "type": "text"}, 
              "productCode": { "type": "keyword"}, 
              "brand" : {"type":"keyword","fields": {"raw": {"type":  "text"}}}, 
              "color" : {"type":"keyword","fields": {"raw": {"type":  "text"}}}, 
              "category" : {"type":"keyword","fields": {"raw": {"type":  "text"}}}, 
              "price" : {"type":"double"}, 
              "imageLink" : {"type":"keyword"}
          }
        }
    }
}

我也愿意更改ES映射,因为我是从头开始构建它的。

1 个答案:

答案 0 :(得分:1)

您要查找的内容在ES中称为aggregations。我将从Terms Aggregations开始,这是一种存储桶聚合。

"brand"的聚合示例如下:

GET <index_name>/products/_search
{
    "aggs" : {
        "brands" : {
            "terms" : { "field" : "brand" }
        }
    }
}