Expansão de consulta

A expansão de consulta é o relaxamento incremental das restrições de consulta para incluir mais resultados quando nenhum ou poucos são encontrados inicialmente. Isso leva a um ajuste no tamanho do resultado por consulta.

Quando não há documentos relevantes para uma consulta, a expansão de consulta retorna documentos menos relevantes para garantir que não haja zero resultados da pesquisa.

Ao contrário do refinamento dinâmico ou dos controles de veiculação, por exemplo, a expansão de consulta não pode ser configurada diretamente no console do Google Cloud . Em vez disso, é necessário configurar a expansão de consulta de forma programática para cada solicitação de pesquisa. Leia mais para saber como configurar a expansão de consultas na API.

Tutorial de expansão de consulta

Neste tutorial, mostramos como ativar o recurso de expansão de consulta. Quando um comprador usa uma frase de pesquisa ambígua ou com várias palavras, ele pode receber uma resposta vazia. Depois de ativar a expansão de consulta, a solicitação é analisada e a lista expandida de produtos com base na consulta de pesquisa analisada é retornada.


Para seguir as instruções da tarefa diretamente no editor do Cloud Shell, clique em Orientação:

Orientações


Visão geral da expansão de consulta

A expansão de consulta é um recurso eficiente projetado para melhorar a recuperação de pesquisa e evitar cenários de zero resultados, principalmente para consultas de usuários complexas ou de cauda longa.

Em vez de não retornar resultados quando uma correspondência exata não é encontrada no catálogo de produtos, a expansão de consulta identifica e mostra produtos relacionados ou alternativos. Isso melhora a experiência do usuário e pode aumentar as taxas de conversão.

Os principais casos de uso da expansão de consultas são:

  • Consultas de cauda longa: para pesquisas altamente específicas, como leite orgânico com alto teor de proteína e baixo teor de gordura para diabéticos,o catálogo pode não ter uma correspondência perfeita. A expansão de consulta pode retornar produtos que correspondem a partes da intenção, como produtos marcados com atributos ou valores de atributos de leite adequado para diabéticos, leite com alto teor de proteína.
  • Produtos alternativos: se os usuários pesquisarem uma marca ou um produto que não está no catálogo, como Café Starbucks 100 ml,a expansão de consulta pode sugerir marcas de café alternativas disponíveis para compra, evitando uma pesquisa sem resultados.

As próximas seções descrevem a funcionalidade, o mecanismo de acionamento e as nuances de configuração do recurso de expansão de consulta na Vertex AI para Pesquisa em E-commerce, com foco específico na função essencial do filtro canônico.

Mecanismo de acionamento da expansão de consulta

A decisão de ativar a expansão de consulta ou uma determinada consulta de pesquisa é automatizada e baseada em uma regra de filtro canônico rapidamente configurável.

  • Condição de acionamento: a expansão de consulta só é acionada se a pesquisa inicial com a consulta de filtro canônico gerar menos de três resultados de produtos.
  • Limite: esse limite de 3 por padrão pode ser alterado. Ela funciona bem na maioria dos casos de uso de e-commerce, garantindo que a expansão de consulta seja ativada somente se e quando o conjunto de resultados inicial for realmente esparso.

Configurar a expansão de consulta na API

A expansão de consulta é configurada de maneira programática por solicitação usando a API da seguinte forma:

  • Configuração da API: você controla a expansão de consultas incluindo o objeto queryExpansionSpec no seu SearchRequest.

  • Configurações: em queryExpansionSpec, defina o campo condition como AUTO para ativar o recurso ou DISABLED para desativá-lo, que é o padrão se não for especificado.

  • Fixação: você pode definir pinUnexpandedResults como true na solicitação para garantir que as correspondências exatas da consulta original apareçam na parte de cima dos resultados da pesquisa, seguidas pelos resultados expandidos. Para mais informações, leia a página sobre fixação.

Configurar filtros canônicos

Para que a expansão de consulta seja acionada de maneira eficaz, é necessário configurar corretamente o canonical_filter na solicitação de pesquisa.

Para implementar corretamente a expansão de consulta, é fundamental entender os dois principais parâmetros de filtro em uma solicitação de pesquisa: filtros de nível superior e filtros canônicos.

  • Filtro de nível superior (filter): é o filtro principal aplicado aos resultados da pesquisa antes de serem retornados ao usuário. É uma combinação de duas camadas possíveis:

    • Filtro comercial/básico: regras predefinidas aplicadas a todas as pesquisas, geralmente sem entrada direta do usuário, como inStock=TRUE, category="groceries", storeId="XYZ".

    • Filtros de faceta selecionados pelo usuário: filtros aplicados dinamicamente pelo usuário ao interagir com a interface de pesquisa, como ao selecionar filtros de faceta para marca="Adidas", tamanho="G".

  • Filtros canônicos (canonical_filter): um filtro especial usado exclusivamente pelo módulo de decisão de expansão de consulta. A única função dele é definir a visualização do catálogo em relação à qual a condição de acionamento da expansão da consulta (menos de cinco resultados) é avaliada.

Funções principais de filtro canônico

O filtro canônico foi projetado para distinguir entre um resultado de pesquisa organicamente ruim e um conjunto de resultados que foi intencionalmente reduzido pelo usuário.

Cenário 1

  • Jornada do usuário: o usuário pesquisa camiseta e recebe milhares de resultados. Há um business_filter padrão que, por exemplo, filtra apenas produtos em estoque e produtos que correspondem a um atributo personalizado no nível da loja. Em seguida, o usuário aplica filtros de refinamento por marca="Adidas" e tamanho="G", o que reduz a contagem de resultados para dois.
  • Se canonical_filter for igual a filter: o sistema de decisão de expansão de consulta mostraria apenas dois resultados e acionaria a expansão de consulta de forma incorreta, mostrando produtos relacionados, mas irrelevantes, como camisetas da Nike, o que desrespeita a filtragem explícita do usuário.
  • A configuração correta é canonical_filter = business filter: a decisão de expansão de consulta deve ser tomada com base na consulta inicial, excluindo as facetas selecionadas pelo usuário.

Cenário 2

  • Jornada do usuário: o usuário pesquisa camiseta adidas com estampas gráficas pretas e recebe apenas um ou dois resultados, se houver. Há um business_filter padrão que, por exemplo, filtra apenas produtos em estoque e produtos que correspondem a um atributo personalizado no nível da loja.
  • Se canonical_filter não estiver definido ou configurado corretamente, a pesquisa com filtro canônico poderá encontrar produtos que correspondem à consulta, mas estão fora de estoque ou são de uma loja diferente, o que significa um valor diferente do atributo personalizado no nível da loja. Nesse caso, a expansão de consulta não é acionada.
  • A configuração correta é canonical_filter = business filter. A decisão de expansão de consulta encontraria menos de três produtos para a consulta longa especificada e, em seguida, acionaria uma expansão de consulta e traria produtos relacionados à consulta original, ou seja, produtos em estoque que correspondem ao atributo no nível da loja. Assim, os resultados da pesquisa seriam expandidos para incluir camisetas pretas estampadas de outra marca, camisetas estampadas de outras cores ou outros produtos de camisetas da marca na consulta.

Práticas recomendadas de expansão de consultas

O filtro canônico precisa ser quase sempre idêntico ao filtro comercial ou de base. Isso garante que o módulo de expansão de consulta avalie o potencial da consulta em relação à mesma visualização ampla do catálogo que os usuários veem inicialmente antes de começar a aplicar facetas.

Fluxo de processo de pesquisa e expansão de consultas de ponta a ponta

Quando uma solicitação de pesquisa é feita, vários processos paralelos ocorrem:

  • Solicitação recebida: a API recebe a solicitação de pesquisa com a consulta, o filter principal e o canonical_filter.

  • Pesquisa de decisão de expansão de consulta: em paralelo, o módulo de decisão de expansão de consulta realiza a própria pesquisa interna usando a consulta combinada com o filtro canônico.

  • Verificação da contagem de resultados: o módulo verifica o número de produtos retornados da pesquisa interna.

    • Se os resultados forem cinco ou mais: a expansão de consulta não será acionada. Os resultados da pesquisa padrão seguem para a etapa final de filtragem.
    • Se os resultados forem menos de cinco: a expansão da consulta será acionada. O modelo flexibiliza sistematicamente a consulta para encontrar produtos relacionados. Por exemplo, o modelo pode encontrar smartphones Pixel 5, Pixel 4, fones de ouvido Pixel ou até mesmo smartphones Samsung.
  1. Filtragem final: o conjunto de produtos (original ou expandido pela expansão de consulta) é transmitido para a etapa final. Nesse caso, o filtro de nível superior, que contém regras de negócios e facetas selecionadas pelo usuário, é aplicado de forma estrita.
  • Resposta enviada: a lista final filtrada de produtos é retornada na resposta da API.

Caso de uso avançado da ativação seletiva da expansão de consulta

É possível configurar estrategicamente os filtros para ativar ou desativar a expansão de consultas em partes específicas do seu catálogo.

Considere o cenário de um grande catálogo com alimentos, eletrônicos e roupas de moda. Para um cenário assim, é importante ter em mente os seguintes aspectos.

Meta

Ative a expansão de consulta para consultas de supermercado difíceis de encontrar ou escassas, mas mostre zero resultados para eletrônicos ou itens de moda. A necessidade comercial aqui é ativar a expansão de consulta apenas na parte de alimentos.

Configuração

Para esse cenário de caso de uso, a expansão seletiva de consultas pode ser configurada da seguinte maneira:

  • canonical_filter: defina como ampla. Ele precisa incluir todas as categorias: supermercado, eletrônicos e moda, além de regras básicas, como disponibilidade de estoque, definindo o filtro canônico com category="groceries" OR category="electronics" OR category="fashion") AND inStock=TRUE.
  • filter: defina como estreito, com base no contexto do usuário. Para um usuário na seção de supermercado, o filtro seria category="groceries" AND inStock=TRUE.

Como funciona

A expansão seletiva de consultas funciona da seguinte maneira nesse cenário:

  • O usuário pesquisa "iPhone 20": o módulo de expansão de consulta usa o canonical_filter amplo, encontra modelos de iPhone atuais (menos de 5 resultados) e decide não acionar a expansão de consulta. Os resultados da pesquisa padrão (iPhones atuais) são transmitidos ao filtro principal, que os bloqueia porque category="electronics" não corresponde a category="groceries". O usuário vê zero resultados, o que está correto.
  • O usuário pesquisa *leite para diabéticos com alto teor de proteína:o módulo de expansão de consulta usa o canonical_filter amplo e encontra menos de cinco resultados, acionando a expansão de consulta ao encontrar produtos lácteos relacionados. Esses produtos são transmitidos para o filtro principal. Como eles correspondem a category="groceries", os produtos são retornados ao usuário.

Ao manipular o escopo do canonical_filter (a visualização de tomada de decisão) e do filter principal (a visualização de saída final), você ganha controle preciso sobre a experiência de pesquisa.

Exemplo de conjunto de dados

Nesta página, usamos o conjunto de dados a seguir como exemplo. Expanda para conferir os campos no conjunto de dados de descrição de produto de exemplo.

Exemplo de conjunto de dados do produto

ID título brands categories price_info.price
"nest_mini_2nd_gen" "Nest Mini (segunda geração)" ["Google", "Nest"] ["Nest > alto-falantes e telas"] 49,00
"nest_audio" " Audioudio Nest" ["Google", "Nest"] ["Nest > alto-falantes e telas"] 99,99
"nest_hub_max" "Nest Hub Max" ["Google", "Nest"] ["Nest > alto-falantes e telas"] 229,00
"nest_hub" "Nest Hub" ["Google", "Nest"] ["Nest > alto-falantes e telas"] 88,99
"google_home_max" "Google Home Max" ["Google", "Nest"] ["Nest > alto-falantes e telas"] 299,00
"google_home_mini" "Google Home Mini" ["Google", "Nest"] ["Nest > alto-falantes e telas"] 49,00
"google_pixel_5" "Google Pixel 5" ["Google", "Pixel"] ["Pixel > smartphones"] 699,00
"google_pixel_4a_with_5g" "Google Pixel 4a com 5G" ["Google", "Pixel"] ["Pixel > smartphones"] 499,00
"google_pixel_4a" "Smartphones Google Pixel 4a" ["Google", "Pixel"] ["Pixel > smartphones"] 349,00
"google_pixel_stand" "Google Pixel Stand" ["Google", "Pixel"] ["Pixel > acessórios em destaque"] 79,00
"google_pixel_buds" "Google Pixel Buds" ["Google", "Pixel"] ["Pixel > acessórios em destaque"] 179,00
"google_pixel_5_case" "Capa para Google Pixel 5" ["Google", "Pixel"] ["Pixel > acessórios em destaque"] 40,00
"google_pixel_4a_5g_case" "Capa para Google Pixel 4a (5G)" ["Google", "Pixel"] ["Pixel > acessórios em destaque"] 40,00
"google_pixel_4a_case" "Capa para Google Pixel 4a" ["Google", "Pixel"] ["Pixel > acessórios em destaque"] 40,00

Expansão de consulta

A expansão de consulta aumenta o recall para termos de consulta com poucos resultados, especialmente consultas de cauda longa.

Esse recurso de pesquisa é impulsionado por uma especificação que determina as condições de expansão da consulta. Ela inclui uma opção pinUnexpandedResults que fica desativada por padrão. Quando definido como true, ele mostra os produtos não expandidos na parte de cima dos resultados da pesquisa. A parte de cima é seguida pelos resultados expandidos.

Java

import com.google.cloud.retail.v2.SearchRequest;
import com.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec;
import com.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.Condition;
import com.google.cloud.retail.v2.SearchResponse;
import com.google.cloud.retail.v2.SearchServiceClient;

public static void searchProductsWithQueryExpansion(String query, int pageSize,
    Condition condition) throws IOException, InterruptedException {
  QueryExpansionSpec queryExpansionSpec = QueryExpansionSpec.newBuilder()
      .setCondition(condition)
      .build();

  SearchRequest searchRequest = SearchRequest.newBuilder()
      .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
      .setBranch(DEFAULT_BRANCH_NAME)
      .setVisitorId(VISITOR_ID)
      .setQuery(query)
      .setPageSize(pageSize)
      .setQueryExpansionSpec(queryExpansionSpec)
      .build();

  try (SearchServiceClient searchClient = SearchServiceClient.create()) {
    SearchResponse response = searchClient.search(searchRequest).getPage().getResponse();
    System.out.println("Search response: " + searchResponse);
  }
}

Por exemplo, se você pesquisar Google Pixel 5 sem expansão de consulta, o resultado será restrito a IDs google_pixel_5. No entanto, com a expansão de consultas, você também pode receber os IDs google_pixel_4a_with_5g, google_pixel_4a e google_pixel_5_case no conjunto de dados de descrição de produtos de exemplo.