在AEM中編制索引最佳實務
瞭解如何在Adobe Experience Manager (AEM)中編制索引最佳實務。 Apache Jackrabbit Oak為AEM中的內容搜尋提供支援,以下是關鍵點:
- AEM提供各種開箱即用的索引,以支援搜尋和查詢功能,例如
damAssetLucene、cqPageLucene等。 - 所有索引定義都儲存在
/oak:index節點下的儲存庫中。 - AEM as a Cloud Service僅支援Oak Lucene索引。
- 索引設定應在AEM專案程式碼庫中管理,並使用Cloud Manager CI/CD管道進行部署。
- 如果特定查詢有多個索引可供使用,則會使用預估成本最低的索引。
- 如果指定的查詢沒有可用的索引,則會周遊內容樹以尋找相符的內容。 不過,透過
org.apache.jackrabbit.oak.query.QueryEngineSettingsService的預設限制是僅遍歷100,000個節點。 - 查詢的結果最後 篩選為 以確保目前的使用者具有讀取存取權。 這表示查詢結果可能小於索引節點的數目。
- 在索引定義變更之後重新索引存放庫,需要時間,而且取決於存放庫的大小。
若要使用有效率且正確的搜尋功能而不會影響AEM執行個體的效能,請務必瞭解建立索引的最佳實務。
自訂與OOTB索引
有時候,您必須建立自訂索引以支援您的搜尋需求。 但在建立自訂索引之前,請遵循以下准則:
自訂OOTB索引
-
在 AEMCS 中,自訂OOTB索引時,使用 <OOTBIndexName>-<productVersion>-custom-<customVersion> 命名慣例。 例如,
cqPageLucene-custom-1或damAssetLucene-8-custom-1。 這有助於在OOTB索引更新時合併自訂索引定義。 如需詳細資訊,請參閱對現成可用索引的變更。 -
在 AEM 6.X 中,上述命名無法運作,不過只需在
indexRules節點中以'b6'7d要屬性更新OOTB索引即可。 -
一律使用CRX DE封裝管理員(https://experienceleague.adobe.com/crx/packmgr/?lang=zh-Hant)從AEM執行個體複製最新的OOTB索引定義,重新命名並在XML檔案中新增自訂。
-
將索引定義儲存在
ui.apps/src/main/content/jcr_root/_oak_index的AEM專案中,並使用Cloud Manager CI/CD管道進行部署。 如需詳細資訊,請參閱部署自訂索引定義。
完全自訂索引
建立完全自訂索引必須是您的最後一個選項,而且前提是上述選項無法運作。
-
建立完全自訂的索引時,請使用 <prefix>。<customIndexName>-<version>-custom-<customVersion> 命名慣例。 例如
wknd.adventures-1-custom-1。這有助於避免命名衝突。 在這裡,wknd是前置詞,adventures是自訂索引名稱。 此慣例適用於AEM 6.X和AEMCS,並有助於為未來移轉至AEMCS做好準備。 -
AEMCS僅支援Lucene索引,因此為了準備未來移轉至AEMCS,請一律使用Lucene索引。 如需詳細資訊,請參閱Lucene索引與屬性索引。
-
避免在與OOTB索引相同的節點型別上建立自訂索引。 請改為使用
indexRules節點中的必要屬性自訂OOTB索引。 例如,請勿在dam:Asset節點型別上建立自訂索引,而是自訂OOTBdamAssetLucene索引。 這是效能和功能問題的常見根本原因。 -
同時,請避免在索引規則(
cq:Page)節點下新增多個節點型別,例如cq:Tag和indexRules。 請改為為每個節點型別建立個別的索引。 -
如上節所述,將索引定義儲存在
ui.apps/src/main/content/jcr_root/_oak_index的AEM專案中,並使用Cloud Manager CI/CD管道進行部署。 如需詳細資訊,請參閱部署自訂索引定義。 -
索引定義准則為:
- 節點型別(
jcr:primaryType)應為oak:QueryIndexDefinition - 索引型別(
type)應為lucene - 非同步屬性(
async)應為async,nrt - 使用
includedPaths並避免excludedPaths屬性。 一律將queryPaths值設定為與includedPaths值相同的值。 - 若要強制執行路徑限制,請使用
evaluatePathRestrictions屬性並將其設定為true。 - 使用
tags屬性標籤索引,並在查詢時指定此標籤值以使用索引。 一般查詢語法為<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"] ... - 節點型別(
範例
為了瞭解最佳實務,讓我們檢閱幾個範例。
不當使用標籤屬性
下圖顯示自訂和OOTB索引定義,反白顯示tags屬性,兩個索引都使用相同的visualSimilaritySearch值。
分析
這是不正確使用自訂索引上的tags屬性。 Oak查詢引擎會在OOTB索引原因上挑選自訂索引,造成最低的估計成本。
正確的方法是自訂OOTB索引並在indexRules節點中新增必要的屬性。 如需詳細資訊,請參閱自訂OOTB索引。
dam:Asset節點型別上的索引
下圖顯示dam:Asset節點型別的自訂索引,其中includedPaths屬性設定為特定路徑。
dam
分析
如果您在Assets上執行Omnisearch,則會傳回錯誤結果,因為自訂索引的估計成本較低。
請勿在dam:Asset節點型別上建立自訂索引,但請使用damAssetLucene節點中的必要屬性自訂OOTB indexRules索引。
索引規則下的多個節點型別
下圖顯示indexRules節點下具有多個節點型別的自訂索引。
分析
不建議在單一索引中新增多個節點型別,但是,如果節點型別緊密相關,例如cq:Page和cq:PageContent,則可以在相同索引中索引節點型別。
有效的解決方案是自訂OOTB cqPageLucene和damAssetLucene索引,在現有indexRules節點下新增必要的屬性。
缺少queryPaths屬性
下圖顯示沒有queryPaths屬性的自訂索引(也不遵循命名慣例)。
分析
一律將queryPaths值設定為與includedPaths值相同的值。 此外,若要強制執行路徑限制,請將evaluatePathRestrictions屬性設定為true。
使用索引標籤進行查詢
下圖顯示具有tags屬性的自訂索引,以及查詢時如何使用它。
/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)
分析
示範如何在索引上設定非衝突並修正tags屬性值,並在查詢時使用它。 一般查詢語法為<query> option(index tag <tagName>)。 另請參閱查詢選項索引標籤
自訂索引
下圖顯示具有suggestion個節點的自訂索引,用以實現進階搜尋功能。
分析
為進階搜尋功能建立自訂索引是有效的使用案例。 但是,索引名稱應接在 <prefix>之後。<customIndexName>-<version>-custom-<customVersion> 命名慣例。
停用Apache Tika以最佳化索引
AEM使用Apache Tika從檔案型別(如PDF、Word、Excel等)擷取中繼資料和文字內容。 擷取的內容會儲存在存放庫中,並由Oak Lucene索引編制索引。
有時使用者不需要在檔案/資產的內容中搜尋的能力,在這種情況下,您可以透過停用Apache Tika來改善索引效能。 優點包括:
- 更快的索引
- 索引大小縮減
- 減少硬體使用量
依MIME型別停用
若要依mime型別停用Apache Tika,請執行以下步驟:
- 在自訂或OOBT索引定義下新增
tika型別的nt:unstructured節點。 在下列範例中,已針對OOTBdamAssetLucene索引停用PDF MIME型別。
/oak:index/damAssetLucene
- jcr:primaryType = "oak:QueryIndexDefinition"
- type = "lucene"
...
<tika jcr:primaryType="nt:unstructured">
<config.xml/>
</tika>
- 在
config.xml節點下新增包含以下詳細資料的tika。
<properties>
<parsers>
<parser class="org.apache.tika.parser.EmptyParser">
<mime>application/pdf</mime>
<!-- Add more mime types to disable -->
</parsers>
</properties>
- 若要重新整理已儲存的索引,請在索引定義節點下將
refresh屬性設定為true,如需詳細資訊,請參閱索引定義屬性。
下圖顯示具有damAssetLucene節點和tika檔案的OOTB config.xml索引,該索引會停用PDF和其他mime型別。
具有tika節點的
完全停用
若要完全停用Apache Tika,請遵循以下步驟:
- 在
includePropertyTypes新增/oak:index/<INDEX-NAME>/indexRules/<NODE-TYPE>屬性並將值設定為String。 例如,在下圖中,已為OOBTincludePropertyTypes索引的dam:Asset節點型別新增damAssetLucene屬性。
- 在
data節點底下新增具有下列屬性的properties,確定它是屬性定義上方的第一個節點。 例如,請參閱以下影像:
/oak:index/<INDEX-NAME>/indexRules/<NODE-TYPE>/properties/data
- jcr:primaryType = "nt:unstructured"
- type = "String"
- name = "jcr:data"
- nodeScopeIndex = false
- propertyIndex = false
- analyze = false
- 透過在索引定義節點底下將
reindex屬性設定為true,重新索引更新的索引定義。
實用工具
讓我們來看看有助於您定義、分析和最佳化索引的幾項工具。
索引建立工具和Oak工具
Oak Index Definition Generator工具可協助根據輸入查詢產生索引定義。 這是建立自訂索引的良好起點。
Oak工具也包含其他
和索引和查詢相關的公用程式,例如在JSON和XML格式之間轉換索引,
將XPath查詢轉換為SQL-2並比較索引。
查詢效能工具
可透過Developer Console或 在 本機SDK和AEMCS取得的OOTB 查詢效能工具https://author-pXXXX-eYYYY.adobeaemcloud.com/ui#/aem/libs/granite/operations/content/diagnosistools/queryPerformance.html?appId=aemshell可協助 分析查詢效能 和JCR查詢速查表以定義最佳查詢。
疑難排解工具和提示
以下大部分適用於AEM 6.X和本機疑難排解。
-
索引管理員可在
http://host:port/libs/granite/operations/content/diagnosistools/indexManager.html取得,以取得型別、上次更新時間、大小等索引資訊。 -
透過
org.apache.jackrabbit.oak.plugins.index詳細記錄Oak查詢和索引相關的Java™套件(例如org.apache.jackrabbit.oak.query、com.day.cq.search和http://host:port/system/console/slinglog)以進行疑難排解。 -
IndexStats型別的JMX MBean可在
http://host:port/system/console/jmx取得,以取得與非同步索引相關的索引資訊,例如狀態、進度或統計資料。 它還提供FailingIndexStats,如果此處沒有結果,則表示沒有索引損毀。 AsyncIndexerService會將任何在30分鐘內無法更新的索引(可設定)標籤為已損毀,並停止對其進行索引。 如果查詢沒有提供預期的結果,開發人員在繼續重新索引之前檢視此內容會很有幫助,因為重新索引的計算成本高昂且耗時。 -
LuceneIndex型別的JMX MBean可在
http://host:port/system/console/jmx用於Lucene索引統計資料,例如大小、每個索引定義的檔案數。 -
在可用於Oak查詢統計資料的 QueryStat
http://host:port/system/console/jmx型別的JMX MBean,包含具有查詢、執行時間等詳細資訊的緩慢和常見查詢。
其他資源
如需詳細資訊,請參閱下列檔案: