强制 Artifactory 在搜索时使用数值比较?
Force Artifactory to use numerical comparison when searching?
我正在尝试查找 RPM 包的最新(或最早,取决于比较运算符)版本(RPM 位很重要)。我正在使用类似于此的 AQL 查询:
items.find(
{ "$and" : [
{ "@rpm.metadata.name": { "$eq": "awesome_package"}},
{ "@rpm.metadata.version": { "$gte": "19.300.0.58"}} ]
})
.include("@rpm.metadata.version")
.sort( { "$asc": [ "name" ]})
正如 Artifactory KnowledgeBase 已经回答的那样,it's impossible to sort on properties,所以我必须使用 属性 而不是仅对 @rpm.metadata.version
进行排序并使用 .limit(1)
获得第一个最佳结果find
子句中的条件。
虽然 Artifactory 的内置比较似乎是纯粹的字典顺序,但对于上面的查询,我得到以下结果:
{
"results" : [ {
"repo" : "yum-private-local",
"path" : "some/path",
"name" : "awesome_package-19.300.0.9-1.noarch.rpm",
"properties" : [ {
"key" : "rpm.metadata.version",
"value" : "19.300.0.9"
} ]
},{
"repo" : "yum-private-local",
"path" : "some/path",
"name" : "awesome_package-19.300.0.58-0.noarch.rpm",
"properties" : [ {
"key" : "rpm.metadata.version",
"value" : "19.300.0.58"
} ]
},{
"repo" : "yum-private-local",
"path" : "some/path",
"name" : "awesome_package-19.300.0.59-0.noarch.rpm",
"properties" : [ {
"key" : "rpm.metadata.version",
"value" : "19.300.0.59"
} ]
} ],
"range" : {
"start_pos" : 0,
"end_pos" : 3,
"total" : 3
}
}
此结果包含版本 19.300.0.9,according to RPM spec 比我正在搜索的版本 (>= 19.300.0.58) 旧,不应包含在结果中,但 Artifactory 找到了它尽管如此,很可能是因为它的搜索比较是字典顺序的。
还要注意结果的排序,确实似乎使用了数字排序(版本“19.300.0.9”在“19.300.0.58”和“19.300.0.59”之前).
问题: 是否可以强制 Artifactory 在搜索条件中使用数值 (SemVer) 比较?如果不是,有没有其他方法可以从结果列表中排除不相关的版本?
虽然不符合要求,但如果由创建的字段完成而不是名称排序也会有帮助。
created:
我正在尝试查找 RPM 包的最新(或最早,取决于比较运算符)版本(RPM 位很重要)。我正在使用类似于此的 AQL 查询:
items.find(
{ "$and" : [
{ "@rpm.metadata.name": { "$eq": "awesome_package"}},
{ "@rpm.metadata.version": { "$gte": "19.300.0.58"}} ]
})
.include("@rpm.metadata.version")
.sort( { "$asc": [ "name" ]})
正如 Artifactory KnowledgeBase 已经回答的那样,it's impossible to sort on properties,所以我必须使用 属性 而不是仅对 @rpm.metadata.version
进行排序并使用 .limit(1)
获得第一个最佳结果find
子句中的条件。
虽然 Artifactory 的内置比较似乎是纯粹的字典顺序,但对于上面的查询,我得到以下结果:
{
"results" : [ {
"repo" : "yum-private-local",
"path" : "some/path",
"name" : "awesome_package-19.300.0.9-1.noarch.rpm",
"properties" : [ {
"key" : "rpm.metadata.version",
"value" : "19.300.0.9"
} ]
},{
"repo" : "yum-private-local",
"path" : "some/path",
"name" : "awesome_package-19.300.0.58-0.noarch.rpm",
"properties" : [ {
"key" : "rpm.metadata.version",
"value" : "19.300.0.58"
} ]
},{
"repo" : "yum-private-local",
"path" : "some/path",
"name" : "awesome_package-19.300.0.59-0.noarch.rpm",
"properties" : [ {
"key" : "rpm.metadata.version",
"value" : "19.300.0.59"
} ]
} ],
"range" : {
"start_pos" : 0,
"end_pos" : 3,
"total" : 3
}
}
此结果包含版本 19.300.0.9,according to RPM spec 比我正在搜索的版本 (>= 19.300.0.58) 旧,不应包含在结果中,但 Artifactory 找到了它尽管如此,很可能是因为它的搜索比较是字典顺序的。
还要注意结果的排序,确实似乎使用了数字排序(版本“19.300.0.9”在“19.300.0.58”和“19.300.0.59”之前).
问题: 是否可以强制 Artifactory 在搜索条件中使用数值 (SemVer) 比较?如果不是,有没有其他方法可以从结果列表中排除不相关的版本?
虽然不符合要求,但如果由创建的字段完成而不是名称排序也会有帮助。
created: