Note: this feature is currently in Beta mode.
If you have any issues or questions, please open a ticket.
Simplified Index Management simple way to define custom indexes and customize out-of-the-box (OOTB) indexes, using one JSON file. There is no need to copy definitions, or to explicitly define versions. Customizations of index definitions are automatically merged with the latest out-of-the-box index, and if needed, a new index version is automatically created.
Indexes created using simplified index management have a property "mergeInfo" that links here. For more information about indexing, see: Content Search and Indexing.
There are two modes of operation. While the diff.json file is the same in both modes, the configuration and usage of simplified index management is slightly different.
| Immediate Mode | Pipeline Mode |
This is used when running AEM locally, or when using RDE (Rapid Development Environments) for AEM Cloud Service, without pipeline. In this mode, the changes are applied immediately, and the pipeline is not used.
Requirements: AEM as a Cloud Service 2025.03 (release 24893) or later, with Apache Jackrabbit Oak version 1.92 or later.
Changes in CRX/DE to the diff.index / diff.json file immediately create a new version of the respective index, and immediately reindexing starts in the environment.
This guide assumes you already have an AEM as a Cloud Service program with custom or customized indexes.
To create the diff index, open the AEM as a Cloud Service "Developer Console". Select "Status Dump": "Oak Indexes", and "Output Format": "JSON". Click "Get Status", and then click on the "Download" button at the top right. This will open the raw JSON file in a new tab. Select the whole content, and copy it to the clipboard. Then open the Index Definition Analyzer. and paste the content into the "Index Definitions (JSON)" textarea. Click "Analyze". On the right side, you will get the diff index. Verify it contains the changes you want to apply. If you manually changed the diff index, you can verify it by opening the Diff Index Verifier.
The following is an example of a diff.json file. It contains a customization for the damAssetLucene index, and a fully custom index named "custom.slingFolderNodeNames". For fully custom indexes, the name needs to contain a dot. The index name does not contains the "/oak:index/" prefix. Also, fully custom indexes need to have an "includedPaths" property that is not empty, and set to a path that doesn't include "/apps" or "/libs". It is best to set the "queryPaths" to the same value as the "includedPaths".
{
"damAssetLucene": {
"indexRules": {
"dam:Asset": {
"properties": {
"test1": {
"name": "test",
"propertyIndex": true
}
}
}
}
},
"custom.slingFolderNodeNames": {
"async": [ "async" ],
"compatVersion": 2,
"evaluatePathRestrictions": true,
"includedPaths": [ "/content/dam" ],
"queryPaths": [ "/content/dam" ],
"type": "lucene",
"indexRules": {
"sling:Folder": {
"indexNodeName": true
}
}
}
}
<baseName>-<productVersion>-custom-<customerVersion>. When a new merge produces a different result, the customer version is incremented.mergeInfo and mergeChecksum property are added to every merged index.mergeInfo property) is no longer referenced in the diff, the merged index is removed.The following rules apply when merging a diff with an OOTB index:
The following rules apply to the properties at the top level (properties of the index):
includedPaths, queryPaths, and tags are merged (union of old and new values) rather than overwritten, if the property already exists. The properties includedPaths and queryPaths may not be added if they don't exist yet (to avoid making the index more restrictive).selectionPolicy, valueRegex, queryFilterRegex, excludedPaths. They are dropped with a warning.Example:
{
"acmeAssetsLucene": {
"tags": [ "additionalTag" ],
"indexRules": {
"acme:Asset": {
"properties": {
"newProperty": {
"name": "newProperty",
"propertyIndex": true
}
}
}
}
}
}
properties node, the merger first tries to match by name value: if an existing child has the same name, the diff is applied to that child (even if the child node name differs).function value for function-based index properties.isRegexp, index, function, name. This prevents changing how an existing property is indexed.boost and weight.In addition, the following rules are used when merging. In most cases, they are irrelevant, but listed here for completeness.
reindex, reindexCount, refresh, seed, :version, :nameSeed, :mappingVersion, merges, mergeInfo, and mergeChecksum are stripped.str:, nam:, dat:) are normalized away for comparison.jcr:primaryType property is silently ignored at the top level.properties child node.jcr:uuid properties are removed (new UUIDs are generated when needed).If you have any issues or questions, please please open a ticket.