Ricerca e indicizzazione dei contenuti indexing
Modifiche in AEM as a Cloud Service changes-in-aem-as-a-cloud-service
Con AEM as a Cloud Service, Adobe si sta spostando da un modello AEM incentrato sull’istanza a una visualizzazione basata sul servizio con contenitori AEM n-x, guidata dalle pipeline CI/CD in Cloud Manager. Invece di configurare e mantenere gli indici su singole istanze di AEM, è necessario specificare la configurazione dell’indice prima di una distribuzione. I cambiamenti di configurazione nella produzione stanno interrompendo i criteri CI/CD. Lo stesso vale per le modifiche dell’indice, poiché può influire sulla stabilità e sulle prestazioni del sistema se non specificato, testato e reindicizzato prima di avviarlo alla produzione.
Di seguito è riportato un elenco delle modifiche principali rispetto ad AEM 6.5 e versioni precedenti:
- Gli utenti non hanno più accesso al Gestore indice di una singola istanza AEM per eseguire il debug, configurare o mantenere l’indicizzazione. Viene utilizzato solo per lo sviluppo locale e le distribuzioni on-premise.
- Gli utenti non modificano gli indici su una singola istanza di AEM, né devono più preoccuparsi dei controlli di coerenza o della reindicizzazione.
- In generale, le modifiche dell’indice vengono avviate prima di passare alla produzione per non aggirare i gateway di qualità nelle pipeline CI/CD di Cloud Manager e non influire sui KPI aziendali in produzione.
- Tutte le metriche correlate, comprese le prestazioni di ricerca in produzione, sono disponibili per i clienti in fase di runtime per fornire una visione olistica degli argomenti di ricerca e indicizzazione.
- I clienti possono impostare gli avvisi in base alle proprie esigenze.
- Gli SRE monitorano lo stato di salute del sistema 24 ore su 24, 7 giorni su 7 e intervengono il prima possibile.
- La configurazione dell’indice viene modificata tramite le distribuzioni. Le modifiche alla definizione dell’indice sono configurate come altre modifiche al contenuto.
- A un livello elevato in AEM as a Cloud Service, con l'introduzione del modello di distribuzione continua, esistono due set di indici: uno per la versione precedente e uno per la nuova versione.
- I clienti possono vedere se il processo di indicizzazione è stato completato nella pagina di build di Cloud Manager e ricevere una notifica quando la nuova versione è pronta per il traffico.
Limiti:
- Attualmente, la gestione degli indici su AEM as a Cloud Service è supportata solo per gli indici di tipo
lucene. Tutte le personalizzazioni dell'indice devono essere di tipolucene. La proprietàasyncpuò essere solo una delle seguenti:[async],[async,nrt]o[fulltext-async]. - Internamente, possono essere configurati e utilizzati per le query altri indici. È possibile, ad esempio, che le query scritte sull'indice
damAssetLucenevengano eseguite in AEM as a Cloud Service in base a una versione Elasticsearch dell'indice. Questa differenza non è visibile all’utente. Tuttavia, alcuni strumenti come la funzionalitàexplainriportano un indice diverso. Per le differenze tra gli indici Lucene e gli indici Elastic, vedi la documentazione Elastic in Apache Jackrabbit Oak. I clienti non devono e non possono configurare direttamente gli indici di Elasticsearch. - Sono supportati solo gli analizzatori standard (ovvero gli analizzatori forniti con il prodotto). Gli analizzatori personalizzati non sono supportati.
- La ricerca per vettori di funzionalità simili (
useInSimilarity = true) non è supportata.
Guida all’uso how-to-use
Le definizioni degli indici possono essere suddivise in tre casi d’uso principali, come segue:
- Aggiungi una nuova definizione di indice personalizzato.
- Aggiorna una definizione di indice esistente aggiungendo una nuova versione.
- Rimuovi una definizione di indice non più necessaria.
Per entrambi i punti 1 e 2 di cui sopra, devi creare una definizione dell’indice come parte della base di codice personalizzato nella rispettiva pianificazione delle versioni di Cloud Manager. Per ulteriori informazioni, vedere la documentazione Distribuzione in AEM as a Cloud Service.
Se è necessaria una modifica nella configurazione dell'indice, verificare che la configurazione sia conforme alle linee guida fornite nella sezione Configurazione del progetto. Apportare le modifiche necessarie di conseguenza.
Configurazione del progetto
Per incorporarlo nel progetto, segui questi passaggi:
-
Si consiglia vivamente di utilizzare la versione >=
1.3.2del Jackrabbitfilevault-package-maven-plugin. Se necessario, aggiornare la versione nel livello principalepom.xml:code language-xml <plugin> <groupId>org.apache.jackrabbit</groupId> <artifactId>filevault-package-maven-plugin</artifactId> ... <version>1.3.2</version> ... </plugin> -
Aggiungi quanto segue al livello principale
pom.xml:code language-xml <jackrabbit-packagetype> <options> <immutableRootNodeNames>apps,libs,oak:index</immutableRootNodeNames> </options> </jackrabbit-packagetype>Di seguito è riportato un esempio del file
pom.xmldi primo livello del progetto con le configurazioni sopra indicate:Nome file:
pom.xmlcode language-xml <plugin> <groupId>org.apache.jackrabbit</groupId> <artifactId>filevault-package-maven-plugin</artifactId> ... <version>1.3.2</version> <configuration> ... <validatorsSettings> <jackrabbit-packagetype> <options> <immutableRootNodeNames>apps,libs,oak:index</immutableRootNodeNames> </options> </jackrabbit-packagetype> ... ... </plugin> -
In
ui.apps/pom.xmleui.apps.structure/pom.xml, è necessario abilitare le opzioniallowIndexDefinitionsenoIntermediateSavesinfilevault-package-maven-plugin. L'abilitazione diallowIndexDefinitionsconsente definizioni di indice personalizzate, mentrenoIntermediateSavesgarantisce che le configurazioni vengano aggiunte atomicamente.Nomi file:
ui.apps/pom.xmleui.apps.structure/pom.xmlcode language-xml <plugin> <groupId>org.apache.jackrabbit</groupId> <artifactId>filevault-package-maven-plugin</artifactId> <configuration> <allowIndexDefinitions>true</allowIndexDefinitions> <properties> <cloudManagerTarget>none</cloudManagerTarget> <noIntermediateSaves>true</noIntermediateSaves> </properties> ... </plugin> -
Aggiungi un filtro per
/oak:indexinui.apps.structure/pom.xml:code language-xml <filters> ... <filter><root>/oak:index</root></filter> </filters>
Gestione semplificata dell’indice tramite l’indice Diff
La maggior parte degli indici AEM può essere configurata utilizzando la gestione semplificata degli indici.
Questo fornisce un modo semplice per personalizzare gli indici predefiniti e per definire indici personalizzati utilizzando un file JSON.
Limitazioni: la gestione semplificata degli indici non è attualmente disponibile per gli indici che includono /apps, /libs.
Può essere utilizzato per tutti gli indici con proprietà includedPaths, ad esempio /content.
Per gli indici senza una proprietà includedPaths o in cui includedPaths contiene /apps o /libs,
puoi modificare la query o utilizzare la modalità Configurazioni indice legacy di seguito.
La gestione semplificata degli indici consente di personalizzare gli indici predefiniti esistenti e di aggiungere indici completamente personalizzati.
Con la gestione semplificata degli indici non è necessario copiare le definizioni o definire esplicitamente le versioni.
Le personalizzazioni delle definizioni degli indici vengono unite automaticamente all’ultimo indice predefinito,
e, se necessario, viene creata una nuova versione dell’indice.
Per la maggior parte degli indici è possibile creare indici personalizzati e personalizzazioni di indici esistenti utilizzando un pacchetto diff.index.
Per configurare tale indice, utilizza la seguente guida dettagliata.
L'esempio seguente personalizza l'indice damAssetLucene
e introduce contemporaneamente un indice completamente personalizzato.
Il processo è il seguente:
-
Creare una nuova cartella nella directory
ui.appsdenominataui.apps/src/main/content/jcr_root/_oak_index/diff.index. -
Aggiungere un file di configurazione
.content.xml(si tratta di una configurazione segnaposto obbligatoria, non di una definizione di indice regolare) con il contenuto seguente:ui.apps/src/main/content/jcr_root/_oak_index/diff.index/.content.xmlcode language-xml <?xml version="1.0" encoding="UTF-8"?><jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" jcr:primaryType="nt:unstructured" type="lucene" includedPaths="/same" queryPaths="/same" async="async"> <diff.json jcr:primaryType="nt:file"/></jcr:root> -
Creare un file di testo
diff.jsoncon il contenuto seguente.
In questo esempio viene personalizzato l'indice predefinitodamAssetLucene
per indicizzare ulteriormente la proprietà denominatatest. Definiamo anche
un indice completamente personalizzato denominatoacme.testIndexche indicizza la proprietàtestingnei nodint:unstructured:ui.apps/src/main/content/jcr_root/_oak_index/diff.index/diff.jsoncode language-json { "damAssetLucene": { "indexRules": { "dam:Asset": { "properties": { "test": { "name": "test", "propertyIndex": true } } } } }, "acme.testIndex": { "async": [ "async" ], "compatVersion": 2, "evaluatePathRestrictions": true, "includedPaths": [ "/content" ], "queryPaths": [ "/content" ], "selectionPolicy": "tag", "tags": [ "testing" ], "type": "lucene", "indexRules": { "nt:unstructured": { "properties": { "testing": { "name": "testing", "propertyIndex": true } } } } } } -
Aggiungere una voce al filtro FileVault in
ui.apps/src/main/content/META-INF/vault/filter.xml:code language-xml <?xml version="1.0" encoding="UTF-8"?> <workspaceFilter version="1.0"> ... <filter root="/oak:index/diff.index"/> </workspaceFilter>
Dopo aver applicato le modifiche, distribuisci la nuova applicazione utilizzando Cloud Manager.
Questa distribuzione avvia due processi di aggiunta (e unione, se necessario)
le definizioni degli indici per l’authoring e la pubblicazione.
Prima dello switch, gli archivi sottostanti vengono reindicizzati utilizzando le definizioni di indice aggiornate.
Configurazioni indice legacy
Indici che non possono essere configurati utilizzando la gestione semplificata degli indici
deve utilizzare la modalità di configurazione legacy.
La configurazione dell'indice legacy si applica solo agli indici che non possono avere una proprietà includedPaths
o che hanno una proprietà che deve coprire /apps, /libs o /.
Alcuni indici predefiniti descrivono questi percorsi:
cqPageLucene: se è necessario personalizzare questo indice,
valutare la possibilità di eseguire la migrazione delle query per utilizzarecqPageContent,
che ha un valoreincludedPathsdi/contente un tag.ntBaseLucene: si consiglia di evitare la modifica di questo indice,
e utilizzando invece un indice completamente personalizzato con un prefisso comeacme.,
che copre solo i percorsi richiesti.
Per ulteriori informazioni, consulta la sezione Gestione semplificata degli indici.
Nomi indice index-names
Una definizione di indice può rientrare in una delle seguenti categorie:
-
Indice preconfigurato. Si tratta di indici predefiniti forniti da AEM. Ad esempio:
/oak:index/cqPageLucene-2o/oak:index/damAssetLucene-8. -
Personalizzazione di un indice OOTB. Per personalizzare un indice OOTB, aggiungere
-custom-seguito da un numero./oak:index/damAssetLucene-8-custom-1è la personalizzazione dell'indice OOTB/oak:index/damAssetLucene-8. Una personalizzazione è in genere una copia dell’indice OOTB, oltre a proprietà aggiuntive che devono essere indicizzate. -
Indice completamente personalizzato: puoi creare un indice completamente nuovo da zero. Questi indici devono terminare con
-custom-e un numero di versione. Inoltre, per evitare conflitti di denominazione, utilizza un prefisso nel nome dell’indice. Ad esempio:/oak:index/acme.product-1-custom-2, doveacme.è il prefisso.
dam:Asset (in particolare gli indici full-text) è fortemente sconsigliata in quanto possono entrare in conflitto con le funzionalità dei prodotti OOTB, causando problemi funzionali e di prestazioni. Il modo più appropriato per indicizzare le query sul tipo di nodo dam:Asset consiste invece nel personalizzare l'indice damAssetLucene-* aggiungendo le proprietà aggiuntive. Queste modifiche verranno automaticamente unite a una nuova versione del prodotto nelle versioni successive. In caso di dubbi, contatta il supporto Adobe per un consiglio.Preparazione della nuova definizione dell’indice preparing-the-new-index-definition
damAssetLucene-8, copiare l'ultima definizione di indice preconfigurato da un ambiente Cloud Service utilizzando Gestione pacchetti CRX DE (/crx/packmgr/). Rinominalo in damAssetLucene-8-custom-1 (o versione successiva) e aggiungi le tue personalizzazioni nel file XML. Se l'indice nell'ambiente cloud è di tipo elasticsearch, sono necessarie ulteriori modifiche: modificare la proprietà type in lucene, modificare la proprietà async in [async,nrt] e modificare la proprietà similarityTags in true. In questo modo le configurazioni richieste non vengono rimosse inavvertitamente. Ad esempio, il nodo tika in /oak:index/damAssetLucene-8/tika è richiesto nell'indice personalizzato distribuito in un ambiente AEM Cloud Service, ma non esiste nell'SDK AEM locale.Per le personalizzazioni di un indice OOTB, prepara un nuovo pacchetto contenente la definizione di indice personalizzata. Il nome dell’indice deve seguire il pattern di denominazione:
<indexName>-<productVersion>-custom-<customVersion>
Per un indice completamente personalizzato, prepara un nuovo pacchetto di definizione dell’indice che contiene la definizione dell’indice che segue questo pattern di denominazione:
<prefix>.<indexName>-<productVersion>-custom-<customVersion>
Come indicato nelle sezioni delle limitazioni, type della definizione dell'indice personalizzato deve essere sempre impostato su lucene anche se la definizione dell'indice estratto tramite Gestione pacchetti è di un tipo diverso (ad esempio elasticsearch).
È inoltre necessario modificare la proprietà async se la definizione dell'indice estratto è impostata su elastic-async. La proprietà async deve essere impostata su uno dei seguenti valori: [async], [async,nrt] o [fulltext-async] per la definizione dell'indice personalizzato.
properties.xml del pacchetto di contenuto. properties.xml viene creato per impostazione predefinita in un nuovo pacchetto e si trova in <package_name>/META-INF/vault/properties.xml:-
noIntermediateSaves=true -
allowIndexDefinitions=true
Distribuzione di definizioni indice personalizzate deploying-custom-index-definitions
Per illustrare la distribuzione di una versione personalizzata dell'indice predefinito damAssetLucene-8, verrà fornita una guida dettagliata. In questo esempio verrà rinominato damAssetLucene-8-custom-1. Il processo è quindi il seguente:
-
Creare una nuova cartella con il nome di indice aggiornato nella directory
ui.apps:- Esempio:
ui.apps/src/main/content/jcr_root/_oak_index/damAssetLucene-8-custom-1/
- Esempio:
-
Aggiungere un file di configurazione
.content.xmlcon le configurazioni personalizzate nella cartella creata. Di seguito è riportato un esempio di personalizzazione:
Nome file:ui.apps/src/main/content/jcr_root/_oak_index/damAssetLucene-8-custom-1/.content.xmlcode language-xml <?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:dam="http://www.day.com/dam/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" xmlns:oak="http://jackrabbit.apache.org/oak/ns/1.0" xmlns:rep="internal" jcr:mixinTypes="[rep:AccessControllable]" jcr:primaryType="oak:QueryIndexDefinition" async="[async,nrt]" compatVersion="{Long}2" evaluatePathRestrictions="{Boolean}true" includedPaths="[/content/dam]" maxFieldLength="{Long}100000" type="lucene"> <facets jcr:primaryType="nt:unstructured" secure="statistical" topChildren="100"/> <indexRules jcr:primaryType="nt:unstructured"> <dam:Asset jcr:primaryType="nt:unstructured"> <properties jcr:primaryType="nt:unstructured"> <cqTags jcr:primaryType="nt:unstructured" name="jcr:content/metadata/cq:tags" nodeScopeIndex="{Boolean}true" propertyIndex="{Boolean}true" useInSpellcheck="{Boolean}true" useInSuggest="{Boolean}true"/> </properties> </dam:Asset> </indexRules> <tika jcr:primaryType="nt:folder"> <config.xml jcr:primaryType="nt:file"/> </tika> </jcr:root> -
Aggiungere una voce al filtro FileVault in
ui.apps/src/main/content/META-INF/vault/filter.xml:code language-xml <?xml version="1.0" encoding="UTF-8"?> <workspaceFilter version="1.0"> ... <filter root="/oak:index/damAssetLucene-8-custom-1"/> </workspaceFilter> -
Aggiungi un file di configurazione per Apache Tika in:
ui.apps/src/main/content/jcr_root/_oak_index/damAssetLucene-8-custom-1/tika/config.xml:code language-xml <properties> <detectors> <detector class="org.apache.tika.detect.TypeDetector"/> </detectors> <parsers> <parser class="org.apache.tika.parser.DefaultParser"> <mime>text/plain</mime> </parser> </parsers> <service-loader initializableProblemHandler="ignore" dynamic="true"/> </properties> -
Assicurati che la configurazione sia conforme alle linee guida fornite nella sezione Configurazione del progetto. Apportare le modifiche necessarie di conseguenza.
Gestione dell’indice tramite distribuzioni continue index-management-using-rolling-deployments
Gestione dell’indice what-is-index-management
La gestione degli indici riguarda l’aggiunta, la rimozione e la modifica degli indici. La modifica della definizione di un indice è veloce, ma la sua applicazione (spesso chiamata “creazione di un indice”, o, per gli indici esistenti, “reindicizzazione”) richiede tempo. Non è istantaneo: l’archivio deve essere analizzato per individuare i dati da indicizzare.
Cosa sono le distribuzioni continue what-are-rolling-deployments
Una distribuzione continua consente di eseguire senza tempi di inattività gli aggiornamenti e offre rapidi rollback. La vecchia versione dell'applicazione viene eseguita contemporaneamente alla nuova versione dell'applicazione.
Aree di sola lettura e di lettura/scrittura read-only-and-read-write-areas
Alcune aree dell’archivio (parti di sola lettura dell’archivio) possono essere diverse nella vecchia e nella nuova versione dell’applicazione. Le aree di sola lettura dell'archivio sono in genere /app e /libs. Nell’esempio seguente, il corsivo viene utilizzato per contrassegnare le aree di sola lettura, mentre il grassetto viene utilizzato per le aree di lettura/scrittura.
- /
- /apps (sola lettura)
- /content
- /libs (sola lettura)
- /oak:index
- /oak:index/acme.
- /jcr:system
- /system
- /var
Le aree di lettura-scrittura dell’archivio sono condivise tra tutte le versioni dell’applicazione, mentre per ogni versione dell’applicazione, esiste un set specifico di /apps e /libs.
Gestione degli indici senza distribuzioni continue index-management-without-rolling-deployments
Durante lo sviluppo o quando si utilizzano installazioni on-premise, gli indici possono essere aggiunti, rimossi o modificati in fase di runtime. Gli indici vengono utilizzati quando sono disponibili. Se un indice non è ancora utilizzato nella vecchia versione dell’applicazione, in genere viene generato durante un periodo di inattività pianificato. Lo stesso si verifica quando si rimuove un indice o si modifica un indice esistente. Quando si rimuove un indice, questo diventa non disponibile.
Gestione degli indici con distribuzioni continue index-management-with-rolling-deployments
Con le distribuzioni continue, non si verificano tempi di inattività. Per un certo periodo di tempo durante un aggiornamento, sia la vecchia versione (ad esempio, la versione 1) dell’applicazione che la nuova versione (versione 2) vengono eseguite contemporaneamente sullo stesso archivio. Se la versione 1 richiede la disponibilità di un determinato indice, questo non deve essere rimosso nella versione 2. L’indice deve essere rimosso in un secondo momento, ad esempio nella versione 3, che garantisce che la versione 1 dell’applicazione non è più in esecuzione. Inoltre, le applicazioni devono essere scritte in modo che la versione 1 funzioni bene, anche se la versione 2 è in esecuzione, e se sono disponibili indici della versione 2.
Al termine dell’aggiornamento alla nuova versione, i vecchi indici possono essere raccolti come rifiuti dal sistema. I vecchi indici in genere rimangono per una settimana, per velocizzare i rollback (se dovesse essere necessario un rollback).
La tabella seguente mostra cinque definizioni di indice: l’indice cqPageLucene viene utilizzato in entrambe le versioni mentre l’indice damAssetLucene-custom-1 viene utilizzato solo nella versione 2.
<indexName>-custom-<customerVersionNumber> è necessario affinché AEM as a Cloud Service possa contrassegnarlo come sostitutivo di un indice esistente.Il numero di versione è incrementato ogni volta che l’indice viene modificato. Per evitare che i nomi di indice personalizzati si scontrino con i nomi di indice del prodotto stesso, gli indici personalizzati e le modifiche agli indici predefiniti devono terminare con -custom-<number>.
Modifiche agli indici predefiniti changes-to-out-of-the-box-indexes
Dopo che Adobe ha modificato un indice predefinito come damAssetLucene o cqPageLucene, viene creato un nuovo indice denominato damAssetLucene-2 o cqPageLucene-2. Oppure, se l’indice è già stato personalizzato, la definizione dell’indice personalizzato viene unita alle modifiche nell’indice predefinito, come mostrato di seguito. L’unione delle modifiche avviene automaticamente. Ciò significa che non è necessario eseguire alcuna operazione se un indice predefinito cambia. Tuttavia, è possibile personalizzare di nuovo l’indice in un secondo momento. In questo caso, è importante utilizzare la versione più recente (unita) come linea di base.
È importante notare che gli ambienti potrebbero trovarsi su diverse versioni di AEM. Ad esempio: l'ambiente dev è nella versione X+1 mentre stage e prod sono ancora nella versione X e sono in attesa di essere aggiornati alla versione X+1 dopo l'esecuzione dei test richiesti in dev. Se la versione X+1 include una versione più recente di un indice di prodotto che è stata personalizzata ed è necessaria una nuova personalizzazione di tale indice, la tabella seguente spiegherà quali versioni devono essere impostate sugli ambienti basati sulla versione di AEM:
Limitazioni attuali current-limitations
La gestione degli indici è supportata solo per gli indici di tipo lucene, con compatVersion impostato su 2. Internamente, possono essere configurati e utilizzati per le query altri indici, ad esempio gli indici Elasticsearch. In AEM as a Cloud Service, le query scritte sull'indice damAssetLucene potrebbero essere eseguite su una versione Elasticsearch di questo indice. Questa differenza è invisibile all'utente dell'applicazione, tuttavia alcuni strumenti come la funzionalità explain segnalano un indice diverso. Per le differenze tra gli indici Lucene e Elasticsearch, consulta la documentazione di Elasticsearch in Apache Jackrabbit Oak. I clienti non possono e non devono configurare direttamente gli indici Elasticsearch.
Sono supportati solo gli analizzatori incorporati (ovvero, gli analizzatori forniti con il prodotto). Gli analizzatori personalizzati non sono supportati.
Al momento, l'indicizzazione del contenuto di /oak:index non è supportata.
Per ottenere le migliori prestazioni operative, gli indici non dovrebbero essere eccessivamente grandi. La dimensione totale di tutti gli indici può essere utilizzata come guida. Se questa dimensione aumenta di oltre il 100% dopo l’aggiunta degli indici personalizzati e la regolazione degli indici standard in un ambiente di sviluppo, è necessario regolare le definizioni degli indici personalizzati. AEM as a Cloud Service può impedire la distribuzione o la rimozione di indici che influirebbero negativamente sulla stabilità e sulle prestazioni del sistema.
Aggiunta di un indice adding-an-index
Per aggiungere un indice completamente personalizzato denominato /oak:index/acme.product-1-custom-1, da utilizzare in una nuova versione dell'applicazione e successivamente, è necessario configurare l'indice come segue:
acme.product-1-custom-1
Questa configurazione funziona ponendo un identificatore personalizzato davanti al nome dell'indice, seguito da un punto (.). L’identificatore deve contenere da 2 a 5 caratteri.
Come sopra, questa configurazione assicura che l’indice sia utilizzato solo dalla nuova versione dell’applicazione.
Modifica di un indice changing-an-index
Quando viene modificato un indice esistente, è necessario aggiungere un nuovo indice con la modifica della definizione. Ad esempio, supponi che l’indice esistente /oak:index/acme.product-1-custom-1 venga modificato. Il vecchio indice è memorizzato in /oak:index/acme.product-1-custom-1 e il nuovo indice è memorizzato in /oak:index/acme.product-1-custom-2.
La vecchia versione dell’applicazione utilizza la seguente configurazione:
/oak:index/acme.product-1-custom-1
La nuova versione dell’applicazione utilizza la seguente configurazione (modificata):
/oak:index/acme.product-1-custom-2
Annullamento di una modifica undoing-a-change
A volte, è necessario annullare una modifica in una definizione di indice, ad esempio a causa di un errore o perché la modifica non è più necessaria. Se ad esempio la definizione dell'indice damAssetLucene-8-custom-3 contiene un errore, è possibile ripristinare la definizione precedente, damAssetLucene-8-custom-2. A tale scopo, creare un nuovo indice denominato damAssetLucene-8-custom-4 che sia una copia dell'indice precedente, damAssetLucene-8-custom-2.
Rimozione di un indice removing-an-index
Ciò che segue si applica solo alle personalizzazioni degli indici predefiniti e agli indici completamente personalizzati. Gli indici OOTB originali non possono essere rimossi, in quanto sono utilizzati da AEM.
Per garantire l’integrità e la stabilità del sistema, una volta implementate, le definizioni degli indici dovrebbero essere trattate come immutabili. Se devi rimuovere un indice personalizzato o una personalizzazione, crea una nuova versione di tale indice con una definizione che simuli efficacemente la rimozione
(vedi gli esempi di seguito).
Una volta distribuita una nuova versione di un indice, la versione precedente dello stesso indice non verrà più utilizzata dalle query.
La versione precedente non verrà eliminata immediatamente dall’ambiente,
ma diventerà idoneo per la raccolta di rifiuti tramite un meccanismo di pulizia che viene eseguito periodicamente.
Dopo un periodo di tolleranza progettato per consentire il recupero in caso di errori
(attualmente, 7 giorni a partire dalla rimozione dell’indicizzazione, ma soggetti a modifiche),
questo meccanismo di pulizia eliminerà i dati di indice non utilizzati,
e disabilita o rimuove la versione precedente dell’indice dall’ambiente.
Di seguito vengono descritti i due casi possibili: rimozione delle personalizzazioni di un indice OOTB e rimozione di un indice completamente personalizzato.
Rimozione delle personalizzazioni di un indice predefinito
Segui i passaggi descritti in Annullamento di una modifica utilizzando le definizioni dell'indice OOTB come nuova versione. Ad esempio, se damAssetLucene-8-custom-3 è già stato distribuito, ma non sono più necessarie le personalizzazioni e si desidera tornare all'indice predefinito damAssetLucene-8, è necessario aggiungere un indice damAssetLucene-8-custom-4 che contiene la definizione dell'indice di damAssetLucene-8.
Rimozione di un indice completamente personalizzato
Segui i passaggi descritti in Annullamento di una modifica utilizzando un indice fittizio come nuova versione. Un indice fittizio non viene mai utilizzato per le query e non contiene dati, pertanto l’effetto è lo stesso di un indice inesistente. In questo esempio è possibile denominarlo /oak:index/acme.product-1-custom-3. Questo nome sostituisce l'indice /oak:index/acme.product-1-custom-2. Un esempio di tale indice fittizio è:
<acme.product-1-custom-3
jcr:primaryType="oak:QueryIndexDefinition"
async="async"
compatVersion="2"
includedPaths="/dummy"
queryPaths="/dummy"
type="lucene">
<indexRules jcr:primaryType="nt:unstructured">
<rep:root jcr:primaryType="nt:unstructured">
<properties jcr:primaryType="nt:unstructured">
<dummy
jcr:primaryType="nt:unstructured"
name="dummy"
propertyIndex="{Boolean}true"/>
</properties>
</rep:root>
</indexRules>
</acme.product-1-custom-3>
Ottimizzazioni di indici e query index-query-optimizations
Apache Jackrabbit Oak consente configurazioni di indice flessibili per gestire in modo efficiente le query di ricerca. Gli indici sono particolarmente importanti per gli archivi più grandi. Assicurati che tutte le query siano supportate da un indice appropriato. Le query senza un indice appropriato possono leggere migliaia di nodi, che vengono quindi registrati come un avviso.
Consulta questo documento per informazioni su come è possibile ottimizzare le query e gli indici.