写点什么

创建基于查询参数的包

  • 2011-08-03
  • 本文字数:1751 字

    阅读完需:约 6 分钟

目录

要求

用户级别

入门级

示例文件

在使用内容管理系统时,我们往往需要根据某些参数提取内容。一种极其常见的用例就是依据最后一次同步的日期或者生产系统中内容的最后修改日期,更新生产中的存储或者开发系统。我们可以通过编写一个简单的组件来轻松解决这个问题,首先查询存储库,并使用搜索结果来在服务器上创建包。

查询存储库

Day OOTB 提供了搜索存储库的组件,例如 http://localhost:4502/libs/cq/search/content/querydebug.hml http://localhost:4502/crx/ui/search.jsp

我们可以根据查询参数进行查询,也可在一次查询中指定 XPath/SQL(例如,搜索在 2010 年 4 月 1 日之后更改的所有内容)。

基于参数的搜索

Onhttp://localhost:4502/libs/cq/search/content/querydebug.html, type the params in the text area below:

http://localhost:4502/libs/cq/search/content/querydebug.html 中,在文本区域内输入以下参数:

复制代码
type=cq:Page
path=/content
daterange.property=jcr:content/cq:lastModified
daterange.lowerBound=2010-04-01
orderby=@jcr:content/cq:lastModified
orderby.index=true
orderby.sort=asc

基于 XPath 的查询

http://localhost:5502/crx/ui/search.jsp 中使用 XPath,如下所示:

复制代码
/jcr:root/content//element(*, cq:Page)
[
(@jcr:content/cq:lastModified > xs:dateTime('2010-04-01T00:00:00.000+05:30'))
]
order by jcr:content/@cq:lastModified

我们还可以创建自己的组件来进行搜素,方法是创建一个基于所传入的属性(参数)的 PredicateGroup,随后即可利用一个生成器对象(使用 predicateGroup 和可用 jcr 会话创建)来创建查询,如下所示:

复制代码
QueryBuilder builder = resource.getResourceResolver().adaptTo(QueryBuilder.class);
Session session = resource.getResourceResolver().adaptTo(Session.class);
String queryParam = request.getParameter(“query”);
Properties props = new Properties();
props.load(new ByteArrayInputStream(queryParam.getBytes(“ISO-8859-1″)));
PredicateGroup root = PredicateConverter.createPredicates(props);
// avoid slow //* queries
if (!root.isEmpty())
{
query = builder.createQuery(root, session);
query.setHitsPerPage(0);
}
<p>SearchResult result = query.getResult();</p>

在 SearchResult 对象中,我们可以提取 Hits (result.getHits),并遍历列表来显示结果。我们可以使用相同的列表来创建包,如下一节所述。

通过节点列表创建包

如果拥有节点列表,就可以通过创建过滤器并使用相同的过滤器来进行 Jcr 包定义,从而轻松创建包:

复制代码
DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
for (Hit hit: hits)
{
PathFilterSet pathFilterSet = new PathFilterSet(hit.getPath());
filter.add(pathFilterSet);
}
JcrPackage jcrPackage = packMgr.create(“testGroup”,”testPackage”);
JcrPackageDefinition jcrPackageDefinition = jcrPackage.getDefinition();
jcrPackageDefinition.setFilter(filter, false);
PrintWriter pkgout = new PrintWriter(System.out);
packMgr.assemble(jcrPackage, new DefaultProgressListener(pkgout));

在执行由组名称为“testGroup”的一个包及其中的一个包构成的组合时,将创建一个“testPackage”包,并可通过包管理器访问。

我已经创建了一个示例组件,方法是扩展创建组名称为 testGroup 的包的默认搜索组件。如果已经存在具有相同名称的包,则将忽略请求,不会覆盖现有包。您可以在这里获得示例组件。

访问 http://servername:port/apps/packages/createPkgWithQuery/createPkg.html ,安装并使用包。您可以使用类似于下面这样的参数:

复制代码
type=cq:Page
path=/content
daterange.property=jcr:content/cq:lastModified
daterange.lowerBound=2010-04-01
orderby=@jcr:content/cq:lastModified
orderby.index=true
orderby.sort=asc

clip_image004

本文遵守知识共享—署名- 非商业性使用- 相同方式共享3.0 Unported License (Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License) 许可条件。

查看原文: Creating packages based on query parameters

2011-08-03 05:151272

评论

发布
暂无评论
发现更多内容

专家亮相华为云快成长直播间云安全专场,“未雨绸缪”化解数据风险

创意时空

给网站加个速,原来很简单!

sofiya

【云原生 | 从零开始学Docker】四、Docker镜像深度解析

泡泡

Docker 云计算 容器 云原生 9月月更

MySQL 中的锁机制

月明风清

前端经典面试题(有答案)

loveX001

JavaScript 前端

大数据ELK(二):Elasticsearch简单介绍

Lansonli

elasticsearch 9月月更

给网站加个速,原来很简单

科技怪咖

《数字经济全景白皮书》新市民金融创新篇 重磅发布!

易观分析

金融 新市民服务

数据仓库分层架构

阿泽🧸

数据仓库 9月月更

什么是访问控制列表ACL?

wljslmz

acl 访问控制列表 9月月更

元宇宙与泛娱乐的邂逅:次世代第一CP养成记

脑极体

精讲数据归档分析 |Data Infra 研究社第四期

Databend

大数据 开源 活动预告 #开源 数据归档

降本增效两不误——云原生赋能航空业数字化转型

York

容器 云原生 数字化转型 开发运维 智慧航空

企业在SaaS时代如何玩转帮助中心?

Baklib

企业做好知识管理的方法:文档管理

Baklib

易观分析:制造行业数字孪生AMC分析 ——数字孪生智能制造步入市场启动期,闭环验证能力待优化

易观分析

数字孪生 市场分析

【云原生 | 从零开始学Docker】五、容器数据卷实战

泡泡

Docker 云计算 容器 云原生 9月月更

和我一起入JavaScript

楠羽

JavaScript 笔记 知识 9月月更

【spring-kafka】@KafkaListener详解与使用

石臻臻的杂货铺

kafka 9月月更

你知道数据资产管理的目标是什么?

雨果

数据中台 数据资产管理

[极致用户体验] 让你的网页,适配微信大字号模式!体验超好,快来收藏

HullQin

CSS JavaScript html 前端 9月月更

leetcode 637. Average of Levels in Binary Tree 二叉树的层平均值(简单)

okokabcd

LeetCode 数据结构与算法

谁能说清楚数据资产管理与数据治理是什么关系?

雨果

数据治理

经验分享|企业搭建帮助中心步骤

Baklib

跟着卷卷龙一起学Camera--Binder

卷卷龙

ISP 9月月更

BNBChain NFTScan 与 SpaceID 达成合作,在浏览器内支持 .bnb 域名搜索!

NFT Research

区块链 域名 bnb

SaaS 产品该如何定价?

产品海豚湾

产品经理 SaaS 产品规划 9月月更 商业产品

C++学习---STL中nullptr_t的实现原理

桑榆

c++ 源码阅读 9月月更

2022-09-15:Range模块是跟踪数字范围的模块。 设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。 半开区间 [left, right) 表示所有 left <= x < righ

福大大架构师每日一题

算法 rust 福大大

谁来说说数据质量评估的标准是什么?

雨果

数据质量

创建基于查询参数的包_Java_Yogesh Bahuguna_InfoQ精选文章