Configurar um sugeridor para preenchimento automático e correspondências sugeridas em uma consulta

No Azure AI Search, o typeahead (preenchimento automático) ou "search-as-you-type" é ativado através de um sugestão. Um sugeridor é uma configuração em um índice que especifica quais campos devem ser usados para preencher o preenchimento automático e sugestões. Esses campos passam por tokenização extra, gerando sequências de prefixo para suportar correspondências em termos parciais. Por exemplo, um sugeridor que inclua um campo City com um valor para "Seattle" terá combinações de prefixos de "sea", "seat", "seatt" e "seattl" para suportar typeahead.

As correspondências em termos parciais podem ser uma consulta preenchida automaticamente ou uma correspondência sugerida. O mesmo sugeridor apoia ambas as experiências.

O Typeahead pode ser o preenchimento automático, que completa uma entrada parcial para uma consulta de termo inteiro, ou sugestões que convidam o clique para uma correspondência específica. O preenchimento automático produz uma consulta. As sugestões produzem um documento correspondente.

A captura de tela a seguir ilustra ambos. O preenchimento automático antecipa um termo potencial, terminando "tw" com "in". As sugestões são mini resultados de pesquisa, em que um campo como o nome do hotel representa um documento de pesquisa de hotel correspondente do índice. Para sugestões, você pode exibir qualquer campo que forneça informações descritivas.

Visual comparison of autocomplete and suggested queries

Você pode usar esses recursos separadamente ou em conjunto. Para implementar esses comportamentos no Azure AI Search, há um componente de índice e consulta.

  • Adicione um sugeridor a uma definição de índice de pesquisa. O restante deste artigo está focado na criação de um sugestão.

  • Chame uma consulta habilitada para sugestão, na forma de uma solicitação de sugestão ou solicitação de preenchimento automático, usando uma das APIs listadas em uma seção posterior.

A pesquisa conforme você digita é habilitada por campo para campos de cadeia de caracteres. Você pode implementar ambos os comportamentos de digitação na mesma solução de pesquisa se quiser uma experiência semelhante à indicada na captura de tela. Ambas as solicitações visam a coleção de documentos de um índice específico e as respostas são retornadas depois que um usuário fornece pelo menos uma cadeia de caracteres de entrada de três caracteres.

Como criar um sugeridor

Para criar um sugestão, adicione um a uma definição de índice. Um sugeridor usa um nome e uma coleção de campos sobre os quais a experiência de digitação antecipada está habilitada. O melhor momento para criar um sugeridor é quando você também está definindo o campo que o usa.

  • Use apenas campos de cadeia de caracteres.

  • Se o campo de cadeia de caracteres fizer parte de um tipo complexo (por exemplo, um campo Cidade em Endereço), inclua o pai no caminho do campo: "Address/City" (REST e C# e Python) ou ["Address"]["City"] (JavaScript).

  • Use o analisador Lucene padrão padrão () ou um analisador de linguagem ("analyzer": nullpor exemplo, "analyzer": "en.Microsoft") no campo.

Se você tentar criar um sugeridor usando campos pré-existentes, a API não o permitirá. Os prefixos são gerados durante a indexação, quando termos parciais em duas ou mais combinações de caracteres são tokenizados ao lado de termos inteiros. Dado que os campos existentes já estão tokenizados, você precisa reconstruir o índice se quiser adicioná-los a um sugestão. Para obter mais informações, consulte Como recriar um índice do Azure AI Search.

Escolher campos

Embora um sugeridor tenha várias propriedades, ele é principalmente uma coleção de campos de cadeia de caracteres para os quais você está habilitando uma experiência de pesquisa conforme você digita. Há um sugeridor para cada índice, portanto, a lista de sugestões deve incluir todos os campos que contribuem com conteúdo para sugestões e preenchimento automático.

O preenchimento automático se beneficia de um conjunto maior de campos para desenhar porque o conteúdo extra tem mais potencial de conclusão de prazo.

As sugestões, por outro lado, produzem melhores resultados quando a escolha do campo é seletiva. Lembre-se de que a sugestão é um proxy para um documento de pesquisa, portanto, escolha os campos que melhor representam um único resultado. Nomes, títulos ou outros campos exclusivos que distinguem entre várias correspondências funcionam melhor. Se os campos consistirem em valores repetitivos, as sugestões consistirão em resultados idênticos e um usuário não saberá qual escolher.

Para satisfazer ambas as experiências de pesquisa conforme você digita, adicione todos os campos necessários para o preenchimento automático, mas use select, top, filtere searchFields para controlar os resultados para sugestões.

Escolha analisadores

Sua escolha de um analisador determina como os campos são tokenizados e prefixados. Por exemplo, para uma cadeia de caracteres hifenizada como "sensível ao contexto", o uso de um analisador de linguagem resulta nestas combinações de tokens: "context", "sensitive", "context-sensitive". Se você tivesse usado o analisador Lucene padrão, a string hifenizada não existiria.

Ao avaliar analisadores, considere usar a API Analisar texto para obter informações sobre como os termos são processados. Depois de criar um índice, você pode tentar vários analisadores em uma cadeia de caracteres para visualizar a saída do token.

Os campos que usam analisadores personalizados ou analisadores internos (exceto o Lucene padrão) são explicitamente proibidos para evitar resultados ruins.

Nota

Se você precisar contornar a restrição do analisador, por exemplo, se precisar de uma palavra-chave ou analisador ngram para determinados cenários de consulta, use dois campos separados para o mesmo conteúdo. Isso permitirá que um dos campos tenha um sugestionador, enquanto o outro pode ser configurado com uma configuração de analisador personalizada.

Criar usando o portal

Ao usar Adicionar índice ou o assistente Importar dados para criar um índice, você tem a opção de habilitar um sugestão:

  1. Na definição de índice, insira um nome para o sugestionador.

  2. Em cada definição de campo para novos campos, marque uma caixa de seleção na coluna Sugestão. Uma caixa de seleção está disponível apenas em campos de cadeia de caracteres.

Como observado anteriormente, a escolha do analisador afeta a tokenização e o prefixo. Considere toda a definição de campo ao habilitar sugestões.

Criar usando REST

Na API REST, adicione sugestões por meio de Criar índice ou Atualizar índice.

{
  "name": "hotels-sample-index",
  "fields": [
    . . .
        {
            "name": "HotelName",
            "type": "Edm.String",
            "facetable": false,
            "filterable": false,
            "key": false,
            "retrievable": true,
            "searchable": true,
            "sortable": false,
            "analyzer": "en.microsoft",
            "indexAnalyzer": null,
            "searchAnalyzer": null,
            "synonymMaps": [],
            "fields": []
        },
  ],
  "suggesters": [
    {
      "name": "sg",
      "searchMode": "analyzingInfixMatching",
      "sourceFields": ["HotelName"]
    }
  ],
  "scoringProfiles": [
    . . .
  ]
}

Criar usando .NET

Em C#, defina um objeto SearchSuggester. Suggesters é uma coleção em um objeto SearchIndex, mas só pode levar um item. Adicione um sugeridor à definição do índice.

private static void CreateIndex(string indexName, SearchIndexClient indexClient)
{
    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);

    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);

    indexClient.CreateOrUpdateIndex(definition);
}

