Práticas recomendadas de indexação no AEM

Saiba mais sobre as práticas recomendadas de indexação no Adobe Experience Manager (AEM). Apache Jackrabbit Oak habilita a pesquisa de conteúdo no AEM e os seguintes são pontos-chave:

  • Imediatamente, o AEM fornece vários índices para oferecer suporte à funcionalidade de pesquisa e consulta, por exemplo damAssetLucene, cqPageLucene e muito mais.
  • Todas as definições de índice são armazenadas no repositório em /oak:index nó.
  • O AEM as a Cloud Service só oferece suporte a índices Oak Lucene.
  • A configuração do índice deve ser gerenciada na base de código do projeto AEM e implantada usando os pipelines CI/CD do Cloud Manager.
  • Se vários índices estiverem disponíveis para uma determinada consulta, a variável índice com o menor custo estimado é usado.
  • Se nenhum índice estiver disponível para uma determinada consulta, a árvore de conteúdo será percorrida para encontrar o conteúdo correspondente. No entanto, o limite padrão via org.apache.jackrabbit.oak.query.QueryEngineSettingsService é atravessar apenas 10.000 nós.
  • Os resultados de um query são filtrado por fim para garantir que o usuário atual tenha acesso de leitura. Isso significa que os resultados da consulta podem ser menores que o número de nós indexados.
  • A reindexação do repositório após as alterações de definição de índice requer tempo e depende do tamanho do repositório.

Para ter uma funcionalidade de pesquisa eficiente e correta que não afete o desempenho da instância do AEM, é importante entender as práticas recomendadas de indexação.

Índice personalizado vs. OOTB

Às vezes, você deve criar índices personalizados para dar suporte aos requisitos de pesquisa. No entanto, siga as diretrizes abaixo antes de criar índices personalizados:

  • Entenda os requisitos de pesquisa e verifique se os índices OOTB podem dar suporte aos requisitos de pesquisa. Uso Ferramenta de desempenho da consulta, disponível em SDK local e AEMCS por meio do Console do desenvolvedor ou https://author-pXXXX-eYYYY.adobeaemcloud.com/ui#/aem/libs/granite/operations/content/diagnosistools/queryPerformance.html?appId=aemshell.

  • Defina uma consulta ideal, use o otimização de consultas fluxograma e Folha de características de consulta JCR para referência.

  • Se os índices OOTB não forem compatíveis com os requisitos de pesquisa, você terá duas opções. No entanto, reveja a Dicas para Criar Índices Eficientes

    • Personalizar o índice OOTB: opção preferencial, pois é fácil de manter e atualizar.
    • Índice totalmente personalizado: somente se a opção acima não funcionar.

