【问题标题】:ElasticSearch facet: how do I do this?ElasticSearch 方面:我该怎么做?
【发布时间】:2014-01-20 13:35:16
【问题描述】:

我有一个 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
    }

}

【问题讨论】:

    标签: lucene elasticsearch faceted-search


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      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
      }
      

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

      【讨论】:

        猜你喜欢
        • 2018-01-16
        • 2016-10-07
        • 2012-05-26
        • 1970-01-01
        • 1970-01-01
        • 2014-01-23
        • 2011-05-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多