这是我的字段的映射:
{
"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
谢谢
答案 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"