我希望从汽车中获得不同的make值,并且make值应按升序排列不区分大小写。我使用的是elasticsearch版本2.4.4
颜色和制作字段的映射
"color": {
"type": "string",
"fields": {
"keyword": {
"type": "string",
"index": "not_analyzed"
},
"lcsort": {
"type": "string",
"analyzer": "case_insensitive_sort"
}
}
},
"make": {
"type": "string",
"fields": {
"keyword": {
"type": "string",
"index": "not_analyzed"
},
"lcsort": {
"type": "string",
"analyzer": "case_insensitive_sort"
}
}
}
我在case_insensitive_sort分析器上的设置
"analysis": {
"analyzer": {
"case_insensitive_sort": {
"filter": [
"lowercase"
],
"tokenizer": "keyword"
}
}
}
查询1
{
"size" : 0,
"query" : {
"bool" : {
"must" : {
"match" : {
"color" : "red"
}
}
}
},
"aggs" : {
"distinct_makes" : {
"terms" : {
"size" : 20,
"field" : "make.keyword",
"order" : {
"_term" : "asc"
}
}
}
}
}
我从查询1获得的结果
"buckets": [
{
"key": "Audi",
"doc_count": 1
},
{
"key": "BMW",
"doc_count": 1
},
{
"key": "Ferrari",
"doc_count": 1
},
{
"key": "Honda",
"doc_count": 1
},
{
"key": "Hyundai",
"doc_count": 1
},
{
"key": "Lexus",
"doc_count": 1
},
{
"key": "acura",
"doc_count": 1
},
{
"key": "bentley",
"doc_count": 1
}
]
我将查询更改为使用make.lcsort字段
{
"size" : 0,
"query" : {
"bool" : {
"must" : {
"match" : {
"color" : "red"
}
}
}
},
"aggs" : {
"distinct_makes" : {
"terms" : {
"size" : 10000,
"field" : "make.lcsort",
"order" : {
"_term" : "asc"
}
}
}
}
}
我让所有桶排序正确,但所有键都变为小写
"buckets": [
{
"key": "acura",
"doc_count": 1
},
{
"key": "audi",
"doc_count": 1
},
{
"key": "bentley",
"doc_count": 1
},
{
"key": "bmw",
"doc_count": 1
},
{
"key": "ferrari",
"doc_count": 1
},
{
"key": "honda",
"doc_count": 1
},
{
"key": "hyundai",
"doc_count": 1
},
{
"key": "lexus",
"doc_count": 1
}
]
我的预期结果将是
"buckets": [
{
"key": "acura",
"doc_count": 1
},
{
"key": "Audi",
"doc_count": 1
},
{
"key": "bentley",
"doc_count": 1
},{
"key": "BMW",
"doc_count": 1
}
{
"key": "Ferrari",
"doc_count": 1
},
{
"key": "Honda",
"doc_count": 1
},
{
"key": "Hyundai",
"doc_count": 1
},
{
"key": "Lexus",
"doc_count": 1
}
]
术语聚合是否有可能返回索引数据的情况,并以案例激励的方式对它们进行排序?