文档AEMAEM 教程AEM Sites 教程

简单搜索实施指南

最近更新: 2025年5月5日
  • 适用对象:
  • Experience Manager 6.4
  • Experience Manager 6.5
  • 主题:

创建对象:

  • 中级
  • 有经验的
  • 开发人员

简单搜索实现是来自​ Adobe Summit实验室AEM Search Demystified ​的材料。 本页包含本实验中的资料。 有关引导式实验教程,请查看本页“演示文稿”部分中的“实验”工作簿。

搜索架构概述

演示材料

  • 实验室工作簿
  • 演示文稿

书签

工具

  • 索引管理器
  • 说明查询
  • CRXDE Lite > /oak:index/cqPageLucene
  • CRX包管理器
  • QueryBuilder调试器
  • Oak索引定义生成器

章

以下章节链接假定在http://localhost:4502 ​处的AEM创作实例上安装了初始包

  • 第1章
  • 第2章
  • 第3章
  • 第4章
  • 第5章
  • 第6章
  • 第7章
  • 第8章
  • 第9章

包

初始包

  • 标记
  • 简单搜索应用程序包

章节包

  • 第1章解决方案
  • 第2章解决方案
  • 第3章解决方案
  • 第4章解决方案
  • 第五章 设置
  • 第5章解决方案
  • 第6章解决方案
  • 第9章解决方案

引用的材料

  • Github存储库
  • Sling 模型
  • Sling模型导出程序
  • QueryBuilder API
  • AEM Chrome插件 (文档页面)

更正和跟进

实验室讨论的更正和说明,以及与会者后续提问的回答。

  1. 如何停止重新索引?

    可以通过AEM Web Console > JMX提供的IndexStats MBean停止重新索引

    • http://localhost:4502/system/console/jmx/org.apache.jackrabbit.oak%3Aname%3Dasync%2Ctype%3DIndexStats

      • 执行abortAndPause()以中止重新编制索引。 这将锁定索引以进一步重新索引,直到调用resume()。
      • 执行resume()将重新启动索引过程。
    • 文档:https://jackrabbit.apache.org/oak/docs/query/indexing.html#async-index-mbean

  2. Oak索引如何支持多个租户?

    Oak支持将索引放置到内容树之外,并且这些索引将仅在该子树中索引。 例如,可以创建​ /content/site-a/oak:index/cqPageLucene ​以仅在​ /content/site-a. ​下索引内容

    等效的方法是使用​ /oak:index ​下的索引上的​ includePaths ​和​ queryPaths ​属性。 例如:

    • /oak:index/siteAcqPageLucene@includePaths=/content/site-a
    • /oak:index/siteAcqPageLucene@queryPaths=/content/site-a

    此方法的注意事项包括:

    • 查询必须指定与索引的查询路径范围相等的路径限制,或为其子级。
    • 范围更广的索引(例如/oak:index/cqPageLucene)也将索引数据,从而导致重复引入和磁盘使用成本。
    • 可能需要重复的配置管理(例如 在多个租户索引中添加相同的indexRules(如果它们必须满足相同的查询集)
    • 这种方法最好在AEM发布层用于自定义站点搜索,就像在AEM Author上一样,通常在内容树的高层为不同的租户(例如,通过OmniSearch)执行查询 — 不同的索引定义可能会导致仅基于路径限制的不同行为。
  3. 所有可用分析器的列表在何处?

    Oak公开了一组用于AEM的lucene提供的分析器配置元素。

    • Apache Oak Analyzer文档

      • 令牌生成器
      • 筛选器
      • CharFilters
  4. 如何在同一查询中搜索页面和Assets?

    AEM 6.3的新增功能是在同一提供的查询中查询多种节点类型。 以下QueryBuilder查询。 请注意,每个“子查询”都可以解析为自己的索引,因此在此示例中,cq:Page子查询解析为/oak:index/cqPageLucene,dam:Asset子查询解析为/oak:index/damAssetLucene。

    group.p.or=true
    group.1_group.type=cq:Page
    # add all page restrictions to this group
    group.2_group.type=dam:Asset
    # add all asset restrictions to this group
    

    查询和查询计划中的结果:

    QUERY:(//element(*, cq:Page) | //element(*, dam:Asset))
    
    PLAN: [cq:Page] as [a] /* lucene:cqPageLucene(/oak:index/cqPageLucene) *:* */ union [dam:Asset] as [a] /* lucene:damAssetLucene(/oak:index/damAssetLucene) *:* */
    

    通过QueryBuilder调试器和AEM Chrome插件浏览查询和结果。

  5. 如何在同一查询中搜索多个路径?

    AEM 6.3的新增功能是在同一提供的查询中跨多个路径进行查询。 以下QueryBuilder查询。 请注意,每个“子查询”都可以解析为自己的索引。

    group.p.or=true
    group.1_group.type=cq:Page
    group.1_group.path=/content/docs/en/6-2
    # add all page restrictions to this group
    group.2_group.type=cq:Page
    group.2_group.path=/content/docs/en/6-3
    # add all asset restrictions to this group
    

    以下查询和查询计划中的结果

    QUERY: (/jcr:root/content/docs/en/_x0036_-2//element(*, cq:Page) | /jcr:root/content/docs/en/_x0036_-3//element(*, cq:Page))
    
    PLAN: [cq:Page] as [a] /* traverse "/content/docs/en/6-2//*" where isdescendantnode([a], [/content/docs/en/6-2]) */ union [cq:Page] as [a] /* traverse "/content/docs/en/6-3//*" where isdescendantnode([a], [/content/docs/en/6-3]) */
    

    通过QueryBuilder调试器和AEM Chrome插件浏览查询和结果。

recommendation-more-help
bb44cebf-d964-4e3c-b64e-ce882243fe4d