Melhorar a classificação de um documento com aumento de termos

Concluído

A pesquisa funciona melhor quando os resultados mais relevantes são mostrados primeiro. Todos os motores de busca tentam devolver os resultados mais relevantes às consultas de pesquisa. O Azure AI Search implementa uma versão melhorada do Apache Lucene para pesquisa de texto completo.

Aqui, você explorará como escrever consultas Lucene mais complexas. Em seguida, você melhorará a relevância dos resultados impulsionando termos específicos em sua consulta de pesquisa.

Pesquisar um índice

O Azure AI Search permite consultar um índice usando um ponto de extremidade REST ou dentro do portal do Azure com a ferramenta do explorador de pesquisa. Se você quiser uma recapitulação rápida dos estágios do processamento de consultas, consulte a unidade de índice de pesquisa em Criar uma solução de Pesquisa de IA do Azure.

Diagrama mostrando os quatro estágios do processamento de consultas.

Nesta unidade, você se concentrará na análise de consultas.

Você usará o explorador de pesquisa para ver a diferença entre usar o tipo de consulta simples e completa e o efeito que isso tem nos resultados da pesquisa.

Nota

Se você quiser executar as consultas por conta própria, precisará de uma assinatura do Azure. Crie um serviço Azure AI Search e importe os dados de exemplo dos hotéis para um índice.

Escrever uma consulta simples

Os dados de exemplo do hotel contêm 50 hotéis com descrições, detalhes do quarto e suas localizações. Imagine que você administra um negócio de reservas de hotéis e tem um aplicativo com o qual os usuários podem reservar hotéis. Os usuários podem pesquisar e os hotéis mais relevantes devem ser mostrados primeiro.

Você tem um caso de uso em que um cliente está tentando encontrar um hotel de luxo. Comece por ver os resultados da pesquisa a partir desta simples consulta:

search=luxury&$select=HotelId, HotelName, Category, Tags, Description&$count=true

As análises de consulta procurarão o termo luxury em todos os campos de um documento no índice.

A cadeia de caracteres de consulta também limita os campos retornados de documentos adicionando a select opção.

&$select=HotelId, HotelName, Category, Tags, Description

O último parâmetro na consulta pede ao índice para contar os resultados totais.

$count=true

Não é necessária análise lexical, pelo que a recuperação de documentos devolve 14 documentos. Os três primeiros são:

{
  "@odata.context": "https://advanced-cognitive-search.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
  "@odata.count": 14,
  "value": [
    {
      "@search.score": 2.633778,
      "HotelId": "13",
      "HotelName": "Historic Lion Resort",
      "Description": "Unmatched Luxury.  Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort",
      "Category": "Budget",
      "Tags": [
        "view",
        "free wifi",
        "free wifi"
      ]
    },
    {
      "@search.score": 2.1104424,
      "HotelId": "18",
      "HotelName": "Oceanside Resort",
      "Description": "New Luxury Hotel.  Be the first to stay. Bay views from every room, location near the piper, rooftop pool, waterfront dining & more.",
      "Category": "Budget",
      "Tags": [
        "view",
        "laundry service",
        "air conditioning"
      ]
    },
    {
      "@search.score": 1.966516,
      "HotelId": "40",
      "HotelName": "Trails End Motel",
      "Description": "Only 8 miles from Downtown.  On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, All non-smoking hotel. Only 15 miles from airport.",
      "Category": "Luxury",
      "Tags": [
        "continental breakfast",
        "view",
        "view"
      ]
    },
    ...
  ]
}

O cliente pode ficar surpreso que o melhor hotel que você tem que deveria ser de luxo está na categoria de orçamento e não tem ar condicionado. Se o cliente inserir várias palavras em sua pesquisa, seu aplicativo presumirá que todos os termos devem estar nos resultados, portanto, adiciona + entre termos à consulta. A consulta que ele envia para a API é:

search=luxury + air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true

O serviço de pesquisa devolve agora cinco documentos, mas os principais resultados continuam na categoria de orçamento.

Ativar o Analisador de Consultas Lucene

Você pode dizer ao explorador de pesquisa para usar o analisador Lucene Query adicionando &queryType=full à cadeia de caracteres de consulta.

search=luxury AND air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full

Com a sintaxe Lucene, você pode escrever consultas mais precisas. Aqui está um resumo dos recursos disponíveis:

  • Operadores booleanos: AND, OR, por NOT exemplo luxury AND 'air con'.
  • Pesquisa em campo: por exemploDescription:luxury AND Tags:air con, fieldName:search term .
  • Pesquisa difusa: por exemploDescription:luxury~, ~ retorna resultados com versões de luxo com erros ortográficos.
  • Pesquisa de proximidade de termos: por exemplo"indoor swimming pool"~3, "term1 term2"~n retorna documentos com as palavras piscina coberta dentro de três palavras uma da outra.
  • Pesquisa de expressão regular: use uma expressão regular entre/, por exemplo/[mh]otel/, /regular expression/ devolveria documentos com hotel e motel.
  • Pesquisa curinga: , onde * vai corresponder muitos caracteres e corresponde a um único caractere?, *por exemplo'air con'*, ? encontraria ar condicionado e ar condicionado.
  • Agrupamento de precedências: por exemplo(Description:luxury OR Category:luxury) AND Tags:air?con*, (term AND (term OR term)) .
  • Reforço de termos: por exemploDescription:luxury OR Category:luxury^3, ^ daria aos hotéis com a categoria luxo uma pontuação mais alta do que luxo na descrição.

Para ler mais detalhes sobre esses recursos, consulte Sintaxe de consulta Lucene no Azure AI Search.

Impulsionar termos de pesquisa

Usando o acima você pode melhorar os resultados. O analisador deve dar maior prioridade aos hotéis na categoria de luxo. Você também pode ser mais preciso e procurar por ar condicionado no campo Tags .

(Description:luxury OR Category:luxury^3) AND Tags:'air con'*

Adicionando os outros parâmetros de seqüência de caracteres de consulta, você obtém esta cadeia de caracteres de consulta:

search=(Description:luxury OR Category:luxury^3) AND Tags:'air con'*&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full

Os três melhores hotéis são agora:

{
  "@odata.context": "https://advanced-cognitive-search.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
  "@odata.count": 5,
  "value": [
    {
      "@search.score": 5.3537707,
      "HotelId": "8",
      "HotelName": "Sapphire Resort",
      "Description": "Downtown, close to everything, steps to the park, shopping, and restaurants.",
      "Category": "Luxury",
      "Tags": [
        "free wifi",
        "continental breakfast",
        "air conditioning"
      ]
    },
    {
      "@search.score": 5.3522806,
      "HotelId": "49",
      "HotelName": "Old Carrabelle Hotel",
      "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
      "Category": "Luxury",
      "Tags": [
        "air conditioning",
        "laundry service",
        "24-hour front desk service"
      ]
    },
    {
      "@search.score": 4.1448884,
      "HotelId": "18",
      "HotelName": "Oceanside Resort",
      "Description": "New Luxury Hotel.  Be the first to stay. Bay views from every room, location near the piper, rooftop pool, waterfront dining & more.",
      "Category": "Budget",
      "Tags": [
        "view",
        "laundry service",
        "air conditioning"
      ]
    },
    ...
  ]
}

A pontuação de pesquisa do Sapphire Resorts aumentou de 2.3321536 para 5.3537707 e é agora o primeiro hotel que o cliente verá. O Oceanside Resort está agora em terceiro lugar.