云客户?
开始免费>
升级MyJFrog >
云有什么新鲜事>





概述

人工查询语言(AQL)是专门设计来让您发现与存储在Artifactory中的工件和构建相关的任何数据。它的语法提供了一种简单的方法来构造复杂的查询,这些查询指定了任意数量的搜索条件、过滤器、排序选项和输出参数。AQL作为RESTful API公开,它使用数据流提供输出数据,从而获得极快的响应时间和较低的内存消耗。AQL只能提取驻留在Artifactory实例中的数据,因此它可以继续运行局部存储库远程存储库缓存而且虚拟存储库

从Artifactory 7.17.4,您可以搜索远程存储库

下面是一些简单的例子:

//返回"artifactory"构建的所有工件。items.find({"@build.name":{"$eq":"artifactory"}}) //返回所有与非Apache许可证有依赖关系的构建。builds.find({"module.dependency.item.@license":{"$nmatch":"Apache-*"}}) //返回包含名为" / artifactory/main .class"的文件的所有存档。items.find({“archive.entry.name”:{" $ eq”:“Main.class”},“archive.entry.path”:{" $ eq”:“org/artifactory}})

下面是一个稍微复杂一点的例子。

//返回任何名为“Artifactory.jar”的存档的所有条目,来自任何名为“Artifactory”的构建,且//构建号为521。archive.entries。找到( { "archive.item.name":{"$eq":"Artifactory.jar"}, "archive.item.artifact.module.build.name":{"$eq":"Artifactory"}, "archive.item.artifact.module.build.number":{"$eq":"521"} })

页面内容



下面是另一个示例,它展示了AQL从存储库中挖掘信息的强大功能,这是其他工具无法比拟的。

//比较2个“maven+example”构建项中的构件内容。找到( { "name":{"$match":"multi2*.jar"}, "$or":[ { "$and":[ {"artifact.module.build.name":{"$eq":"maven+example"}}, {"artifact.module.build.number":{"$eq":"317"}} ] }, { "$and":[ {"artifact.module.build.name":{"$eq":"maven+example"}}, {"artifact.module.build.number":{"$eq":"318"}} ] } ] }).include("archive.entry")
查询输出示例
[{{“结果”:“回购”:“ext-snapshot-local”、“路径”:“org/jfrog/test/multi2/3.0.0-SNAPSHOT”、“名称”:“multi2——3.0.0 - 20151012.205507 - 1. - jar”、“类型”:“文件”、“大小”:1015年,“创建”:“2015 - 10 - 12 - t22:55:23.022 + 02:00”、“created_by”:“admin”,“修改”:“2015 - 10 - 12 - t22:55:23.013 + 02:00”、“modified_by”:“admin”,“更新”:“2015 - 10 - 12 - t22:55:23.013 + 02:00”,“档案”:[{“条目”:[{“entry.name”:“App.class”、”条目。path": "artifactory/test"}, {"entry.name": "MANIFEST. path": "artifactory/test"曼氏金融”、“条目。路径" : "META-INF" } ] } ] },{ "repo" : "ext-snapshot-local", "path" : "org/jfrog/test/multi2/3.0.0-SNAPSHOT", "name" : "multi2-3.0.0-20151013.074226-2.jar", "type" : "file", "size" : 1015, "created" : "2015-10-13T09:42:39.389+02:00", "created_by" : "admin", "modified" : "2015-10-13T09:42:39.383+02:00", "modified_by" : "admin", "updated" : "2015-10-13T09:42:39.383+02:00", "archives" : [ { "entries" : [ { "entry.name" : "App.class", "entry.path" : "artifactory/test" }, { "entry.name" : "MANIFEST.MF", "entry.path" : "META-INF" } ] } ] } ], "range" : { "start_pos" : 0, "end_pos" : 2, "total" : 2 } }


体系结构

AQL被构造为一组相互连接的域,如下图所示。您可以一次只在一个域上运行查询,这称为主要的查询的域。

目前支持以下主域:构建,条目,促销活动而且释放。即,你的查询可以是:items.find(…),builds.find(…)Archive.entries.find(…),build.promotions.find(…)或release .find(…)

