elasticsearch,Sorting,elasticsearch" /> elasticsearch,Sorting,elasticsearch" />

Sorting 使用';前导零';有弹性

Sorting 使用';前导零';有弹性,sorting,elasticsearch,Sorting,elasticsearch,是否有一种方法可以根据以下项目的文本和数值而不是仅基于字符串来排序 ABC0001 BCA0001 ABC0003 ABC00002 目前我收到了这个订单 ABC00002 ABC0001 ABC0003 BCA0001 但我希望它是这样的: ABC0001 ABC00002 ABC0003 BCA0001 该字段的配置如下所示: 'type' => 'keyword', 'normalizer' => 'lowercase_normalizer', 我在文

是否有一种方法可以根据以下项目的文本和数值而不是仅基于字符串来排序

  • ABC0001
  • BCA0001
  • ABC0003
  • ABC00002
目前我收到了这个订单

  • ABC00002
  • ABC0001
  • ABC0003
  • BCA0001
但我希望它是这样的:

  • ABC0001
  • ABC00002
  • ABC0003
  • BCA0001
该字段的配置如下所示:

'type'       => 'keyword',
'normalizer' => 'lowercase_normalizer',

我在文章中没有看到任何关于它的内容

如果字符串中总是有三个字母与一个零填充数字连接在一起,您可以求助于。以下脚本将按您喜欢的方式排序:

POST test/_search
{
  "sort": {
    "_script": {
      "type": "string",
      "script": {
        "lang": "painless",
        "source": """
          def letters = doc['field'].value.substring(0, 3);
          def numbers = Integer.parseInt(doc['field'].value.substring(3));
          return letters + numbers;
        """
      },
      "order": "asc"
    }
  }
}

但是,由于脚本可能会根据数据量降低查询的性能,因此更好的方法是使用适当的分析器创建子字段,该分析器可以在索引时而不是在搜索时进行此分析。这将很容易做到。

它并不总是3个字符,但将其拆分为一个子字段将是一个好主意!我会把它标记为一个公认的答案,谢谢。太棒了,很高兴它有帮助!是的,您可以根据需要为任意多个字符派生此技术。不过,在索引时执行该计算仍然是一个更好的主意。