Criar um índice personalizado para referências de formulário adaptáveis create-custom-index-for-adaptive-forms-references

Crie um índice Lucene marcado para evitar consultas de passagem quando o Adobe Experience Manager (AEM) Forms resolver referências de formulário adaptáveis. Sem um índice adequado, a publicação de um Fragmento de experiência que contenha uma referência de formulário adaptável pode produzir um aviso Traversal query (query without index) nos logs.

No AEM Forms 6.5.24.0 e posterior, a consulta de referência usa a marca de índice aemformsAFReferences. Essas versões incluem a alteração da consulta, mas você deve criar um índice personalizado com essa tag. Este artigo mostra como definir e implantar o índice.

Para o AEM Forms 6.5 LTS, consulte Criar um índice personalizado para referências de formulário adaptável no AEM Forms 6.5 LTS.

Pré-requisitos prerequisites

Antes de começar, verifique se você tem:

  • AEM Forms 6.5.24.0 ou posterior, com o complemento Forms correspondente instalado.
  • Acesso para criar um índice em /oak:index na instância do autor.
  • Um projeto do AEM com um módulo ui.apps se você implantar o índice por meio de um pacote de conteúdo ou acessar o CRXDE Lite para a alternativa de desenvolvimento.

Teste o índice em um ambiente de desenvolvimento ou de preparo antes de implantá-lo na produção. A compilação de um índice pode demorar em um repositório grande.

Definir o índice personalizado define-the-custom-index

Criar o índice em /oak:index/customAFReferenceLuceneIndex-1. Você pode escolher um nome de nó de índice diferente, mas mantenha a marca aemformsAFReferences inalterada para que a consulta de referência do Forms possa selecionar o índice.

Use a definição a seguir. Ele indexa sling:resourceType em nt:unstructured nós em /content.

{
  "jcr:primaryType": "oak:QueryIndexDefinition",
  "selectionPolicy": "tag",
  "compatVersion": 2,
  "includedPaths": ["/content"],
  "queryPaths": ["/content"],
  "tags": ["aemformsAFReferences"],
  "type": "lucene",
  "async": ["async"],
  "evaluatePathRestrictions": true,
  "reindex": false,
  "indexRules": {
    "jcr:primaryType": "nt:unstructured",
    "nt:unstructured": {
      "jcr:primaryType": "nt:unstructured",
      "properties": {
        "jcr:primaryType": "nt:unstructured",
        "resourceType": {
          "jcr:primaryType": "nt:unstructured",
          "propertyIndex": true,
          "name": "sling:resourceType"
        }
      }
    }
  }
}

Não adicionar analyzed=true. A consulta de referência usa restrições de propriedade em vez de uma condição contains de texto completo, de modo que a configuração é desnecessária.

Implantar o índice com um pacote de conteúdo deploy-the-index-with-a-content-package

Use um pacote de conteúdo para implantações de produção.

  1. No módulo ui.apps do projeto do AEM, crie ui.apps/src/main/content/jcr_root/_oak_index/customAFReferenceLuceneIndex-1/.

  2. Crie .content.xml nesse diretório com a seguinte definição:

    code language-xml
    <?xml version="1.0" encoding="UTF-8"?>
    <jcr:root xmlns:oak="http://jackrabbit.apache.org/oak/ns/1.0"
              xmlns:jcr="http://www.jcp.org/jcr/1.0"
              xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
              jcr:primaryType="oak:QueryIndexDefinition"
              async="[async]"
              compatVersion="{Long}2"
              evaluatePathRestrictions="{Boolean}true"
              includedPaths="[/content]"
              queryPaths="[/content]"
              reindex="{Boolean}false"
              selectionPolicy="tag"
              tags="[aemformsAFReferences]"
              type="lucene">
        <indexRules jcr:primaryType="nt:unstructured">
            <nt:unstructured jcr:primaryType="nt:unstructured">
                <properties jcr:primaryType="nt:unstructured">
                    <resourceType jcr:primaryType="nt:unstructured"
                                  name="sling:resourceType"
                                  propertyIndex="{Boolean}true"/>
                </properties>
            </nt:unstructured>
        </indexRules>
    </jcr:root>
    
  3. Adicione o filtro a seguir dentro do elemento workspaceFilter existente em ui.apps/src/main/content/META-INF/vault/filter.xml. Mantenha os outros filtros do projeto inalterados.

    code language-xml
    <filter root="/oak:index/customAFReferenceLuceneIndex-1"/>
    
  4. Crie o projeto usando a configuração de compilação existente e instale o pacote de conteúdo resultante na instância do autor. Para obter instruções sobre carregamento e instalação de pacotes, consulte Gerenciador de Pacotes.

  5. Confirme se /oak:index/customAFReferenceLuceneIndex-1 existe. Permitir que a indexação assíncrona seja concluída antes de verificar o plano de consulta.

Se você escolher um nome de índice diferente, use esse nome de forma consistente no diretório, filtro e caminho do repositório.

Criar o índice com o CRXDE Lite create-the-index-with-crxde-lite

Use essa alternativa em um ambiente de desenvolvimento, em vez do método do pacote de conteúdo.

Use as seguintes propriedades ao criar o nó de índice:

Propriedade
Tipo
Valor
selectionPolicy
String
tag
compatVersion
Longo
2
includedPaths
String[]
/content
queryPaths
String[]
/content
tags
String[]
aemformsAFReferences
type
String
lucene
async
String[]
async
evaluatePathRestrictions
Booleano
true
reindex
Booleano
false

String[] significa uma propriedade de Cadeia de Caracteres de vários valores, mesmo quando contém apenas um valor.

  1. Abra http://localhost:4502/crx/de/index.jsp. Substitua o host e a porta pelas da instância do autor.

  2. Vá até /oak:index. Clique com o botão direito do mouse no nó e selecione Criar > Criar Nó.

  3. Criar customAFReferenceLuceneIndex-1 com tipo oak:QueryIndexDefinition.

  4. Adicione as propriedades da tabela acima ao nó do índice.

  5. No nó do índice, crie a seguinte hierarquia de nó secundário. Defina cada tipo de nó filho como nt:unstructured:

    code language-text
    indexRules
        nt:unstructured
            properties
                resourceType
    
  6. Em resourceType, adicione name (String) com o valor sling:resourceType e propertyIndex (Booleano) com o valor true.

  7. Selecione Salvar tudo e permitir que a indexação assíncrona seja concluída.

Verificar se a consulta usa o índice verify-that-the-query-uses-the-index

Verifique o plano de consulta para confirmar se a consulta de referência seleciona o índice personalizado.

  1. Confirme se a indexação assíncrona foi concluída. Use o Gerenciador de Índices para inspecionar o status do índice.

  2. Abra Ferramentas > Operações > Diagnóstico > Desempenho da Consulta e selecione Explicar Consulta. Selecione o idioma de consulta XPath e insira:

    code language-text
    /jcr:root/content//element(*, nt:unstructured)[
      (@sling:resourceType = 'fd/af/components/aemform'
      or jcr:like(@sling:resourceType, '%components/aemformscontainer%')
      or jcr:like(@sling:resourceType, '%components/adaptiveForm/fragment%'))]
    option (index tag aemformsAFReferences)
    
  3. Selecione Explicar. Confirme se o plano usa lucene:customAFReferenceLuceneIndex-1 e /oak:index/customAFReferenceLuceneIndex-1, ou o nome de índice escolhido, para as ramificações da consulta em vez de um plano de travessia. Para obter detalhes, consulte Explicar consulta.

  4. Repita a operação de publicação do Fragmento de experiência que produziu o aviso. Verificar error.log em busca de novos avisos de passagem de com.adobe.aem.formsndocuments.publish.AssetReferenceProvider.resolvePathsToFindReferences.

Se o plano não selecionar o índice personalizado, verifique a marca, a hierarquia indexRules e a definição de propriedade sling:resourceType em relação aos exemplos acima. Para obter mais diagnósticos, consulte Solução de problemas de índices do Oak.

Para obter mais informações sobre o desempenho da consulta e a configuração do índice, consulte:

recommendation-more-help
experience-manager-65-help-main-toc