您可以使用来自其他域的字段作为搜索条件的一部分,或者指定要在输出中显示的字段,但是在这种情况下,您需要遵循中描述的约定使用字段

支持域

AQL是在Artifactory V3.5.0中引入的,支持作为一个主域和它的附属财产,以及统计作为二级域。Artifactory的后期版本引入了可以包含在查询中的附加域。下表总结了每个域可访问的版本。


3.5.0 4.2.0 4.7.0 0 / 7.0.0

(勾选)

(勾选) (勾选) (勾选)
项。财产

(勾选)

(勾选) (勾选) (勾选)
统计
(勾选) (勾选) (勾选) (勾选)
存档
(错误) (勾选) (勾选) (勾选)
档案。条目
(错误) (勾选) (勾选) (勾选)
工件
(错误) (勾选) (勾选) (勾选)
依赖
(错误) (勾选) (勾选) (勾选)
模块
(错误) (勾选) (勾选) (勾选)
模块。财产
(错误) (勾选) (勾选) (勾选)
构建
(错误) (勾选) (勾选) (勾选)
构建。财产
(错误) (勾选) (勾选) (勾选)
促销活动
(错误) (错误) (勾选) (勾选)
释放
(错误) (错误) (错误) (勾选)
Release_artifact
(错误) (错误) (错误) (勾选)



使用

语法

从Artifactory 7.37。x, AQL查询支持禁用唯一结果。这可以用来加快查询速度或“按原样”获得结果。这将取代前面的基于文本的AQL查询的搜索结果,默认情况下是唯一的(原生SQL选择包含“不同的”术语)。

例如:

//找到artifactory items中所有唯一的jar的名称。找到({"名称":{" $匹配":" * . jar "}})。包括("name") // Find all jars's names in artifactory includes repeated values across different repositories. items.find({"name" : {"$match":"*.jar"}}).include("name").distinct(false)




//在一个名为“my_local”的存储库中找到所有jar项。//属性“path”在单个存储库中已经是唯一的,并且由于性能原因可以禁用唯一的结果。items.find ({"repo" : "my_local"}, {"name" : {"$match":"*.jar"}} ) .include("path") .distinct(false)
< domain_query >;(<标准>)其中包括(<字段>).sort (< order_and_fields >) .offset (< offset_records >) .limit (< num_records >) .distinct(<真|假>)

地点:

domain_query
与主域对应的查询。肯定是其中之一项目构建条目
标准
有效JSON格式的搜索条件
字段
(可选)查询输出有一组默认字段。该参数允许您指定一组不同的字段这应该包含在输出中
order_and_fields
(可选)输出应该排序的字段,以及排序顺序。为每个域定义了一组默认字段和排序顺序。
num_records
(可选)应该提取的记录的最大数量。如果省略,则会提取所有符合查询条件的记录。
抵消
(可选)从显示结果的第一个记录开始的偏移量(即应该跳过多少结果来显示)
截然不同的

(可选)禁用或启用唯一查询结果。通过默认的

限制

排序限制而且抵消元素只在以下情况下有效:

  • 您的查询没有包括元素
  • 如果你有包括元素,则只指定其中主域的字段。

例如,在下面的查询中,排序限制而且抵消将不会工作,因为主域是,但包括元素的字段指定工件模块而且构建域应该显示:

items.find()其中包括(“工件”、“artifact.module”,“artifact.module.build”)

使用字段

主域的任何字段都可以在查询中的任何地方直接使用。如果使用来自其他域的字段,则必须使用来自主域的完整关系路径指定它们。

例如,要在一个名为“myrepo”的存储库中找到所有的项目,你可以使用:

items.find ({"repo": "myrepo"})


但是要查找由名为“mymodule”的模块创建的所有项,你可以使用:

items.find({“artifact.module.name”:“mymodule里”})


既然你也可以从构建域,以查找生成名为“artifactory”的项的所有构建。“War”,你也可以用:

builds.find({“module.artifact.item.name”:“artifactory.war”})

执行

要执行AQL查询,请使用Artifactory查询语言REST API


实体和字段

你可以发出找到根据语法并配置您的请求以显示来自任何域的字段。

字段名 类型 描述
回购 字符串 存储此项的存储库的名称
路径 字符串

