Best practices indexeren in AEM
Meer informatie over het indexeren van beste praktijken in Adobe Experience Manager (AEM). Apache Jackrabbit Oak bevoegdheden het inhoudsonderzoek in AEM en het volgende zijn zeer belangrijke punten:
- AEM biedt verschillende indexen om de zoek- en queryfunctionaliteit te ondersteunen, bijvoorbeeld
damAssetLucene,cqPageLuceneen meer. - Alle indexdefinities worden opgeslagen in de gegevensopslagruimte onder het knooppunt
/oak:index. - AEM as a Cloud Service ondersteunt alleen Oak Lucene-indexen.
- De configuratie van de index zou in de het projectcodebase van AEM moeten worden beheerd en gebruikend Cloud Manager CI/CD pijpleidingen worden opgesteld.
- Als de veelvoudige indexen voor een bepaalde vraag beschikbaar zijn, wordt de index met de laagste geschatte kosten gebruikt.
- Als er geen index beschikbaar is voor een bepaalde query, wordt de inhoudsstructuur doorlopen om de overeenkomende inhoud te zoeken. De standaardlimiet via
org.apache.jackrabbit.oak.query.QueryEngineSettingsServiceis echter slechts 100.000 knooppunten. - De resultaten van een vraag worden gefiltreerd minstens om ervoor te zorgen dat de huidige gebruiker toegang heeft gelezen. Dit betekent dat de vraagresultaten kleiner kunnen zijn dan het aantal geïndexeerde knopen.
- Het opnieuw indexeren van de repository na wijzigingen in de indexdefinitie vergt tijd en hangt af van de grootte van de repository.
Om een efficiënte en correcte onderzoeksfunctionaliteit te hebben die niet de prestaties van de instantie van AEM beïnvloedt, is het belangrijk om de het indexeren beste praktijken te begrijpen.
Aangepaste versus OTB-index
Soms moet u aangepaste indexen maken ter ondersteuning van uw zoekvereisten. Volg echter onderstaande richtlijnen voordat u aangepaste indexen maakt:
-
Begrijp de onderzoeksvereisten en controleer als de indexen OOTB de onderzoeksvereisten kunnen steunen. Het Hulpmiddel van de Prestaties van de Vraag van het gebruik , beschikbaar bij lokale SDK en AEMCS via Developer Console of .
https://author-pXXXX-eYYYY.adobeaemcloud.com/ui#/aem/libs/granite/operations/content/diagnosistools/queryPerformance.html?appId=aemshell -
Bepaal een optimale vraag, gebruik optimaliserend vragen stroomdiagram en JCR de Controle van de Vraag Sheet voor verwijzing.
-
Als de OOTB-indexen de zoekvereisten niet ondersteunen, hebt u twee opties. Nochtans, herzie de Uiteinden voor het Creëren van Efficiënte Indexen
- Pas de OOTB-index aan: voorkeursoptie omdat u deze eenvoudig kunt onderhouden en upgraden.
- Volledig aangepaste index: alleen als de bovenstaande optie niet werkt.
De OOTB-index aanpassen
-
In AEMCS, wanneer het aanpassen van het OTB indexgebruik \ <OOTBIndexName>-\ <productVersion>-douane- \ <customVersion> noemende overeenkomst. Bijvoorbeeld
cqPageLucene-custom-1ofdamAssetLucene-8-custom-1. Zo kunt u de aangepaste indexdefinitie samenvoegen wanneer de OTB-index wordt bijgewerkt. Zie Veranderingen in uit-van-de-Doos Indexen voor meer details. -
In AEM 6.X, werkt het bovengenoemde noemen niet, echter werkt eenvoudig de index OTB met noodzakelijke eigenschappen in de
indexRulesknoop bij. -
Kopieer altijd de nieuwste OOTB-indexdefinitie van de AEM-instantie met CRX DE Package Manager (https://experienceleague.adobe.com/crx/packmgr/?lang=nl), wijzig de naam en voeg aanpassingen toe in het XML-bestand.
-
Sla indexdefinitie op in het AEM-project op
ui.apps/src/main/content/jcr_root/_oak_indexen implementeer deze met Cloud Manager CI/CD-leidingen. Zie het Opstellen van de Definities van de Index van de Douane voor meer details.
Volledig aangepaste index
Het maken van een volledig aangepaste index moet de laatste optie zijn en alleen als de bovenstaande optie niet werkt.
-
Gebruik <prefix> wanneer u een volledig aangepaste index maakt.<customIndexName>-<version>-douane- \ <customVersion> noemende overeenkomst. Bijvoorbeeld
wknd.adventures-1-custom-1. Zo voorkomt u naamconflicten. Hier iswkndhet voorvoegsel enadventuresde aangepaste indexnaam. Deze conventie geldt voor zowel AEM 6.X als AEMCS en helpt bij de voorbereiding op toekomstige migratie naar AEMCS. -
AEMCS steunt slechts indexen van Lucene, zodat om voor toekomstige migratie aan AEMCS voor te bereiden, gebruik altijd indexen van Lucene. Zie Indexen van Lucene vs Indexen van het Bezit voor meer details.
-
Maak geen aangepaste index op hetzelfde knooppunttype als de OOTB-index. Pas in plaats daarvan de OOTB-index aan met de benodigde eigenschappen in het knooppunt
indexRules. Maak bijvoorbeeld geen aangepaste index voor het knooppunttypedam:Asset, maar pas de OOTBdamAssetLucene-index aan. het is een gemeenschappelijke worteloorzaak van prestaties en functionele kwesties geweest. -
Vermijd ook het toevoegen van meerdere knooppunttypen, bijvoorbeeld
cq:Pageencq:Tagonder het knooppunt indexeringsregels (indexRules). Maak in plaats daarvan afzonderlijke indexen voor elk type knooppunt. -
Zoals vermeld in bovenstaande sectie, sla indexdefinitie in het AEM project bij
ui.apps/src/main/content/jcr_root/_oak_indexop en stel het op gebruikend Cloud Manager CI/CD pijpleidingen. Zie het Opstellen van de Definities van de Index van de Douane voor meer details. -
De richtlijnen voor indexdefinitie zijn:
- Het knooppunttype (
jcr:primaryType) zouoak:QueryIndexDefinitionmoeten zijn - Het indextype (
type) moetlucenezijn - De eigenschap async (
async) moetasync,nrtzijn - Gebruik
includedPathsen vermijd de eigenschapexcludedPaths. StelqueryPathsaltijd in op dezelfde waarde alsincludedPathsvalue. - Gebruik de eigenschap
evaluatePathRestrictionsom de padbeperking in te stellen optrue. - Gebruik de eigenschap
tagsom de index te labelen en geef tijdens het opvragen de waarde van deze tags op om de index te gebruiken. De algemene querysyntaxis is is<query> option(index tag <tagName>).
code language-xml /oak:index/wknd.adventures-1-custom-1 - jcr:primaryType = "oak:QueryIndexDefinition" - type = "lucene" - compatVersion = 2 - async = ["async", "nrt"] - includedPaths = ["/content/wknd"] - queryPaths = ["/content/wknd"] - evaluatePathRestrictions = true - tags = ["customAdvSearch"] ... - Het knooppunttype (
Voorbeelden
Om de beste praktijken te begrijpen, herzien enkele voorbeelden.
Onjuist gebruik van eigenschap tags
Onder de afbeelding ziet u een aangepaste en OOTB-indexdefinitie, waarbij de eigenschap tags wordt gemarkeerd. Beide indexen gebruiken dezelfde visualSimilaritySearch -waarde.
Analyse
Dit is een onjuist gebruik van de eigenschap tags op de aangepaste index. De Oak-query-engine selecteert de aangepaste index boven de OOTB-indexoorzaak van de laagste geschatte kosten.
De juiste manier is om de OOTB-index aan te passen en de benodigde eigenschappen toe te voegen in het knooppunt indexRules . Zie Aanpassen van de index OOTB voor meer details.
Index op het knooppunttype dam:Asset
Onder de afbeelding ziet u een aangepaste index voor het knooppunttype dam:Asset , waarbij de eigenschap includedPaths is ingesteld op een specifiek pad.
Analyse
Als u op Assets een uitgebreide zoekopdracht uitvoert, worden onjuiste resultaten geretourneerd, waardoor de aangepaste index lagere geschatte kosten heeft.
Maak geen aangepaste index voor het knooppunttype dam:Asset , maar pas de OOTB damAssetLucene -index aan met de benodigde eigenschappen in het knooppunt indexRules .
Meerdere knooppunttypen onder indexeringsregels
Onder de afbeelding ziet u een aangepaste index met meerdere knooppunttypen onder het knooppunt indexRules .
Analyse
Het wordt afgeraden meerdere knooppunttypen toe te voegen in één index, maar het is niet verstandig knooppunttypen in dezelfde index te indexeren als de knooppunttypen nauw verwant zijn, bijvoorbeeld cq:Page en cq:PageContent .
Een geldige oplossing is om de OOTB cqPageLucene - en damAssetLucene -index aan te passen en de benodigde eigenschappen toe te voegen onder het bestaande knooppunt indexRules .
Geen eigenschap queryPaths
Onder de afbeelding ziet u een aangepaste index (niet alleen volgens de naamgevingsconventie) zonder de eigenschap queryPaths .
Analyse
Stel queryPaths altijd in op dezelfde waarde als includedPaths value. Stel de eigenschap evaluatePathRestrictions ook in op true als u de padbeperking wilt afdwingen.
Vragen met indextag
Onder de afbeelding ziet u een aangepaste index met de eigenschap tags en hoe u deze kunt gebruiken tijdens het opvragen van informatie.
/jcr:root/content/dam//element(*,dam:Asset)[(jcr:content/@contentFragment = 'true' and jcr:contains(., '/content/sitebuilder/test/mysite/live/ja-jp/mypage'))]order by @jcr:created descending option (index tag assetPrefixNodeNameSearch)
Analyse
Toont aan hoe te om niet-tegenstrijdige en correcte tags bezitswaarde op de index te plaatsen en het te gebruiken terwijl het vragen. De algemene querysyntaxis is is <query> option(index tag <tagName>) . Zie ook {de Markering van de Index van de Optie van 0} Vraag 🔗
Aangepaste index
Onder de afbeelding ziet u een aangepaste index met het knooppunt suggestion voor het bereiken van de geavanceerde zoekfunctionaliteit.
Analyse
Het is een geldig gebruiksgeval om een douaneindex voor de geavanceerde onderzoek functionaliteit tot stand te brengen. De indexnaam moet echter volgen op <prefix>.<customIndexName>-<version>-douane- \ <customVersion> noemende overeenkomst.
Optimalisatie indexeren door Apache Tika uit te schakelen
AEM gebruikt Tika van Apache voor het halen van meta-gegevens en tekstinhoud uit dossier types zoals PDF, Word, Excel, en meer. De geëxtraheerde inhoud wordt opgeslagen in de opslagplaats en geïndexeerd door de Oak Lucene-index.
Soms hebben gebruikers de mogelijkheid om te zoeken binnen de inhoud van een bestand/middel niet nodig. In dergelijke gevallen kunt u de indexprestaties verbeteren door de Apache-trojka uit te schakelen. De voordelen zijn:
- Snellere indexering
- Vermindering indexgrootte
- Minder hardwaregebruik
Uitschakelen op mime-type
Ga als volgt te werk om Apache Tika op mime-type uit te schakelen:
- Voeg het knooppunt
tikavannt:unstructuredtype toe onder de definitie van een aangepaste index of OOBT-index. In het volgende voorbeeld is het PDF-mime-type uitgeschakeld voor OOTBdamAssetLucene-index.
/oak:index/damAssetLucene
- jcr:primaryType = "oak:QueryIndexDefinition"
- type = "lucene"
...
<tika jcr:primaryType="nt:unstructured">
<config.xml/>
</tika>
- Voeg de
config.xmltoe met de volgende details onder het knooppunttika.
<properties>
<parsers>
<parser class="org.apache.tika.parser.EmptyParser">
<mime>application/pdf</mime>
<!-- Add more mime types to disable -->
</parsers>
</properties>
- Om de opgeslagen index te verfrissen, plaats het
refreshbezit aantrueonder de knoop van de indexdefinitie, zie Eigenschappen van de Definitie van de Index voor meer details.
In de volgende afbeelding ziet u de OOTB damAssetLucene -index met het tika node- en config.xml -bestand waarmee de PDF en andere mime-typen worden uitgeschakeld.
Volledig uitschakelen
Volg onderstaande stappen om Apache Tika volledig uit te schakelen:
- Voeg de eigenschap
includePropertyTypestoe op/oak:index/<INDEX-NAME>/indexRules/<NODE-TYPE>en stel de waarde in opString. In de onderste afbeelding wordt bijvoorbeeld de eigenschapincludePropertyTypestoegevoegd voor hetdam:Assetknooppunttype van de index OOBTdamAssetLucene.
- Voeg
datatoe met eigenschappen onder het knooppuntproperties, controleer of dit het eerste knooppunt boven de eigenschapdefinitie is. Zie bijvoorbeeld de onderstaande afbeelding:
/oak:index/<INDEX-NAME>/indexRules/<NODE-TYPE>/properties/data
- jcr:primaryType = "nt:unstructured"
- type = "String"
- name = "jcr:data"
- nodeScopeIndex = false
- propertyIndex = false
- analyze = false
- Wijzig de index van de bijgewerkte indexdefinitie door de eigenschap
reindexin te stellen optrueonder het indexdefinitieknooppunt.
Nuttige gereedschappen
Laten we enkele gereedschappen bekijken die u kunnen helpen de indexen te definiëren, te analyseren en te optimaliseren.
Gereedschap Index maken en Oak-gereedschappen
Het hulpmiddelhulp van de Generator van de Definitie van de Index van 0} Oak om de indexdefinitie te produceren die op de inputvragen wordt gebaseerd. Het is een goed beginpunt om een aangepaste index te maken.
De Hulpmiddelen van Oak bevatten ook andere
hulpprogramma's voor indexering en opvragen, bijvoorbeeld voor het omzetten van indexen tussen JSON- en XML-indeling;
om vragen van XPath in SQL-2 om te zetten, en indexen te vergelijken.
Gereedschap Query-prestaties
Het Hulpmiddel van de Prestaties van de Vraag OTB beschikbaar bij lokale SDK en AEMCS via Developer Console of hulp https://author-pXXXX-eYYYY.adobeaemcloud.com/ui#/aem/libs/granite/operations/content/diagnosistools/queryPerformance.html?appId=aemshell om de vraagprestaties en JCR de Cheat Sheet van de Vraag te analyseren om de optimale vraag te bepalen.
Problemen met gereedschappen en tips oplossen
De meeste van de onderstaande opties zijn van toepassing voor AEM 6.X en lokale probleemoplossing.
-
Indexbeheer beschikbaar op
http://host:port/libs/granite/operations/content/diagnosistools/indexManager.htmlvoor het ophalen van indexinformatie zoals type, laatst bijgewerkt, grootte. -
Gedetailleerde logboekregistratie van Oak-query's en aan indexering gerelateerde Java™-pakketten zoals
org.apache.jackrabbit.oak.plugins.index,org.apache.jackrabbit.oak.queryencom.day.cq.searchviahttp://host:port/system/console/slinglogvoor probleemoplossing. -
JMX MBean van IndexStats type beschikbaar bij
http://host:port/system/console/jmxvoor het krijgen van indexinfo als status, vooruitgang, of statistieken met betrekking tot asynchrone indexering. Het verstrekt ook FailingIndexStats, als er geen resultaten hier zijn, betekent dat geen indexen corrupt zijn. AsyncIndexerService markeert om het even welke index die (configureerbaar) niet bijwerkt 30 minuten als corrupt en houdt op indexerend hen. Als een vraag niet verwachte resultaten geeft, is het nuttig voor ontwikkelaars om dit te controleren alvorens met het opnieuw indexeren te werk te gaan aangezien het opnieuw indexeren computerduur en tijdrovend is. -
JMX MBean van LuceneIndex type beschikbaar bij
http://host:port/system/console/jmxvoor de statistieken van de Index van Lucene zoals grootte, aantal documenten per indexdefinitie. -
JMX MBean van QueryState type beschikbaar bij
http://host:port/system/console/jmxvoor de Statistieken van de Vraag van Oak met inbegrip van langzame en populaire vragen met details zoals vraag, uitvoeringstijd.
Aanvullende bronnen
Raadpleeg de volgende documentatie voor meer informatie: