在Elasticsearch中创建动态构面

时间:2013-05-02 14:49:29

标签: elasticsearch

我想为具有动态属性的嵌套类型动态创建构面。

假设这些文章在我的索引中,并且我正在搜索名称和品牌:

{
    name: iPhone 16GB
    brand: Apple
    type: Smartphone
    attributes: {
        Color: White

    }
}
{
    name: iPad
    brand: Apple
    type: Tablet
    attributes: {
        Color: Black
    }
}
{
    name: Cruzer USB 16GB
    brand: SanDisk
    type: USB-Stick
    attributes: {
        Color: Black
        Capacity: 16GB
        USB-Standard: USB 2.0
    }
}
{
    name: Cruzer USB 16GB
    brand: SanDisk
    type: USB-Stick
    attributes: {
        Color: Red
        Capacity: 16GB
        USB-Standard: USB 3.0
    }
}

现在,如果我正在搜索“Apple”,我希望搜索结果具有以下方面:

Brand:
    Apple 2
Type:
    Smartphone 1
    Tablet 1
Color:
    Black 1
    White 1

搜索“16GB”应包含以下方面:

Brand:
    Apple 1
    SanDisk 2
Type:
    Smartphone 1
    USB-Stick 2
Color:
    Black 1
    White 1
    Red 1
Capacity:
    16GB 2
USB-Standard: 
    USB 3.0 1
    USB 2.0 2

同样,每篇文章都可以有任意属性。

对于品牌和类型的分层搜索很容易,但我怎么能为attrubutes做呢?弹性搜索是否可以实现这一点?

我希望你能说出我的意思......

1 个答案:

答案 0 :(得分:0)

尝试使用以下

POST _search
{
   "query": {
      "query_string": {
         "query": "Apple"
      }
   },
   "facets": {
      "tags": {
         "terms": {
            "fields": ["name","brand","type","attributes.Color"]
         }
      }
   }
}