如何在AEM 6.5中通过XML文件程序化创建oak:index?
在AEM 6.5中通过XML程序化创建oak:index
核心思路
直接通过AEM内容包的XML节点定义,将oak:index的配置固化到代码中,包安装时自动将索引节点导入JCR仓库,彻底替代手动创建操作。
具体步骤
1. 搭建内容包目录结构
在你的AEM项目jcr_root目录下,创建对应索引的节点路径。标准做法是直接在oak:index节点下创建自定义索引的文件夹:
jcr_root/ └── oak:index/ └── customPagePropertyIndex/ # 自定义索引的节点名称 └── .content.xml
2. 编写索引的XML配置
在customPagePropertyIndex/.content.xml中定义索引的节点类型、属性和规则。以下是一个针对cq:Page节点的自定义属性索引示例:
<?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:oak="http://jackrabbit.apache.org/oak/ns/1.0" jcr:primaryType="oak:QueryIndexDefinition" type="property" async="async" declaredNodeTypes="[cq:Page]" includePaths="[/content/your-site]"> <properties jcr:primaryType="nt:unstructured"> <customPageTag jcr:primaryType="nt:unstructured" propertyIndex="true" name="customPageTag"/> </properties> </jcr:root>
jcr:primaryType必须设为oak:QueryIndexDefinition,这是oak索引的标准节点类型type指定索引类型,常见的有property、lucene、solrasync设置索引更新策略,可选async(异步)、nrt(近实时)、sync(同步)declaredNodeTypes指定索引生效的节点类型数组includePaths限制索引仅作用于指定路径下的内容properties节点下定义需要索引的具体属性,propertyIndex="true"开启属性索引
3. 打包部署内容包
- 如果用Maven构建,直接执行
mvn clean install -PautoInstallPackage,将包部署到AEM实例 - 也可以手动在CRXDE Lite中打包该路径,通过AEM包管理器上传安装
4. 验证索引是否创建成功
- 登录CRXDE Lite,导航到
/oak:index路径,确认自定义索引节点已存在 - 使用Query Builder执行查询,验证索引是否生效。比如针对上面的示例,执行查询
path=/content/your-site&property=customPageTag&property.value=some-tag,查看是否能快速返回结果
注意事项
- 索引名称不要和AEM默认索引重名,避免冲突
- 对于lucene类型的索引,还需要配置
aggregates节点定义聚合规则 - 异步索引部署后,可能需要等待后台索引任务完成,才能看到索引生效
- 若需修改索引,直接更新XML后重新部署包即可,AEM会自动更新索引配置
内容的提问来源于stack exchange,提问作者sinsanarya
相关产品推荐
相关产品推荐

