我想从汽车中获得不同的制造值,并且制造值应该不区分大小写地按升序排序。我使用的是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"
}
}
}
Query 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
}
]
术语聚合是否可以返回索引数据的大小写,并以大小写激励的方式对它们进行排序?