Elasticsearch中的字符串意外排序(不区分大小写)

我有要在Elasticsearch中排序的控制台平台的列表。

这是“名称”字段的映射:

{

"name": {

"type": "multi_field",

"fields": {

"name": {

"type": "string",

"index": "analyzed"

},

"sort_name": {

"type": "string",

"index": "not_analyzed"

}

}

}

}

当我执行以下查询时

{

"query": {

"match_all": {}

},

"sort": [

{

"name.sort_name": { "order": "asc" }

}

],

"fields": ["name"]

}

我得到以下结果:

{

"took": 1,

"timed_out": false,

"_shards": {

"total": 3,

"successful": 3,

"failed": 0

},

"hits": {

"total": 17,

"max_score": null,

"hits": [

{

"_index": "platforms",

"_type": "platform",

"_id": "1393602489",

"_score": null,

"fields": {

"name": "GameCube"

},

"sort": [

"GameCube"

]

},

{

"_index": "platforms",

"_type": "platform",

"_id": "1393602490",

"_score": null,

"fields": {

"name": "Gameboy Advance"

},

"sort": [

"Gameboy Advance"

]

},

{

"_index": "platforms",

"_type": "platform",

"_id": "1393602498",

"_score": null,

"fields": {

"name": "Nintendo 3DS"

},

"sort": [

"Nintendo 3DS"

]

},

...remove for brevity ...

{

"_index": "platforms",

"_type": "platform",

"_id": "1393602493",

"_score": null,

"fields": {

"name": "Xbox 360"

},

"sort": [

"Xbox 360"

]

},

{

"_index": "platforms",

"_type": "platform",

"_id": "1393602502",

"_score": null,

"fields": {

"name": "Xbox One"

},

"sort": [

"Xbox One"

]

},

{

"_index": "platforms",

"_type": "platform",

"_id": "1393602497",

"_score": null,

"fields": {

"name": "iPhone/iPod"

},

"sort": [

"iPhone/iPod"

]

}

]

}

除了iPhone/iPod结果在末尾(而不是在GameBoy Advance之后)之外,所有内容均按预期进行排序-为什么/名称中的会对排序产生影响?

谢谢

回答:

好的,我发现原因与邮件无关/。ES将按大写字母和小写字母排序。

settings在索引创建的中添加了自定义分析器:

{

"analysis": {

"analyzer": {

"sortable": {

"tokenizer": "keyword",

"filter": [

"lowercase"

]

}

}

}

}

然后在字段映射中,我添加'analyzer': 'sortable'sort_name多字段。

以上是 Elasticsearch中的字符串意外排序(不区分大小写) 的全部内容, 来源链接: utcz.com/qa/409679.html

回到顶部