ElasticSearch没有按正确的顺序对文件名进行排序

问题描述

这是一个人为的例子,用以说明我的问题。我有一堆文件名,我想按字母顺序对它们进行排序,就像macOS在查找器窗口中所做的一样。

这些是我索引文件名的顺序,我希望它们能按顺序排列:

currentuser.email

这就是我在Kibana开发工具中所做的测试:

A Tribe Called Quest - Can I Kick It (1).mp3
a.png
Bcc 05.png
Birling Gap Cliffs.jpg
Durdle Door.jpg
f.png
Frost.jpg
p.png
Users order.mp4
z.png

我得到的结果是:

## sorting contrived example
# create the index with keyword filename for sorting
PUT /file-names
{
  "settings": {
    "number_of_shards": 1
  },"mappings": {
    "_doc" : {
      "properties": {
        "filename": { "type": "keyword" }
      }
    }
  }
}

# create bunch of documents
POST file-names/_doc/_bulk
{ "index":{} }
{ "filename":"A Tribe Called Quest - Can I Kick It (1).mp3" }
{ "index":{} }
{ "filename":"a.png" }
{ "index":{} }
{ "filename":"Bcc 05.png" }
{ "index":{} }
{ "filename":"Birling Gap Cliffs.jpg" }
{ "index":{} }
{ "filename":"Durdle Door.jpg" }
{ "index":{} }
{ "filename":"Frost.jpg" }
{ "index":{} }
{ "filename":"f.png" }
{ "index":{} }
{ "filename":"Users order.mp4" }
{ "index":{} }
{ "filename":"p.png" }
{ "index":{} }
{ "filename":"z.png" }

# query with sort - bugged
GET /file-names/_search
{
  "sort": {
    "filename": {
      "order": "asc"
    }
  }
}

哪些不是我期望的顺序。出于我无法理解的原因,您可以在“ Users order.mp4”下面看到“ a.png”。

任何帮助我们都可以按照我期望的顺序进行排序的人!

解决方法

正如@Alper所建议的那样,它已经是addressed

如果您出于某些原因需要坚持使用keyword映射,请按以下步骤进行script-sort

GET /file-names/_search
{
  "sort": {
    "_script": {
      "type": "string","script": {
        "lang": "painless","source": "doc['filename'].value.toLowerCase()"
      },"order": "desc"
    }
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...