Personalizar o índice OOTB

  • Entrada AEMCS, ao personalizar o uso do índice OOTB <ootbindexname>-<productversion>-custom-<customversion> convenção de nomenclatura. Por exemplo, cqPageLucene-custom-1 ou damAssetLucene-8-custom-1. Isso ajuda a mesclar a definição de índice personalizado sempre que o índice OOTB é atualizado. Consulte Alterações nos índices prontos para uso para obter mais detalhes.

  • Entrada AEM 6.X, o nome acima não funciona No entanto, basta atualizar o índice OOTB com as propriedades necessárias no indexRules nó.

  • Sempre copie a definição de índice OOTB mais recente da instância AEM usando o Gerenciador de pacotes CRX DE (https://experienceleague.adobe.com/crx/packmgr/?lang=pt-BR), renomeie-a e adicione personalizações dentro do arquivo XML.

  • Armazenar definição de índice no projeto AEM em ui.apps/src/main/content/jcr_root/_oak_index e implantá-lo usando os pipelines de CI/CD do Cloud Manager. Consulte Implantação de definições de índice personalizadas para obter mais detalhes.

Índice totalmente personalizado

A criação de um índice totalmente personalizado deve ser a última opção e somente se a opção acima não funcionar.

  • Ao criar um índice totalmente personalizado, use <prefix>.<customindexname>-<version>-custom-<customversion> convenção de nomenclatura. Por exemplo, wknd.adventures-1-custom-1. Isso ajuda a evitar conflitos de nomenclatura. Aqui, wknd é o prefixo e adventures é o nome do índice personalizado. Essa convenção é aplicável ao AEM 6.X e ao AEMCS e ajuda a preparar a migração futura para o AEMCS.

  • O AEM CS é compatível apenas com os índices Lucene, portanto, para se preparar para a migração futura para o AEM, sempre use os índices Lucene. Consulte Índices Lucene versus Índices de propriedades para obter mais detalhes.

  • Evite criar um índice personalizado no mesmo tipo de nó do índice OOTB. Em vez disso, personalize o índice OOTB com as propriedades necessárias no indexRules nó. Por exemplo, não crie um índice personalizado no dam:Asset tipo de nó, mas personalizar o OOTB damAssetLucene índice. Essa tem sido uma causa básica comum de problemas funcionais e de desempenho.

  • Além disso, evite adicionar vários tipos de nó, por exemplo cq:Page e cq:Tag nas regras de indexação (indexRules). Em vez disso, crie índices separados para cada tipo de nó.

  • Como mencionado na seção acima, armazene a definição do índice no projeto AEM em ui.apps/src/main/content/jcr_root/_oak_index e implantá-lo usando os pipelines de CI/CD do Cloud Manager. Consulte Implantação de definições de índice personalizadas para obter mais detalhes.

  • As diretrizes de definição do índice são:

    • O tipo de nó (jcr:primaryType) deve ser oak:QueryIndexDefinition
    • O tipo de índice (type) deve ser lucene
    • A propriedade assíncrona (async) deve ser async,nrt
    • Uso includedPaths e evitar excludedPaths propriedade. Sempre definir queryPaths para o mesmo valor que includedPaths valor.
    • Para aplicar a restrição de caminho, use evaluatePathRestrictions propriedade e defina-a como true.
    • Uso tags propriedade para marcar o índice e, durante a consulta, especificar esse valor de tags para usar o índice. A sintaxe de consulta geral é <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"]
    ...
    

Exemplos

Para entender as práticas recomendadas, vamos analisar alguns exemplos.

Uso indevido da propriedade de tags

A imagem abaixo mostra a definição de índice OOTB e personalizados, destacando o tags propriedade, ambos os índices usam o mesmo visualSimilaritySearch valor.

Uso indevido da propriedade de tags

Análise

Este é um uso inadequado do tags no índice personalizado. O mecanismo de consulta Oak escolhe o índice personalizado sobre a causa do índice OOTB do custo estimado mais baixo.

A maneira correta é personalizar o índice OOTB e adicionar as propriedades necessárias no indexRules nó. Consulte Personalização do índice OOTB para obter mais detalhes.

Índice no dam:Asset tipo de nó

A imagem abaixo mostra o índice personalizado para o dam:Asset tipo de nó com o includedPaths propriedade definida para um caminho específico.

Índice no tipo de nó dam:Asset

Análise

Se você executar omnisearch em Ativos, ela retornará resultados incorretos porque o índice personalizado tem custo estimado mais baixo.

Não crie um índice personalizado no dam:Asset tipo de nó, mas personalizar o OOTB damAssetLucene índice com as propriedades necessárias no indexRules nó.

Vários tipos de nó nas regras de indexação

A imagem abaixo mostra o índice personalizado com vários tipos de nó sob o indexRules nó.

Vários tipos de nó sob as regras de indexação

Análise

Não é recomendável adicionar vários tipos de nó em um único índice. No entanto, convém adicionar tipos de nó de índice no mesmo índice se os tipos de nó estiverem intimamente relacionados, por exemplo, cq:Page e cq:PageContent.

Uma solução válida é personalizar o OOTB cqPageLucene e damAssetLucene índice, adicione as propriedades necessárias no repositório indexRules nó.

Ausência de queryPaths propriedade

A imagem abaixo mostra o índice personalizado (sem seguir a convenção de nomenclatura) sem queryPaths propriedade.

Ausência da propriedade queryPaths

Análise

Sempre definir queryPaths para o mesmo valor que includedPaths valor. Além disso, para aplicar a restrição de caminho, defina evaluatePathRestrictions propriedade para true.

Consulta com tag de índice

A imagem abaixo mostra o índice personalizado com tags propriedade e como usá-la durante a consulta.

Consulta com tag de índice

/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)
Análise

Demonstra como definir configurações corretas e não conflitantes tags no índice e usá-lo durante a consulta. A sintaxe de consulta geral é <query> option(index tag <tagName>). Consulte também Tag de Índice de Opção de Consulta

Índice personalizado

A imagem abaixo mostra o índice personalizado com suggestion para obter a funcionalidade de pesquisa avançada.

Índice personalizado

Análise

É um caso de uso válido para criar um índice personalizado para o pesquisa avançada funcionalidade. No entanto, o nome do índice deve seguir o &lt;prefix>.&lt;customindexname>-&lt;version>-custom-&lt;customversion> convenção de nomenclatura.

Otimização de índice ao desabilitar o Apache Tika

Usos do AEM Apache Tika para extração de conteúdo de metadados e texto do arquivo tipos como PDF, Word, Excel e muito mais. O conteúdo extraído é armazenado no repositório e indexado pelo índice Oak Lucene.

Às vezes, os usuários não exigem a capacidade de pesquisar no conteúdo de um arquivo/ativo, nesses casos, você pode melhorar o desempenho da indexação desativando o Apache Tika. As vantagens são:

  • Indexação mais rápida
  • Redução de tamanho do índice
  • Menos uso de hardware
