aem - 了解CQ5 Lucene索引规则

标签 aem lucene jcr-sql2

信息: 我已经向 cq5 提供了索引配置文件。我尚未通过指定以下规则对属性 cq:template 建立索引:

<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'

最佳答案

您的规则实际上忽略了索引中除 cq:template 规则之外的所有属性(并且从全文索引中排除了 cq:template,因为您定义了 nodeScopeIndex="false")。请参阅jackrabbit documentation了解更多详情。

当您定义元素 <property nodeScopeIndex="false">cq:template</property> 时,系统将属性包含在索引中。但是,nodeScopeIndex="false"告诉 CRX/Jackrabbit 不要在全文索引中包含该属性。这意味着它可用于所有搜索,除了在 sql 中使用 contains(...) 或在 xpath 中使用 jcr:contains(...) 的搜索。

为了避免完全索引某个属性,请从第一个索引规则中将其省略,其节点类型/条件属性与其节点匹配。它必须是第一个匹配规则,因为index_config.xml 文件中的规则是自上而下处理的。

因此,要从 CQ5 的索引中删除 cq:template 属性,请执行以下操作:

  1. 提取现成的 CQ5 版本的 indexing_config.xml(有关说明,请参阅 this documentation)
  2. 删除 <property nodeScopeIndex="false">cq:tempate</property>来自<index-rule nodeType="nt:base">
  3. 更改最后一条规则中的正则表达式<property isRegexp="true">来自.*:.*^(?!cq:template).*:.*$ :

进行更改后,索引规则应如下所示:

<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:template 是否安全,因为产品代码可能会以某种方式使用它。作为最佳实践,建议仅排除自定义应用程序属性。此外,您还必须在全文索引中包含包含对其他内容路径的引用的属性。这是因为当您在 CQ5 (AEM) 中移动页面时,它会执行 jcr:contains 搜索以查看引用该页面的位置。因此,如果您使用 nodeScopeIndex="false"排除此类属性,或者通过修改上面的正则表达式来省略它们,则引用搜索将失败。然后你最终会得到对旧路径的陈旧引用。


引用文献:

  1. 官方indexing_config.xml引用:http://wiki.apache.org/jackrabbit/IndexingConfiguration
  2. 有关如何在 CQ5 中更新 indexing_config.xml 的说明:http://helpx.adobe.com/experience-manager/kb/SearchIndexingConfig.html

关于aem - 了解CQ5 Lucene索引规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21086849/

相关文章:

aem - aem 中的扩展、覆盖和覆盖组件有什么区别

java - 如何在 JCR-SQL2 中应用聚合函数(如 MIN、MAX、COUNT)?

Eclipse,getRealPath() 的问题

java - JCR_SQL2 如何获得不同的聚合结果

json - AEM 将 html 信息注释插入 json

javascript - 使用 Javascript Use API 获取标签列表

javascript - 扩展 "Activate Later"功能

java.lang.NoClassDefFoundError : org/apache/lucene/codecs/simpletext/SimpleTextCodec

lucene - lucene中的BlockJoin查询