2014-01-13 23 views
1

信息: 我已經向cq5提供了一個索引配置文件。通過指定以下規則模板:我沒有索引的屬性CQ瞭解CQ5 Lucene索引規則

<index-rule nodeType="nt:base"> 
<property nodeScopeIndex="false">cq:template</property> 
</index-rule> 

我重建了指數。日誌顯示重新索引做得好。

我現在面臨的問題: 當我執行以下SQL2查詢,它給了我同樣的結果,因爲它會給沒有上述索引規則:

SELECT s.[cq:template] FROM [nt:base] AS s WHERE s.[cq:template] like '/apps/geometrixx/templates/contentpage' 

回答

4

您的規則實際上是忽略所有屬性除了cq:模板規則之外的索引(並且因爲您定義了nodeScopeIndex =「false」)而從全文索引中排除cq:模板)。有關更多詳細信息,請參閱jackrabbit documentation

當您定義元素<property nodeScopeIndex="false">cq:template</property>時,系統在索引中包含該屬性。但是,nodeScopeIndex =「false」會告訴CRX/Jackrabbit不要在全文索引中包含該屬性。這意味着它可用於所有搜索,除了在sql或jcr中使用contains(...)的那些:contains(...)for xpath。

要避免完全索引屬性,請將其從第一個索引規則中省略,該索引規則的nodeType/condition屬性與其節點匹配。它必須是第一個匹配規則,因爲index_config.xml文件中的規則自頂向下處理。從指數CQ5模板屬性,請執行下列操作:

所以要去除CQ

  1. 提取出來的indexing_config.xml的盒子CQ5版本(說明,請參閱this documentation
  2. 刪除從.*:.*^(?!cq:template).*:.*$<property nodeScopeIndex="false">cq:tempate</property><index-rule nodeType="nt:base">
  3. 變化正則表達式中的最後一個規則<property isRegexp="true">

後所做的更改,指數規則應該是這樣的:警告

<index-rule nodeType="nt:base"> 
    <property nodeScopeIndex="false">analyticsProvider</property> 
    <property nodeScopeIndex="false">analyticsSnippet</property> 
    <property nodeScopeIndex="false">hideInNav</property> 
    <property nodeScopeIndex="false">offTime</property> 
    <property nodeScopeIndex="false">onTime</property> 
    <property nodeScopeIndex="false">cq:allowedTemplates</property> 
    <property nodeScopeIndex="false">cq:childrenOrder</property> 
    <property nodeScopeIndex="false">cq:cugEnabled</property> 
    <property nodeScopeIndex="false">cq:cugPrincipals</property> 
    <property nodeScopeIndex="false">cq:cugRealm</property> 
    <property nodeScopeIndex="false">cq:designPath</property> 
    <property nodeScopeIndex="false">cq:isCancelledForChildren</property> 
    <property nodeScopeIndex="false">cq:isDeep</property> 
    <property nodeScopeIndex="false">cq:lastModified</property> 
    <property nodeScopeIndex="false">cq:lastModifiedBy</property> 
    <property nodeScopeIndex="false">cq:lastPublished</property> 
    <property nodeScopeIndex="false">cq:lastPublishedBy</property> 
    <property nodeScopeIndex="false">cq:lastReplicated</property> 
    <property nodeScopeIndex="false">cq:lastReplicatedBy</property> 
    <property nodeScopeIndex="false">cq:lastReplicationAction</property> 
    <property nodeScopeIndex="false">cq:lastReplicationStatus</property> 
    <property nodeScopeIndex="false">cq:lastRolledout</property> 
    <property nodeScopeIndex="false">cq:lastRolledoutBy</property> 
    <property nodeScopeIndex="false">cq:name</property> 
    <property nodeScopeIndex="false">cq:parentPath</property> 
    <property nodeScopeIndex="false">cq:segments</property> 
    <property nodeScopeIndex="false">cq:siblingOrder</property> 
    <property nodeScopeIndex="false">cq:template</property> 
    <property nodeScopeIndex="false">cq:trigger</property> 
    <property nodeScopeIndex="false">cq:versionComment</property> 
    <property nodeScopeIndex="false">jcr:createdBy</property> 
    <property nodeScopeIndex="false">jcr:lastModifiedBy</property> 
    <property nodeScopeIndex="false">sling:alias</property> 
    <property nodeScopeIndex="false">sling:resourceType</property> 
    <property nodeScopeIndex="false">sling:vanityPath</property> 
    <property isRegexp="true">^(?!cq:template).*:.*$</property> 
</index-rule> 

注:

我不知道它是否可以安全地刪除CQ:從模板搜索索引作爲產品代碼可能以某種方式使用它。作爲最佳做法,建議僅排除自定義應用程序屬性。此外,您必須在包含對其他內容路徑的引用的全文索引中包含屬性。這是因爲當您在CQ5(AEM)中移動頁面時,它會執行jcr:包含搜索以查看該頁面被引用的位置。因此,如果使用nodeScopeIndex =「false」排除這些屬性,或者修改上面的正則表達式以省略它們,則參考搜索將失敗。然後,你最終將陳舊的路徑引用。


參考文獻:

  1. 官方indexing_config。XML參考:如何在CQ5更新indexing_config.xml http://wiki.apache.org/jackrabbit/IndexingConfiguration
  2. 說明:http://helpx.adobe.com/experience-manager/kb/SearchIndexingConfig.html
+0

這是一個很好的反響,它應該是公認的答案。 –