CAUTION
Antes de desabilitar o Apache Tika, verifique se os requisitos de pesquisa não exigem a capacidade de pesquisar no conteúdo de um ativo.

Desativar por tipo MIME

Para desativar o Apache Tika por tipo MIME, use as seguintes etapas:

  • Adicione o tika nó de nt:unstructured digite em definição de índice personalizado ou OOBT. No exemplo a seguir, o tipo de PDF mime é desativado para OOTB damAssetLucene índice.
/oak:index/damAssetLucene
    - jcr:primaryType = "oak:QueryIndexDefinition"
    - type = "lucene"
    ...
    <tika jcr:primaryType="nt:unstructured">
        <config.xml/>
    </tika>
  • Adicione o config.xml com os seguintes detalhes sob o tika nó.
<properties>
  <parsers>
    <parser class="org.apache.tika.parser.EmptyParser">
      <mime>application/pdf</mime>
      <!-- Add more mime types to disable -->
  </parsers>
</properties>

A imagem a seguir mostra o OOTB damAssetLucene indexar com o tika nó e config.xml arquivo que desativa o PDF e outros tipos MIME.

Índice damAssetLucene OOTB com nó tika

Desativar completamente

Para desativar completamente o Apache Tika, siga as etapas abaixo:

  • Adicionar includePropertyTypes propriedade em /oak:index/<INDEX-NAME>/indexRules/<NODE-TYPE> e defina o valor como String. Por exemplo, na imagem abaixo, a variável includePropertyTypes A propriedade é adicionada para o dam:Asset tipo de nó da OOBT damAssetLucene índice.

propriedade IncludePropertyTypes

  • Adicionar data com as propriedades abaixo de properties nó, verifique se é o primeiro nó acima da definição da propriedade. Por exemplo, veja a imagem abaixo:
/oak:index/<INDEX-NAME>/indexRules/<NODE-TYPE>/properties/data
    - jcr:primaryType = "nt:unstructured"
    - type = "String"
    - name = "jcr:data"
    - nodeScopeIndex = false
    - propertyIndex = false
    - analyze = false

Propriedade dos dados

  • Reindexe a definição de índice atualizada definindo o reindex propriedade para true no nó de definição de índice.

Ferramentas úteis

Vamos analisar algumas ferramentas que podem ajudá-lo a definir, analisar e otimizar os índices.

Ferramenta de criação de índice

A variável Gerador de definição de índice Oak ajuda da ferramenta para gerar a definição do índice com base nas consultas de entrada. Criar um índice personalizado é um bom ponto de partida.

Ferramenta Analisar índice

A variável Analisador de definição de índice ajuda da ferramenta para analisar a definição do índice e fornece recomendações para melhorar a definição do índice.

Ferramenta de desempenho de consulta

O OOTB Ferramenta de desempenho da consulta disponível em SDK local e AEMCS por meio do Console do desenvolvedor ou https://author-pXXXX-eYYYY.adobeaemcloud.com/ui#/aem/libs/granite/operations/content/diagnosistools/queryPerformance.html?appId=aemshell ajuda para analisar o desempenho da consulta e Folha de características de consulta JCR para definir a consulta ideal.

Dicas e ferramentas para solução de problemas

A maioria dos itens abaixo é aplicável para AEM 6.X e solução de problemas local.

  • Gerenciador de índice disponível em http://host:port/libs/granite/operations/content/diagnosistools/indexManager.html para obter informações de índice, como tipo, última atualização, tamanho.

  • Registro detalhado de pacotes Java™ relacionados à consulta e indexação do Oak, como org.apache.jackrabbit.oak.plugins.index, org.apache.jackrabbit.oak.query, e com.day.cq.search via http://host:port/system/console/slinglog para solução de problemas.

  • MBean JMX de IndexStats tipo disponível em http://host:port/system/console/jmx para obter informações de índice, como status, progresso ou estatísticas relacionadas à indexação assíncrona. Também fornece FailedIndexStats, se não houver resultados aqui, significa que nenhum índice está corrompido. AsyncIndexerService marca qualquer índice que não seja atualizado por 30 minutos (configurável) como corrompido e interrompe a indexação. Se uma consulta não estiver fornecendo os resultados esperados, é útil que os desenvolvedores verifiquem isso antes de prosseguir com a reindexação, pois a reindexação é computacionalmente cara e demorada.

  • MBean JMX de LuceneIndex tipo disponível em http://host:port/system/console/jmx para estatísticas do Índice Lucene, como tamanho, número de documentos por definição de índice.

  • MBean JMX de QueryStat tipo disponível em http://host:port/system/console/jmx para estatísticas de consulta do Oak, incluindo consultas lentas e populares com detalhes como consulta, tempo de execução.

Recursos adicionais

Consulte a seguinte documentação para obter mais informações:

recommendation-more-help
c92bdb17-1e49-4e76-bcdd-89e4f85f45e6