——————————目录大纲——————————
————————————————————————一、索引结构
索引目录: 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:primaryType | JCR 节点类型,这里使用 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)会在下一次异步索引周期中检测到这个标志,然后执行以下流程:
标记该索引需要重新构建。
启动后台任务重新扫描内容树,生成新的索引数据。
索引构建完成后,自动执行:
将
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/jmx 的 IndexStats MBean 查看相关信息。
上一篇
AEM测试覆盖率说明下一篇
AEM访问性能指标