ElasticSearch方面:我该怎么做?

时间:2014-01-20 13:35:17

标签: lucene elasticsearch faceted-search

我有一个ElasticSearch索引,其中包含数百万个拥有超过一千个品牌的产品。

我必须使用哪些查询来获取索引中所有品牌的列表?

示例产品条目:

{
    _index: main
    _type: one
    _id: LA37dcdc7D70QygoV4KjfRU0hqUDhPs=
    _version: 4
    _score: 1
    _source: {
        pid: S2dcdcd528950_C243
        mid: 6540
        url: http://being.successfultogether.co.uk/
        price: 4
        currency: GBP
        brand: Reebok
        store: Matalan
    }

}

2 个答案:

答案 0 :(得分:2)

以下是针对文档中选定字段生成构面的示例 -

curl -XPUT <host>:9200/indices/type/_search?
{
  "query": {
    "match": {
      "store": "Matalan"
    }
  },
  "facets": {
    "brand": {
      "terms": {
        "field": "brand"
      }
    }
  }
}'

答案 1 :(得分:1)

我认为所有术语方面都会得到一个字段的每个术语:

POST /_all/_search
{
    "query" : {
        "match_all" : {  }
    },
    "facets" : {
        "tag" : {
            "terms" : {
                "field" : "stub",
                "all_terms" : true
            }
        }
    }
}

如下面的ES 1.0样式的术语聚合,具有非常高的大小计数可能会返回每个术语及其计数,它不是有效的,也不是肯定会得到它们。

您可以在此处阅读有关聚合/分面的大小和分片大小参数的更多信息:
Elasticsearch Doco 1.0

POST /_all/_search
{
    "aggs" : {
        "genders" : {
            "terms" : { 
                "field" : "stub", 
                "size":1000
            }
        }
    },
    "size":0
}

另外,有一些faceting插件可以将字段的每个术语作为列表获取,请参见此处: Approx Plugin