Referência do imóvel

Property Descrição
nome Especificado na definição do sugestionador, mas também chamado em uma solicitação de Preenchimento Automático ou Sugestões.
sourceFields Especificado na definição do sugestionador. É uma lista de um ou mais campos no índice que são a fonte do conteúdo para sugestões. Os campos devem ser do tipo Edm.String. Se um analisador for especificado no campo, ele deve ser um analisador lexical nomeado desta lista (não um analisador personalizado).

Como prática recomendada, especifique apenas os campos que se prestam a uma resposta esperada e apropriada, seja uma cadeia de caracteres concluída em uma barra de pesquisa ou uma lista suspensa.

Um nome de hotel é um bom candidato porque tem precisão. Campos detalhados como descrições e comentários são muito densos. Da mesma forma, campos repetitivos, como categorias e tags, são menos eficazes. Nos exemplos, incluímos "categoria" de qualquer maneira para demonstrar que você pode incluir vários campos.
searchMode Parâmetro somente REST, mas também visível no portal. Este parâmetro não está disponível no SDK do .NET. Indica a estratégia utilizada para procurar frases candidatas. O único modo atualmente suportado é analyzingInfixMatchingo , que atualmente corresponde no início de um período.

Use um sugestor

Um sugeridor é usado em uma consulta. Depois que um sugeridor for criado, chame uma das seguintes APIs para uma experiência de pesquisa conforme você digita:

Em um aplicativo de pesquisa, o código do cliente deve usar uma biblioteca como jQuery UI Autocomplete para coletar a consulta parcial e fornecer a correspondência. Para obter mais informações sobre essa tarefa, consulte Adicionar preenchimento automático ou resultados sugeridos ao código do cliente.

O uso da API é ilustrado na chamada a seguir para a API REST de preenchimento automático. Há duas conclusões deste exemplo. Primeiro, como em todas as consultas, a operação é contra a coleção de documentos de um índice e a consulta inclui um search parâmetro, que neste caso fornece a consulta parcial. Em segundo lugar, você deve adicionar suggesterName à solicitação. Se um sugeridor não estiver definido no índice, as chamadas para preenchimento automático ou as sugestões falharão.

POST /indexes/myxboxgames/docs/autocomplete?search&api-version=2023-11-01
{
  "search": "minecraf",
  "suggesterName": "sg"
}

Código de exemplo

Próximos passos

Saiba mais sobre pedidos\ formulação.