与此项关联的完整路径

文件夹的路径不应该包含“/*”,而对于项目,它是必需的。

的名字 字符串 物品的名称
创建 日期 当项被创建时
修改 日期 文件系统时间戳,指示项目最后一次修改的时间
更新 日期 最后一次将项目上传到存储库的时间。
created_by 字符串 项目所有者的名称
modified_by 字符串 修改该项的最后一个用户的名称
类型 枚举

项目类型(文件/文件夹/任意)。

如果类型如果查询中未指定,则搜索的默认类型为文件

深度 int 从根文件夹到路径中的项的深度
original_md5 字符串 该项最初上传时的md5哈希码
actual_md5 字符串 该项的当前md5哈希码
original_sha1 字符串 项目最初上传时的sha1哈希码
actual_sha1 字符串 项目的当前sha1哈希码
sha256 字符串

该项的sha256哈希码

Artifactory 5.5版本支持SHA-256

您只能在已经部署到Artifactory 5.5或更高版本的工件上执行AQL搜索,如果您已经部署了的话迁移数据库中描述的sha - 256支持在将Artifactory升级到5.5及以上版本后。

大小 项目在磁盘上的大小
virtual_repos 字符串 包含存储此项目的存储库的虚拟存储库。



存档

存档域目前不包含任何字段


启用其他存档类型

要启用对特定归档类型的搜索,应该在mimetypes.xml文件中为该归档类型指定' index=true '。看到# ContentType / MIMEType配置文件

条目 的名字 字符串 条目的名称
路径 字符串 条目在存储库中的路径



促销活动





创建 日期 当构建被推广时
created_by 字符串 促进构建的Artifactory用户
状态 字符串 晋升的状态
回购 字符串 构建提升到的存储库的名称
评论 字符串 关于促销的免费文字评论
用户 字符串 促进构建的CI服务器用户



构建 url 字符串 构建的URL
的名字 字符串 构建的名字
数量 字符串 构建数字
创建 日期 文件系统时间戳,指示项目最后一次修改的时间
created_by 字符串 创建构建的用户的名称
修改 日期 文件系统时间戳,指示最后一次修改构建的时间
modified_by 字符串 修改构建的最后一个用户的名称
开始 日期

构建开始时间。该字段的值直接取自有关建造的build-info.json文件。
该字段是不可变的,并且不会在构建升级或构建复制时更改。




财产 关键 字符串 属性键
价值 字符串 属性值



统计
下载 日期 最后一次下载项目的时间
下载 int 一个项目的下载总数
downloaded_by 字符串 下载此项目的最后一个用户的名称
remote_downloads int 从代理项目所在本地存储库的智能远程存储库下载项目的总次数
remote_downloaded 日期 从智能远程存储库(代理该项所在的本地存储库)下载项的最后一次时间
remote_downloaded_by 字符串 从智能远程存储库(代理该项所在的本地存储库)下载此项的最后一个用户的名称
remote_origin 字符串 沿着起源于下载请求的智能远程代理链的远程Artifactory实例的地址。
remote_path 字符串 智能远程代理链上的完整路径,下载请求通过该路径从源实例发送到当前实例。



工件 的名字 字符串 工件的名称
类型 字符串 工件的类型
sha1 字符串 工件的SHA1哈希码
md5 字符串 工件的MD5哈希码



模块 的名字 字符串 模块的名称
依赖 的名字 字符串 依赖项的名称
范围 字符串 依赖项的范围
类型 字符串 依赖项的类型
sha1 字符串 依赖项的SHA1哈希码
md5 字符串 依赖项的MD5哈希码
释放 的名字 字符串 发布包的名称
版本 字符串 发布包的版本
状态 字符串 发布包的状态
创建 字符串 发布包被创建的日期
签名 字符串 发布包签名
release_artifact 路径 字符串 发布工件的完整回购路径



构建搜索条件

标准元素必须是一个有效的JSON格式语句,由指定应该返回的项的标准组成。它本质上是一个复合布尔语句,只包含语句求值的元素真正的由查询返回。

每个标准本质上都是一个比较语句,应用于字段或属性。请参阅完整的名单比较运算符.虽然每个标准都可以用完整的通用格式表示,但AQL为可读性定义了缩写形式如下所述。

领域的标准

在一个字段上指定一个标准的一般方法如下:

{" <字段> ":{" <比较运算符>”:“< >价值"}}

如果查询应用于不同的域,则字段名必须通过到主域的关系路径预先挂起。

例如:

//查找“name”字段匹配表达式“*test.”的项。*”项目。找到({"name": {"$match" : "*test.*"}}) //Find items that have been downloaded over 5 times. //We need to include the "stat" specifier in "stat.downloads" since downloads is a field of the stat domain and not of the item domain. items.find({"stat.downloads":{"$gt":"5"}}) //Find items that have never been downloaded. Note that when specifying zero downloads we use "null" instead of 0. //We need to include the "stat" specifier in "stat.downloads" since downloads is a field of the stat domain and not of the item domain. items.find({"stat.downloads":{"$eq":null}}) //Find builds that use a dependency that is a snapshot builds.find({"module.dependency.item.name":{"$match":"*SNAPSHOT*"}})

在统计域中值为“0”的字段

注意,当搜索统计域中具有“零”值的项时,应该搜索null,而不是0。例如,如上图所示,当搜索下载为0的项目时,指定“null”而不是0。

字段标准的简短符号

AQL支持字段搜索条件的简短符号。

字段上的"equals" ("$eq")条件可以这样指定:

{" <字段> ":" < >价值"}

例子
查找“name”字段等于“ant-1.9.4.jar”的条目
常规的符号

items.find ({" name ": {" $ eq”:“ant-1.9.4.jar}})

短的符号

items.find({“名称”:“ant-1.9.4.jar”})

性能标准

Artifactory允许您在三个域中附加和搜索属性:项目模块而且构建。

为属性指定标准的一般方法如下:

{" @ < property_key > ":{“操作符”:“< property_value > "}}

访问正确的属性

如果要从查询的主域指定属性,可以像上面描述的那样简单地输入属性键和值。如果从其他域指定属性,则需要指定属性的完整关系路径。

在下面的示例中,主域是构建的属性,但我们希望基于属性找到构建域,因此我们必须指定属性的完整路径:

builds.find module.artifact.item({”。@qa_approved": {"$ne": "true"}})

下面是一些例子:

//找到已经被QA批准的项目。找到({"@qa_approved" : {"$eq" : "true"}}) //Find builds that were run on a linux machine" builds.find({"@os" : {"$match" : "linux*"}}) //Find items that were created in a build that was run on a linux machine. items.find({"artifact.module.build.@os" : {"$match" : "linux*"}})

属性标准的简短符号

AQL支持属性搜索条件的简短符号。

属性上的"equals" ("$eq")准则可以如下所示:

{" @ < property_key >”:“< property_value > "}

例子

查找具有名为“license”且值等于“GPL”的关联属性的项

常规的符号

items.find @artifactory({”。license ": {"$eq": "GPL"}})

短的符号
items.find @artifactory({”。许可证GPL“:})

复合标准

字段和属性上的搜索条件可以嵌套并组合成使用"美元和”或“美元或“运营商。如果不指定操作符,则默认为美元和

<标准> ={<美元”和“|”美元或“>:[{<标准>},{<标准>}]

标准可以嵌套到任何程度

注意,由于搜索条件可以嵌套到任何程度,您可以构造具有所需的任何复杂程度的逻辑搜索条件。

下面是一些例子:

//这个例子显示了一个隐式的“$and”操作符(因为这是默认的,所以您不必显式地指定它,而是用逗号分隔标准)和一个显式的“$or”操作符。//查找jcenter或my-local存储库中的所有文件项。items.find ({"type" : "file","$or":[{"repo" : "jcenter", "repo" : "my-local" }]}) //Find all the items that were created in a build called "my_debian_build" and whose name ends with ".deb" or all items created in a build called "my_yum_build" and whose name ends with ".rpm". items.find( { "$or": [ { "$and": [ {"artifact.module.build.name" : "my_debian_build"} , {"name" : {"$match" : "*.deb"}} ] }, { "$and": [ {"artifact.module.build.name" : "my_yum_build"} , {"name" : {"$match" : "*.rpm"}} ] } ] } ) //Find all items in a repository called "my_local" that have a property with a key called "license" and value that is any variant of "LGPL". items.find({"repo" : "my_local"},{"@artifactory.licenses" : {"$match" : "*LGPL*"}})

单个物业的匹配标准($msp)

在属性上指定几个标准的搜索有时可能产生意想不到的结果。

这是因为项经常用多个属性进行注释,只要任何条件对任何属性都为真,则项将在正则表达式中返回找到

但有时,我们需要找到一个特定属性满足多个标准的项。为此,我们使用$msp(匹配单个属性)操作符。

两者之间的根本区别找到和使用msp美元操作符:

  • 找到将返回一个项目如果任何它的性质的答案所有搜索条件的。
  • msp美元是否只返回一个项目,如果至少一个它的性质的答案所有的标准msp美元术语。

这里有一个例子。

考虑两个项目A和B。

A具有具有价值的许可证属性AGPL-V3

B有两个许可证属性。一个是lgpl - 2.1,另一个lgpl - 2.2

物品的属性

现在,假设我们想要找到使用各种GPL许可的项目,只要不是LGPL-2.1即可。

在我们的例子中,我们希望两者都能得到一个项目和B返回自一个AGPL-V3而且Blgpl - 2.2

首先,我们可以这样写我们的查询:

items.find ({ "@license":{"$match": "*GPL*"}, "@license":{"$nmatch": "LGPL-2.1*"} })

但是这个查询只返回项目一个

返回A项,因为它清楚地回答了两个条件:"@license":{"$match": "*GPL*"}和"@license":{"$nmatch": "LGPL-2.1*"}

B项不返回,因为它的属性license=LGPL-2.1不满足“@license”:{”$的条件nmatch”:“lgpl - 2.1 *”}。

如果我们使用msp美元操作如下:

”项。找到({ "$msp": [ "@license":{"$match": "*GPL*"}, "@license":{"$nmatch": "LGPL-2.1*"} ]}).

那么两个项目一个和B项返回。

返回Item A,因为它具有@license属性AGPL-V3符合这两个{" @license ":{" $匹配”:“* GPL *}}准则和“@license”:{" $ nmatch”:“lgpl - 2.1 *”}标准。

返回项目B,因为它具有@license属性lgpl - 2.2这也符合这两个{" @license ":{" $匹配”:“* GPL *}}准则和“@license”:{" $ nmatch”:“lgpl - 2.1 *”}标准。

请注意,msp美元运算符在所有具有属性的域上同样工作得很好:模块而且构建

比较运算符

下表列出了允许的全部比较运算符:

操作符 类型 意义
美元不 字符串,日期,int,长 不等于
美元的情商 字符串,日期,int,长 =
$ gt 字符串,日期,int,长 大于
一种美元 字符串,日期,int,长 大于或等于
$ lt 字符串,日期,int,长 不到
$ lte 字符串,日期,int,长 小于或等于
$匹配 字符串 匹配
nmatch美元 字符串 不匹配

基于时间的操作,也请参考相对时间运营商

使用通配符

为了启用使用非特定条件的搜索,AQL在通用搜索函数中支持通配符。

使用通配符$匹配而且nmatch美元

当使用"$匹配”和“nmatch美元操作符,“*”通配符替换任何字符串,“?”通配符替换单个字符。

属性上的“Catch all”符号

除了支持"$匹配”和“nmatch美元, AQL支持使用通配符进行匹配的表示法任何键或任何价值属性。

如果指定“@*”作为属性键,那么它意味着与任何键匹配。

如果你指定"“作为属性值,那么它意味着匹配任何值

例子

查找属性值为“GPL”的项目

常规的符号

items.find ({"$and" : [{"property.key" : {"$eq" : "*"}}, {"property.value" : {"$eq" : "GPL"}}]})

短的符号

items.find({“@ *”:“GPL”})

例子

查找带有键为“license”的属性注释的任何项(即查找带有“license”属性的任何项)

常规的符号

items.find ({"$and" : [{"property.key" : {"$eq" : "license"}}, {"property.value" : {"$eq" : "*"}}]})

短的符号
items.find({“@artifactory.licenses”:“*”})

注意不要误用通配符

在不符合上述规则的查询中使用的通配符(“*”和“?”)将被解释为字面量。

例子

为了避免混淆,这里有一些使用“*”和“?”字符的示例,解释为什么它们被解释为通配符或字面量。

查询 通配符或文字 解释 查询返回什么
items.find ({" name ":{" $匹配”:“ant-1.9.4 *”。}}) 通配符

控件允许字段上的通配符$匹配操作符。

所有名称匹配表达式“ant-1.9.4.*”的项
items.find ({" name ": {" $ eq”:“ant-1.9.4 *”。}}) 文字

字段上的通配符只允许使用$匹配而且nmatch美元操作符。

只查找名称为“ant-1.9.4.*”的项目。

items.find({“@artifactory.licenses”:“*”})

通配符

对于属性,允许使用这种简短的符号并表示任何值

属性键为“许可证”的所有项

items.find({“@artifactory.licenses”:“* GPL”})

文字

这是替换属性的$eq运算符的简短符号,但它没有对属性使用“catch all”符号。

所有许可值为“*GPL”的项目

items.find ({“@artifactory.licenses”:{" $匹配”:“* GPL * "}}

通配符 属性上的通配符是允许的$匹配操作符。 所有带有许可证的项目都匹配表达式"*GPL*"

日期及时间格式

AQL支持日期和时间格式W3C概要ISO 8601日期和时间格式标准。

完整的日期和时间符号被指定为:

YYYY-MM-DDThh: mm: ss。年代TZD (e.g., 2012-07-16T19:20:30.45+01:00)

也支持以部分精度指定的日期/时间:(例如,只指定年,或年和月,年,月和日等。)

例如,以下查询将返回2012年7月16日之后在GMT+1时区晚上7:20后30.45秒修改的所有项:

//查找在2012-07-16T19:20:30.45+01:00之后修改的所有条目。找到({"modified" : {"$gt" : "2012-07-16T19:20:30.45+01:00"}}) //Find all the builds that have were created after 2012-07-01 builds.find({"created" : {"$gt" : "2012-07-01"}})

有关详情,请参阅W3C文档

相对时间运营商

AQL支持使用相对时间为查询指定时间间隔。换句话说,查询的时间间隔总是相对于查询运行的时间,因此您不必在每次运行查询时以其他方式更改或制定时间段。例如,您可能希望运行最近一天的查询,或者运行两周前的时间段的查询。

使用以下两个操作符指定相对时间:

美元之前
查询将在直到指定时间的完整周期内运行。
去年美元
查询将从指定的时间到查询运行的时间段内运行

时间段可以用数字和以下后缀之一指定:

毫秒
米尔斯女士
第二个年代,年代
分钟
分钟
d
w
个月
个月
y

例如,要指定五天,您可以使用5 d.要指定两个星期,你可以用2 w

下面是一些使用相对时间运算符的例子:

//查找最近三天内修改过的所有项目。找到({"modified" : {"$last" : "3d"}}) //Find all the builds that were created up to two weeks ago (i.e. no later than two weeks ago) builds.find({"created" : {"$before" : "2w"}})

指定输出字段

每个查询在结果集中显示一组默认字段,但是您可以完全控制这一点,并可以使用可选参数指定要显示哪些字段包括元素。

您甚至可以指定显示来自与结果集相关的其他实体的字段。

显示所有字段

使用:其中包括(“*”)

例如:

//查找所有项,并显示所有项字段items. Find ().include("*")

显示特定字段

每个查询在输出中显示一组默认字段。使用其中包括元素可以覆盖此默认设置,并指定希望在输出中接收的任何特定字段集。

使用:包括(“< field1 >”、“< field2 >”……)

例如:

//查找所有项,只显示"name"和"repo"字段items. Find()。包括(“名字”,“回购”)

您还可以显示来自与查询返回的字段相关联的其他实体的特定字段。

中指定任何字段域,那么这将覆盖默认的输出设置,并且只有将显示您明确指定的字段。

方法中指定的字段财产统计的默认字段,则输出将显示中显式指定的其他字段财产统计域。

例如:

//查找所有项目,并显示"name"和"repo"字段以及从相应的"stat"实体items. Find()中"downloads"的数量。包括("name", "repo", "stat.downloads") //Find all items, and display the default item fields fields as well as the stat fields items.find().include("stat") //Find all items, and display the default item fields as well as the stat and the property fields items.find().include("stat", "property") //Find all items, and display the "name" and "repo" fields as well as the stat fields items.find().include("name", "repo", "stat") //Find all builds that generated items with an Apache license, and display the build fields as well as the item "name" fields. Click below to view the output of this query builds.find({ "module.artifact.item.@license":{"$match":"Apache*"} } ).include("module.artifact.item.name")

注意,输出显示“构建”域的默认字段,以及项目域的“名称”字段。来自模块和工件域的字段不会显示,因为它们没有在include元素中指定。

查询输出示例
{"results":[{"构建。创建" : "2015-09-06T15:49:01.156+03:00", "build.created_by" : "admin", "build.name" : "maven+example", "build.number" : "313", "build.url" : "http://localhost:9595/jenkins/job/maven+example/313/", "modules" : [ { "artifacts" : [ { "items" : [ { "name" : "multi-3.0.0-20150906.124843-1.pom" } ] } ] } ] },{ "build.created" : "2015-09-06T15:54:40.726+03:00", "build.created_by" : "admin", "build.name" : "maven+example", "build.number" : "314", "build.url" : "http://localhost:9595/jenkins/job/maven+example/314/", "modules" : [ { "artifacts" : [ { "items" : [ { "name" : "multi-3.0.0-20150906.124843-1.pom" } ] } ] } ] } ], "range" : { "start_pos" : 0, "end_pos" : 2, "total" : 2 } }

无Admin权限的用户

为确保非特权用户在没有权限的情况下无法访问信息,对无管理员权限的用户有以下限制:

  1. 查询中的主域可能仅为项。
  2. 中必须包含以下三个字段包括指令:名字,回购,路径

但是请注意,一旦满足了这些限制,您就可以在中包含来自任何域的任何其他可访问字段包括指令。

按键过滤属性

如上所述,.include元素的主要用途是指定要在结果集中显示的输出字段。

这个概念以类似的方式应用于属性。每一项都可以用几个(甚至很多)属性进行注释。在许多情况下,您可能只对属性的特定子集感兴趣,并且只想显示这些属性。

因此,萤火虫e元素可以用来从结果中过滤掉不需要的属性,而只有display(即。包括)你感兴趣的那些。

例如,显示对所找到的项进行注释的所有属性。

//查找所有项目,并显示"name"和"repo"字段,以及与每个项目相关的所有属性items. Find()。包括(“名字”,“回购”,“。*”)

然而,如果你只对一个特定的属性感兴趣(例如,你只是想知道每个返回项的版本),你可以过滤掉所有其他属性,只包括你感兴趣的键的属性:

//查找所有项目,并显示“name”和“repo”字段,以及每个项目的“version”属性的键和值items. Find()。包括(“名字”,“回购”,“@version”)

排序

AQL实现了默认排序顺序,但是,您可以覆盖默认排序顺序,并使用输出中的字段指定任何其他排序顺序.sort元素添加到查询的末尾,如下所示:

.sort ({< asc | desc >美元":[< field1 >, < field2 >》……]})

只能对输出中显示的字段指定排序(无论它们是默认显示的字段还是由于其中包括元素)。

下面是一些例子:

//找到artifactory中所有的罐子,并按回购和命名项目排序。找到({"名称":{" $匹配":" * . jar "}})。排序({“asc美元”:(“回购”、“名称”)})// Find all the jars in artifactory and their properties, then sort them by repo and name items.find({"name" : {"$match":"*.jar"}}).include("@").sort({"$asc" : ["repo","name"]})

显示限制和分页

限制

注意重要的限制排序,限制而且抵消上面描述的

使用.limit元素,您可以限制查询将显示的记录的数量。

//找到artifactory中的所有jar,并按回购和名称对它们进行排序,但只显示前100个结果项。找到({"名称":{" $匹配":" * . jar "})。排序({“asc美元”:(“回购”、“名称”)}).limit(100)


方法将重点放在结果的子集上时,还可以实现分页.offset元素。

//运行相同的示例,但这一次,显示最多50项,但跳过前100项。找到({"名称":{" $匹配":" * . jar "})。排序({“asc美元”:(“回购”、“名称”)}).offset(100).limit(50)

使用远程存储库

搜索远程存储库

从Artifactory版本7.17.4开始,您可以直接在远程存储库或虚拟存储库中搜索。这需要在Advanced选项卡下的远程存储库配置上向远程Artifactory提供凭据。

要启用远程存储库中的搜索,可以使用dd的传递标记到搜索查询。

items.find (“repo”: “remote-repo”).transitive()

规则和指导方针

以下规则和指导原则适用于搜索远程和虚拟存储库:

  • 远程存储库必须是一个Artifactory实例。

  • 查询必须包含单个存储库和美元的情商条款。

    例子
    items.find (“repo”: “remote-repo”).transitive()
  • 你不能使用排序而且抵消标志。

  • 主域只能包含项目

  • 包括可能只有以下域名:项目而且ItemProperties。

  • 搜索将在虚拟存储库中的前五个远程存储库上运行。

搜索的例子

示例1:输入

的所有字段项。

items.find ({ "repo" : "docker-remote-repo" } ).transitive()

示例1:输出

{"results": [{"repo": "docker-remote-repo-cache", "path": "alpine/latest", "name": "manifest. conf ": [{"repo": "docker-remote-repo-cache", "path": "alpine/latest", "name": "manifest. conf "。json”、“类型”:“文件”、“大小”:528年,“创建”:“2021 - 03 - 21 - t13:54:52.383 + 02:00”、“created_by”:“管理”、“修改”:“2021 - 03 - 21 - t13:54:32.000 + 02:00”、“modified_by”:“管理”、“更新”:“2021 - 03 - 21 t13:54:52.384 + 02:00”},……),“范围”:{“start_pos”:0,“end_pos”:12,“总”:12}}

示例2:输入

控件中列出的结果限制搜索包括部分。

items.find ({ "repo" : "docker-remote-repo" } ).include("name").transitive()

示例2:输出

{"results": [{"name": "manifest. manifest. "Json "}, {"name": "sha256__4c0d98bf9879488e0407f897d9dd4bf758555a78e39675e72b5124ccf12c2580"}, {"name": "sha256__e50c909a8df2b7c8b92a6e8730e210ebe98e5082871e66edd8ef4d90838cbd25。标记"},{"repo": "docker-remote-repo", "name": "manifest. repo"。Json "}, {"repo": "docker-remote-repo", "name": "repository. Json "}, {"repo": "docker-remote-repo",目录"},{"repo": "docker-remote-repo", "name": "sha256__4c0d98bf9879488e0407f897d9dd4bf758555a78e39675e72b5124ccf12c2580"}, {"repo": "docker-remote-repo", "name": "sha256__e50c909a8df2b7c8b92a6e8730e210ebe98e5082871e66edd8ef4d90838cbd25"}], "range": {"start_pos": 0, "end_pos": 7, "total": 7}}



使用虚拟存储库

AQL支持虚拟存储库。由于虚拟存储库仅通过它们所包含的本地存储库间接包含项,因此制定了几个约定,如下面的小节所述。

对虚拟存储库进行过滤

可以将查询限制在指定的虚拟存储库中进行搜索。实际上,这意味着查询将应用于指定虚拟存储库中包含的本地存储库和远程存储库缓存。

例如,查找包含在名为我的虚拟

items.find ({"repo" : "my-virtual"})

输出字段

域有一个virtual_repos字段,其中包含包含已找到项的虚拟存储库。通常,要显示此字段,您需要在查询中显式地将其指定为输出字段.但是,如果查询指定虚拟存储库作为搜索目标,则virtual_repos字段作为输出字段隐式包含在搜索结果中。

一个项目必须是可访问的,以便被发现

搜索查询只会在虚拟存储库中找到可被该虚拟存储库访问的项。例如,包含项的本地存储库可以指定和包含或排除模式它阻止封装虚拟存储库对项的访问。在这种情况下,搜索查询将找不到该项。

版权所有©2022 JFrog有限公司