Aprimorar 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 mecanismos de pesquisa tentam retornar os resultados mais relevantes para consultas de pesquisa. A Pesquisa de IA do Azure implementa uma versão aprimorada do Apache Lucene para pesquisa de texto completo.

Aqui, você vai aprender a escrever consultas Lucene mais complexas. Depois, você vai aprimorar a relevância dos resultados aumentando termos específicos na consulta de pesquisa.

Pesquisar um índice

A Pesquisa de IA do Azure permite consultar um índice usando um ponto de extremidade REST ou dentro do portal do Azure com a ferramenta Gerenciador de pesquisa. Se você quiser fazer uma recapitulação rápida das fases do processamento de consulta, confira a unidade de índice de pesquisa em Criar uma solução da Pesquisa de IA do Azure.

Diagrama que mostra as quatro fases do processamento de consultas.

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

Você usará o gerenciador de pesquisa para visualizar a diferença de como o uso do tipo de consulta simples e completo e o efeito que isso tem nos resultados da sua pesquisa.

Observação

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

Criar uma consulta simples

Os dados de exemplo de hotel contêm 50 hotéis com descrições, detalhes do quarto e localizações. Imagine que você administra um negócio de reservas em 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 precisam ser mostrados primeiro.

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

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 dos documentos com a adição da opção select.

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

O último parâmetro na consulta solicita que o índice conte o total de resultados.

$count=true

Não há nenhuma análise léxica necessária para que a recuperação de documentos retorne 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 poderá se surpreender porque o hotel superior que deveria estar em luxo está na categoria econômica e não tem ar condicionado. Se o cliente inserir várias palavras na pesquisa, o aplicativo entenderá que todos os termos deverão estar nos resultados, portanto, adicionará + entre os termos da consulta. A consulta enviada à API é:

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

O serviço de pesquisa agora retorna cinco documentos, mas os resultados mais importantes ainda estão na categoria econômica.

Habilitar o analisador de consultas Lucene

Você pode informar que o gerenciador de pesquisa deve usar o analisador de consulta Lucene 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 do Lucene, você pode escrever consultas mais precisas. Veja um resumo dos recursos disponíveis:

  • Operadores boolianos: AND, OR, NOT, por exemplo, luxury AND 'air con'.
  • Pesquisa em campo: fieldName:search term, por exemplo, Description:luxury AND Tags:air con.
  • Pesquisa difusa: ~, por exemplo Description:luxury~, retorna resultados com versões de luxo soletradas incorretamente.
  • Pesquisa de proximidade de termo: "term1 term2"~n, por exemplo, "indoor swimming pool"~3 retorna documentos com as palavras indoor swimming pool dentro de três palavras de cada uma.
  • Pesquisa de expressão regular: /regular expression/ o uso de uma expressão regular entre /, por exemplo, /[mh]otel/ retornaria documentos com hotel e motel.
  • Pesquisa curinga: *, ? em que * corresponderá a muitos caracteres e ? corresponderá a um só caractere, por exemplo, 'air con'* encontraria air con e air conditioning.
  • Agrupamento de precedência: (term AND (term OR term)), por exemplo, (Description:luxury OR Category:luxury) AND Tags:air?con*.
  • Aumento de termos: ^, por exemplo, Description:luxury OR Category:luxury^3 daria aos hotéis com a categoria luxo uma pontuação maior do que aos que têm luxo na descrição.

Para ler mais detalhes sobre esses recursos, confira Sintaxe de consulta Lucene na Pesquisa de IA do Azure.

Aumentar os termos de pesquisa

Usando a opção acima, você pode aprimorar os resultados. O analisador deve dar uma prioridade maior aos hotéis na categoria de luxo. Você também pode ser mais preciso e procurar ar-condicionado no campo Marcas.

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

Adicionando os outros parâmetros de cadeia 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 principais hotéis agora são:

{
  "@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 ele é o primeiro hotel que o cliente verá. O Oceanside Resort está agora em terceiro lugar.