AEM索引相关

发布于:2026-07-08 Adobe AEM 0条评论

——————————目录大纲——————————

————————————————————————

一、索引结构

索引目录:
lenovo-platform/ui.apps/src/main/content/jcr_root/_oak_index

目前代码中存在的索引:
damAssetLucene-8-custom-2

所属路径:
lenovo-platform/ui.apps/src/main/content/jcr_root/_oak_index/damAssetLucene-8-custom-2/tika

在Properties里面存储的是各个需要索引的字段:

代码里面对应:

二、查看索引

目前DEV和QA环境可通过crxde后台直接进行查看:

Stage和Prod环境需要通过Experience后台跳转进入,过程如下:

首先进入Developer Console,然后登录:

进入Developer Console之后,有两种方式进行查看,第一种:

选中Oak Indexes,点击【Get Status】:

然后可以在下面这里找到自己想要查看的Index:

另外一种方式,通过Repository Browser:

在左侧树结构中可以导航到oak:index,这种方式更易于去查看:

三、分析索引

分析一个SQL的索引使用情况,可以通过queryPerformance后台查看,首先进入后台https://author-p44761-e210970.adobeaemcloud.com/libs/granite/operations/content/diagnosistools/queryPerformance.html :

选中一条记录,点Explain:

可以看到执行时,使用到的索引和执行时间:

同样,可以通过Explain Query去主动执行某个查询,然后查看具体情况:

Explain 结果:

四、索引属性说明

示例一

<dcTitle
    jcr:primaryType="nt:unstructured"
    boost="{Double}2.0"
    name="jcr:content/metadata/dc:title"
    nodeScopeIndex="{Boolean}true"
    ordered="{Boolean}true"
    propertyIndex="{Boolean}true"
    useInSpellcheck="{Boolean}true"
    useInSuggest="{Boolean}true"/>
属性含义
jcr:primaryTypeJCR 节点类型,这里使用 nt:unstructured 表示这是一个任意结构、无需预定义属性的节点,用于存放自定义的索引配置。
boost查询时的权重加权因子(Double)。值越大,该字段匹配时的分数越高,有助于提高包含该字段的文档在搜索结果中的排名。此处 2.0 表示对 dc:title 字段的匹配结果额外乘以 2。
name要索引的实际属性路径。jcr:content/metadata/dc:title 即资源节点下的 jcr:content/metadata 下的 dc:title 属性。
nodeScopeIndex是否在“节点范围索引”(node-scope index)中生效。设置为 true 时,Oak 会在全节点的索引结构中包含该属性,使得能够基于路径或组合条件进行更灵活的查询。
ordered是否构建有序索引(ordered index)。设置为 true 后,索引会维护该属性值的顺序(例如数值大小、字典序等),以支持范围查询(<, >, BETWEEN 等)。
propertyIndex是否对属性本身建立索引。true 表示直接建立 Lucene/ElasticSearch 等物理索引,以加速对该属性的精确匹配查询。
useInSpellcheck是否将该属性纳入拼写校正(spellcheck)组件。true 时,当用户输入搜索词有拼写错误时,系统会检查 dc:title 字段以尝试给出正确拼写建议。
useInSuggest是否将该属性用于自动完成功能(suggest)。true 时,系统会在用户输入搜索前缀时检索 dc:title 字段,提供补全建议(如下拉候选列表)。

总结

  • jcr:primaryType="nt:unstructured":声明这是一个自定义配置节点。

  • 打分相关boost 用于提高该字段在搜索结果中的重要度。

  • 索引范围nodeScopeIndex 影响整个节点范围的查询;propertyIndex 影响属性本身的精确匹配。

  • 查询类型ordered 支持范围查询;useInSpellcheck 与拼写校正;useInSuggest 与自动完成。

通过合理配置这些属性,AEM Oak 索引能够在性能与功能(如拼写校正、自动补全、范围查询等)之间取得平衡,满足复杂的搜索需求。

示例二

<dcFormat
    jcr:primaryType="nt:unstructured"
    analyzed="{Boolean}true"
    facets="{Boolean}true"
    name="jcr:content/metadata/dc:format"
    propertyIndex="{Boolean}true"/>
属性含义
jcr:primaryType节点类型,nt:unstructured 表示这是一个无需预定义模型的自定义配置节点,用于存放索引设置。
analyzed是否对字段值进行分词与分析。true 表示内容会经过分词器(Analyzer)处理,如拆分成词项、小写化、去停用词等,适用于全文搜索场景。
facets是否为该字段启用 Facet (分类/分面)功能。true 时,可以在搜索结果界面依据该字段值进行过滤或统计(例如按文件格式分类统计文档数量)。
name要索引的属性路径,此处为 jcr:content/metadata/dc:format,即资源节点的格式字段。
propertyIndex是否对该属性建立物理索引。true 表示会在底层索引中存储该字段,以加速基于该属性的精确匹配查询。

总结

  • 全文搜索analyzed="true" 使得 dc:format 可以参与全文搜索,通过分析器分词后匹配更灵活。

  • 分面导航facets="true" 支持在 UI 上按格式分类过滤与统计。

  • 精确查询propertyIndex="true" 保证对 dc:format 的精确值查询(如 format="pdf")能够快速命中。

通过以上配置,dc:format 字段既能被用于全文检索,也能作为分面维度,并且支持高效的精确匹配。

五、执行索引(Reindex)

5.1 执行机制解析

当你在索引节点(比如 /oak:index/your-index-name)上设置了:

"reindex": true

注:reindex 会在索引完成后 被自动设置为 false,并不会在下一次继续自动 reindex。

AEM(底层的 Apache Oak)会在下一次异步索引周期中检测到这个标志,然后执行以下流程:

  1. 标记该索引需要重新构建。

  2. 启动后台任务重新扫描内容树,生成新的索引数据。

  3. 索引构建完成后,自动执行:

    • reindex 设置为 false

    • 增加 reindexCount(每次递增)

    • 写入 reindexCompletionTimestamp(完成时间)


5.2 手动导包执行Reindex

可以导出具体的索引包,然后修改对应.content文件,然后导入执行install:

  • 手动部署一个 reindex=true 的包。

  • 等索引完成(通常可以通过 reindexCount 或日志查看)。

  • 系统会自动重置标志位,不会在每次重启或部署时重新索引


5.3 查看索引状态

可以通过如下路径查看某个索引的当前状态:

比如:/oak:index/assetLinkShare-1

注:reindex在执行完毕后自动被改回了false

关注这些属性:

  • reindex → false(表示当前没有需要重新索引)

  • reindexCount → 数值(重建了几次)

  • reindexCompletionTimestamp → 时间戳(最后一次完成时间)

或者通过 /system/console/jmxIndexStats MBean 查看相关信息。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理