ElasticSearch对整个字段进行聚合

时间:2018-01-23 06:11:21

标签: elasticsearch

这是我的字段的映射:

{
  "product" : {
    "mappings" : {
      "product" : {
        "filters.brand" : {
          "full_name" : "filters.brand",
          "mapping" : {
            "brand" : {
              "type" : "text",
              "fielddata" : true
            }
          }
        }
      }
    }
  }
}

我正在尝试使用doc count来获得具有doc count的独特品牌:

curl -XGET 'http://localhost:9200/product/_search?pretty' -H 'Content-Type: application/json' -d'
{
    "aggs": {
        "domains": {
            "terms": {
                "field": "filters.brand",
                "missing": "N/A",
                "size": 10,
                "order": {
                    "_count": "desc"
                }
            }
        }
    }
}'

它工作正常,除了它是按字段标记返回计数,而不是整个字段。

例如,我有“Absolut Joy”品牌,它会将结果作为单独的代币返回。

如何获得整个字段的聚合?

ElasticSearch版本:5.3.1

谢谢

2 个答案:

答案 0 :(得分:1)

您可以将filters.brand的映射更新为

{
  "mapping": {
    "brand": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": 256
        }
      }
    }
  }
}

并更新聚合查询以包含"field": "filters.brand.keyword"

不建议使用fielddata: true作为文本。 请参阅:Before-enabling-field-data

用于不同目的的相同字段。请参阅:use-multi-fields

答案 1 :(得分:0)

解决方案是更改分析器和search_analyzer。

"analyzer": "keyword",
"search_analyzer": "keyword"