Bästa praxis för indexering i AEM
Läs om hur du indexerar metodtips i Adobe Experience Manager (AEM). Apache Jackrabbit Oak driver innehållssökningen i AEM och följande är viktiga punkter:
- AEM tillhandahåller olika index som stöder sök- och frågefunktioner, till exempel
damAssetLucene,cqPageLucenemed flera. - Alla indexdefinitioner lagras i databasen under noden
/oak:index. - AEM as a Cloud Service stöder endast Oak Lucene-index.
- Indexkonfigurationen bör hanteras i AEM projektkodbas och distribueras med Cloud Manager CI/CD-pipelines.
- Om det finns flera tillgängliga index för en given fråga används index med den lägsta uppskattade kostnaden.
- Om det inte finns något index tillgängligt för en given fråga, gås innehållsträdet igenom för att hitta det matchande innehållet. Standardgränsen via
org.apache.jackrabbit.oak.query.QueryEngineSettingsServiceär dock att bara gå igenom 100 000 noder. - Resultatet av en fråga filtreras senast för att säkerställa att den aktuella användaren har läsåtkomst. Det innebär att frågeresultaten kan vara mindre än antalet indexerade noder.
- Omindexeringen av databasen efter ändringar av indexdefinitionen kräver tid och beror på databasens storlek.
Om du vill ha en effektiv och korrekt sökfunktion som inte påverkar AEM-instansens prestanda är det viktigt att du förstår hur du indexerar de bästa metoderna.
Index för anpassad kontra OTB
Ibland måste du skapa anpassade index som passar dina sökbehov. Följ dock riktlinjerna nedan innan du skapar anpassade index:
-
Förstå sökkraven och kontrollera om OTB-indexen stöder sökkraven. Använd frågeprestandaverktyget som finns på lokal SDK och AEMCS via Developer Console eller
https://author-pXXXX-eYYYY.adobeaemcloud.com/ui#/aem/libs/granite/operations/content/diagnosistools/queryPerformance.html?appId=aemshell. -
Definiera en optimal fråga genom att använda flödesdiagrammet optimera frågor och JCR-frågechebladet för referens.
-
Om OTB-indexen inte stöder sökkraven finns det två alternativ. Granska dock Tipsen för hur du skapar effektiva index
- Anpassa OOTB-indexet: Det bästa alternativet eftersom det är enkelt att underhålla och uppgradera.
- Helt anpassat index: Endast om alternativet ovan inte fungerar.
Anpassa OTB-indexet
-
I AEMCS använder du namnkonventionen <OOTBIndexName>-<productVersion>-custom-<customVersion> när du anpassar OOTB-indexet. Till exempel
cqPageLucene-custom-1ellerdamAssetLucene-8-custom-1. Det gör att du kan sammanfoga den anpassade indexdefinitionen när OTB-indexet uppdateras. Mer information finns i Förändringar av index som inte finns i kartongen. -
I AEM 6.X fungerar inte namngivningen __, men du behöver bara uppdatera OTB-indexet med nödvändiga egenskaper i noden
indexRules. -
Kopiera alltid den senaste OTB-indexdefinitionen från AEM-instansen med CRX DE Package Manager (https://experienceleague.adobe.com/crx/packmgr/?lang=sv), byt namn på den och lägg till anpassningar i XML-filen.
-
Lagra indexdefinitionen i AEM-projektet på
ui.apps/src/main/content/jcr_root/_oak_indexoch distribuera den med Cloud Manager CI/CD-pipelines. Mer information finns i Distribuera anpassade indexdefinitioner.
Helt anpassat index
Det sista alternativet måste vara att skapa ett helt anpassat index och endast om ovanstående alternativ inte fungerar.
-
Använd <prefix> när du skapar ett helt anpassat index.<customIndexName>-<version>-custom-<customVersion>-namnkonvention. Exempel:
wknd.adventures-1-custom-1. Detta hjälper till att undvika namnkonflikter. Här ärwkndprefixet ochadventuresär det anpassade indexnamnet. Denna konvention gäller för både AEM 6.X och AEMCS och bidrar till att förbereda för framtida övergång till AEMCS. -
AEMCS stöder bara Lucene-index, så för att förbereda för framtida migrering till AEMCS bör du alltid använda Lucene-index. Mer information finns i Lucene-index jämfört med egenskapsindex.
-
Undvik att skapa ett anpassat index för samma nodtyp som OTB-indexet. Anpassa i stället OTB-indexet med nödvändiga egenskaper i noden
indexRules. Skapa till exempel inte ett anpassat index för nodtypendam:Assetutan anpassa indexet OTBdamAssetLucene. Det har varit en vanlig grundorsak till prestandaproblem och funktionsproblem. -
Undvik också att lägga till flera nodtyper, till exempel
cq:Pageochcq:Tag, under indexeringsregelnoden (indexRules). Skapa i stället separata index för varje nodtyp. -
Som vi nämnt ovan ska du lagra indexdefinitionen i AEM-projektet på
ui.apps/src/main/content/jcr_root/_oak_indexoch distribuera den med Cloud Manager CI/CD-pipelines. Mer information finns i Distribuera anpassade indexdefinitioner. -
Riktlinjerna för indexdefinitioner är:
- Nodtypen (
jcr:primaryType) ska varaoak:QueryIndexDefinition - Indextypen (
type) ska varalucene - Den asynkrona egenskapen (
async) ska varaasync,nrt - Använd
includedPathsoch undvik egenskapenexcludedPaths. Ange alltid värdetqueryPathstill samma värde som värdet förincludedPaths. - Använd egenskapen
evaluatePathRestrictionsoch ange den tilltrueför att framtvinga sökvägsbegränsningen. - Använd egenskapen
tagsför att tagga indexet och ange det här taggvärdet för att använda indexet när du frågar. Den allmänna frågesyntaxen är<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"] ... - Nodtypen (
Exempel
Vi ska ta en titt på några exempel för att förstå de bästa metoderna.
Felaktig användning av taggegenskap
I bilden nedan visas en anpassad indexdefinition och en indexdefinition för OTB, där egenskapen tags markeras, används samma visualSimilaritySearch för båda indexvärdena.
Analys
Det här är en felaktig användning av egenskapen tags i det anpassade indexet. Oak frågemotor väljer det anpassade indexvärdet över OTB-indexet för den lägsta uppskattade kostnaden.
Det rätta sättet är att anpassa OTB-indexet och lägga till nödvändiga egenskaper i noden indexRules. Mer information finns i Anpassa OOTB-indexet.
Index för nodtypen dam:Asset
Nedan visas ett anpassat index för nodtypen dam:Asset med egenskapen includedPaths inställd på en specifik sökväg.
Analys
Om du gör en sökning i Assets returneras felaktiga resultat eftersom det anpassade indexet har en lägre uppskattad kostnad.
Skapa inte ett anpassat index för nodtypen dam:Asset utan anpassa OTB damAssetLucene-indexet med nödvändiga egenskaper i noden indexRules.
Flera nodtyper under indexeringsregler
Nedan visas ett anpassat index med flera nodtyper under noden indexRules.
Analys
Du bör inte lägga till flera nodtyper i ett enda index, men det går bra att indexera nodtyper i samma index om nodtyperna är nära besläktade, till exempel cq:Page och cq:PageContent.
En giltig lösning är att anpassa OTB-indexet cqPageLucene och damAssetLucene och lägga till nödvändiga egenskaper under den befintliga indexRules-noden.
Egenskapen queryPaths saknas
I bilden nedan visas ett anpassat index (som inte följer namnkonventionen) utan egenskapen queryPaths.
Analys
Ange alltid värdet queryPaths till samma värde som värdet för includedPaths. Om du vill framtvinga sökvägsbegränsningen anger du egenskapen evaluatePathRestrictions till true.
Fråga med indextagg
Nedanför bilden visas ett anpassat index med egenskapen tags och hur det används vid frågor.
/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)
Analys
Visar hur du ställer in icke-konfliktskapande och korrigerar egenskapsvärdet tags för indexet och använder det när du frågar. Den allmänna frågesyntaxen är <query> option(index tag <tagName>). Se även Indextagg för frågealternativ
Anpassat index
Nedanför bilden visas ett anpassat index med noden suggestion som ger den avancerade sökfunktionen.
Analys
Det är ett giltigt användningsexempel att skapa ett anpassat index för funktionen avancerad sökning. Indexnamnet måste dock följa <prefix>.<customIndexName>-<version>-custom-<customVersion>-namnkonvention.
Indexoptimering genom att inaktivera Apache Tika
AEM använder Apache Tika för att extrahera metadata och textinnehåll från filer som PDF, Word, Excel med flera. Det extraherade innehållet lagras i databasen och indexeras av Oak Lucene-indexet.
Ibland behöver användare inte kunna söka i innehållet i en fil eller resurs, och i sådana fall kan du förbättra indexeringsprestandan genom att inaktivera Apache Tika. Fördelarna är:
- Snabbare indexering
- Minska indexstorlek
- Mindre maskinvaruanvändning
Inaktivera efter MIME-typ
Så här inaktiverar du Apache Tika efter MIME-typ:
- Lägg till noden
tikaav typennt:unstructuredunder anpassad indexdefinition eller OOBT-indexdefinition. I följande exempel är MIME-typen för PDF inaktiverad för OTBdamAssetLucene-index.
/oak:index/damAssetLucene
- jcr:primaryType = "oak:QueryIndexDefinition"
- type = "lucene"
...
<tika jcr:primaryType="nt:unstructured">
<config.xml/>
</tika>
- Lägg till
config.xmlmed följande information under nodentika.
<properties>
<parsers>
<parser class="org.apache.tika.parser.EmptyParser">
<mime>application/pdf</mime>
<!-- Add more mime types to disable -->
</parsers>
</properties>
- Om du vill uppdatera det lagrade indexet anger du egenskapen
refreshtilltrueunder indexdefinitionsnoden. Mer information finns i Egenskaper för indexdefinition.
Följande bild visar indexet OTB damAssetLucene med noden tika och filen config.xml som inaktiverar PDF och andra MIME-typer.
Inaktivera helt
Följ stegen nedan för att inaktivera Apache Tika helt:
- Lägg till egenskapen
includePropertyTypesvid/oak:index/<INDEX-NAME>/indexRules/<NODE-TYPE>och ange värdet tillString. I bilden nedan har till exempel egenskapenincludePropertyTypeslagts till för nodtypendam:Asseti OOBTdamAssetLucene-indexet.
- Lägg till
datamed nedanstående egenskaper under nodenpropertiesoch kontrollera att det är den första noden ovanför egenskapsdefinitionen. Se till exempel bilden nedan:
/oak:index/<INDEX-NAME>/indexRules/<NODE-TYPE>/properties/data
- jcr:primaryType = "nt:unstructured"
- type = "String"
- name = "jcr:data"
- nodeScopeIndex = false
- propertyIndex = false
- analyze = false
- Indexera om den uppdaterade indexdefinitionen genom att ange egenskapen
reindextilltrueunder indexdefinitionsnoden.
Användbara verktyg
Låt oss titta på några verktyg som kan hjälpa dig att definiera, analysera och optimera index.
Indexverktyg och Oak-verktyg
Med verktyget Oak Index Definition Generator kan generera indexdefinitionen baserat på indatafrågorna. Det är en bra utgångspunkt att skapa ett anpassat index.
Oak-verktygen innehåller även andra
Verktyg för indexering och frågor, t.ex. för att konvertera index mellan JSON- och XML-format.
för att konvertera XPath-frågor till SQL-2 och för att jämföra index.
Verktyg för frågeprestanda
OTB frågeprestandaverktyget som finns på lokal SDK och AEMCS via Developer Console eller https://author-pXXXX-eYYYY.adobeaemcloud.com/ui#/aem/libs/granite/operations/content/diagnosistools/queryPerformance.html?appId=aemshell hjälper att analysera frågeprestanda och JCR-frågecheblad för att definiera den optimala frågan.
Felsökningsverktyg och tips
De flesta av nedanstående gäller för AEM 6.X och lokal felsökning.
-
Indexhanteraren är tillgänglig på
http://host:port/libs/granite/operations/content/diagnosistools/indexManager.htmlför att hämta indexinformation som typ, senast uppdaterad, storlek. -
Detaljerad loggning av Oak frågor och indexeringsrelaterade Java™-paket som
org.apache.jackrabbit.oak.plugins.index,org.apache.jackrabbit.oak.queryochcom.day.cq.searchviahttp://host:port/system/console/slinglogför felsökning. -
JMX MBean av IndexStats-typen som är tillgänglig på
http://host:port/system/console/jmxför att hämta indexinformation som status, förlopp eller statistik som rör asynkron indexering. Den tillhandahåller också FailingIndexStats, om det inte finns några resultat här, vilket betyder att inga index är skadade. AsyncIndexerService markerar alla index som inte kan uppdateras i 30 minuter (konfigurerbara) som skadade och avbryter indexeringen. Om en fråga inte ger förväntat resultat är det praktiskt att utvecklarna kontrollerar detta innan de fortsätter med omindexering eftersom omindexering är resurskrävande och tidskrävande. -
JMX MBean av typen LuceneIndex som finns på
http://host:port/system/console/jmxför Lucene-indexstatistik som storlek, antal dokument per indexdefinition. -
JMX MBean av QueryStat-typen som finns på
http://host:port/system/console/jmxför Oak Query Statistics, inklusive långsamma och populära frågor med detaljer som query, körningstid.
Ytterligare resurser
Mer information finns i följande dokumentation: