Artifactory 强制人工在搜索时使用数值比较?

Artifactory 强制人工在搜索时使用数值比较?,artifactory,artifactory-query-lang,Artifactory,Artifactory Query Lang,我正在尝试查找RPM包的最新(或最早,取决于比较运算符)版本(RPM位很重要)。我使用的AQL查询与此类似: items.find( { "$and" : [ { "@rpm.metadata.name": { "$eq": "awesome_package"}}, { "@rpm.metadata.version": { "$gte": "19.300.0.58"}} ] }) .include("@rpm.metadata.version")

我正在尝试查找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已经回答的那样,因此,我必须在
find
子句中使用属性条件,而不是仅对
@rpm.metadata.version
进行排序,并使用
.limit(1)
获得第一个顶级结果

虽然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,它比我正在搜索的版本旧(>=19.300.0.58),不应该包含在结果中,但是Artifactory发现了它,很可能是因为它的搜索比较是字典式的

还要注意结果的顺序,似乎使用了数字排序(版本“19.300.0.9”在“19.300.0.58”和“19.300.0.59”之前)


问题:是否可以强制Artifactory在搜索条件中使用数值()比较?如果没有,是否有其他方法可以从结果列表中排除不相关的版本?

虽然不符合要求,但如果由创建的字段进行,则不进行名称排序也会很有帮助

created:

.include(“@rpm.metadata.version”).sort({“$asc”:[“name”]})——您已经按照asc顺序和name字段对结果进行了排序。这是大于等于19.300.0.58的最早版本吗?@error404:是的,我在名称字段上进行了排序,不支持对属性(例如@rpm.metadata.version)进行排序。事实上,
sort
子句在这里是不相关的:我的主要问题是,我希望在结果中只得到两个匹配项(.58和.59),但我也得到了一个(更早).9.我觉得结果是正确的。awesome_包的版本-19.300.0.9-1.noarch.rpm将高于上一个版本,因为这个版本以-1而不是-0结尾。如果是-0,则结果不应是aql@error404:
-1
实际上是一个名为
@rpm.metadata.release
的属性,与搜索时使用的
@rpm.metadata.version
属性无关。Artifactory正确地为部署的工件解析EVR(epoch/version/release):如果我使用
项搜索工件。find({“$and”:[{{@rpm.metadata.name:{“$eq:“awesome_package”},{“@rpm.metadata.version:{$eq:“19.300.0.9”}}})
我只得到一个结果(如预期的那样)。只是
$gte
比较将版本视为字符串,忽略列出(不同)比较语义的RPM规范。好的,我没有使用RPM,所以不知道使用的属性。您不能使用created_by field获取最新版本吗?谢谢,将您的评论升级为可接受的解决方法。