Заставить Artifactory использовать численное сравнение при поиске? - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь найти самую последнюю (или самую раннюю, в зависимости от оператора сравнения) версию пакета 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, невозможно отсортировать по свойствам , поэтому вместо простой сортировки по @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, которая, согласно спецификации RPM , старше, чем я ищу (> = 19.300.0.58) и не должнабыть включенным в результаты, но Artifactory, тем не менее, находит его, скорее всего, из-за лексикографического сравнения поиска.

Также обратите внимание на порядок результатов, который действительно использует числовую сортировку (версия "19.300.0.9" предшествует "19.300.0.58" и "19.300.0.59").

Вопрос: Можно ли заставить Artifactory использовать числовое ( SemVer ) сравнение в критериях поиска?Если нет, есть ли другой способ исключить не относящиеся к делу версии из списка результатов?

1 Ответ

1 голос
/ 01 апреля 2019

Хотя не в соответствии с тем, что запрашивается, но вместо сортировки имен, если это делается созданным полем, также будет полезно.

created:
...