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

标签 elasticsearch elastic-stack elasticsearch-6

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

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
这就是我在Kibana开发工具中所做的测试:
## 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"
    }
  }
}
我得到的结果是:
    "hits" : [
      {
        "_index" : "file-names",..."_score" : null,
        "_source" : {
          "filename" : "A Tribe Called Quest - Can I Kick It (1).mp3"
        },
        "sort" : [
          "A Tribe Called Quest - Can I Kick It (1).mp3"
        ]
      },
      {
        ...
        "_source" : {
          "filename" : "Bcc 05.png"
        },
        "sort" : [
          "Bcc 05.png"
        ]
      },
      {
        ...
        "_source" : {
          "filename" : "Birling Gap Cliffs.jpg"
        },
        "sort" : [
          "Birling Gap Cliffs.jpg"
        ]
      },
      {
        ...
        "_source" : {
          "filename" : "Durdle Door.jpg"
        },
        "sort" : [
          "Durdle Door.jpg"
        ]
      },
      {
        ...
        "_source" : {
          "filename" : "Frost.jpg"
        },
        "sort" : [
          "Frost.jpg"
        ]
      },
      {
        ...
        "_source" : {
          "filename" : "Users order.mp4"
        },
        "sort" : [
          "Users order.mp4"
        ]
      },
      {
        ...
        "_source" : {
          "filename" : "a.png"
        },
        "sort" : [
          "a.png"
        ]
      },
      {
        ...
        "_source" : {
          "filename" : "f.png"
        },
        "sort" : [
          "f.png"
        ]
      },
      {
        ...
        "_source" : {
          "filename" : "p.png"
        },
        "sort" : [
          "p.png"
        ]
      },
      {
        ...
        "_source" : {
          "filename" : "z.png"
        },
        "sort" : [
          "z.png"
        ]
      }
    ]
哪些不是我期望的顺序。由于我无法理解的原因,您可以在“用户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"
    }
  }
}

关于elasticsearch - ElasticSearch没有按正确的顺序对文件名进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63379871/

相关文章:

java - 导入org.elasticsearch.transport.client无法解析

elasticsearch - 弹性堆栈-无法运行logstash

elasticsearch - 嵌套关键字字段上的Elasticsearch范围查询

elasticsearch - Elasticsearch流水线搜索?

elasticsearch - 如何获得按类型分隔的聚合?

ruby-on-rails - 多个 Elasticsearch 索引

php - 在symfony2项目中使用elasticsearch进行范围过滤查询

java - Elasticsearch 无法使用 Java API 查询获取超过 10 个文档

java - 安装摄取附件插件错误

elasticsearch - 测试Elasticsearch自定义分析器-管道分隔关键字