gpt4 book ai didi

ElasticSearch:比较带点的版本字符串

转载 作者:行者123 更新时间:2023-11-29 02:50:13 25 4
gpt4 key购买 nike

我正在寻找一种方法将带点的版本保存为弹性字符串(例如“1.2.23”),然后在此字段上使用范围查询。例如

{
"query": {
"range": {
"version": {"gte": "1.2.3", "lt": "1.3"}
}
}
}

我只有 3 个组件(主要、次要、构建)。我需要能够确定

  • 1.20.3 > 1.2.3
  • 1.02.4 > 1.2.3
  • 1.3 > 1.2.3

我想到了以下方法:

  1. 用零填充(例如“1.2.3”->“000001.000002.000003”)。这假设我知道每个组件的最大长度
  2. 分成 3 个不同的整数字段(即“主要”、“次要”、“构建”)。为此编写查询似乎很痛苦,但我很乐意为此提出建议。
  3. 也许是某种自定义分析器?我看到了这个:Elasticsearch analysis plugin for natural sort这可能是一个好的开始。

还有其他想法或建议吗?

最佳答案

如果您在索引代码中有一定的自由度,可以将这些语义版本转换为其他内容,我建议将每个版本转换为一个唯一的整数,然后很容易将这些数字与单个 range查询。

算法很简单:

  1. 您将版本拆分为点:1.2.34 => 1234<
  2. 将主版本乘以 1000000:1 => 1000000
  3. 将次要版本乘以 1000:2 => 2000
  4. 您将所有三个数字相加:1000000 + 2000 + 34 => 1002034
  5. 您将生成的数字存储到您的 ES 文档中,并使用它来比较 range 查询中的版本

关于ElasticSearch:比较带点的版本字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37763867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com