<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Alexander Marquardt - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Alexander Marquardt - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/pt/search-labs/author/alexander-marquardt</link>
    </image>
    <link>https://www.elastic.co/pt/search-labs/author/alexander-marquardt</link>
    <atom:link href="https://www.elastic.co/pt/search-labs/rss/author/alexander-marquardt.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[pt]]></language>
    <lastBuildDate>Fri, 18 Sep 2026 21:23:15 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Busca por IA agêntica com proteções determinísticas no Elasticsearch para execução segura de consultas]]></title>
    <description><![CDATA[Sistemas de busca por IA agêntica falham quando LLMs geram consultas diretamente. Aprenda como as proteções determinísticas e uma arquitetura de plano de controle permitem a execução de consultas seguras, confiáveis e governadas com o Elasticsearch.]]></description>
    <content:encoded><![CDATA[<p><a href="https://www.elastic.co/search-labs/blog/agentic-ai-search-deterministic-guardrail-query-execution">As partes 1 a 7</a> desta série descreveram um plano de controle governado para buscas em e-commerce. Um usuário digita uma consulta. O plano de controle classifica a intenção, aplica restrições de negócios, resolve conflitos de políticas e direciona para a estratégia de recuperação apropriada, tudo isso antes mesmo de o catálogo de produtos ser consultado. Toda a arquitetura pressupõe que a entrada seja uma string de busca digitada por um comprador humano.</p><p>Esta postagem final pergunta: O que muda quando a entrada vem de um agente de IA?</p><p>A resposta é que a arquitetura não muda,  mas o que está em jogo, sim. Todas as propriedades do plano de controle governado que importam para consultas criadas por humanos tornam-se <em>ainda mais</em> importantes quando o tomador de decisão é um modelo de linguagem de grande porte (LLM). Determinismo, auditabilidade, resolução de conflitos e aplicação de restrições tornam-se proteções fundamentais em vez de conveniências operacionais, porque o sistema que produz os dados de entrada é probabilístico por natureza.</p><h2>O problema de busca agêntica</h2><p>A abordagem mais comum para a busca impulsionada por IA é direta: forneça ao LLM o esquema do banco de dados, insira as regras de negócio no prompt e permita que o agente gere a consulta diretamente.</p><p>Para um chatbot de e-commerce, isso significa injetar o mapeamento de índice do Elasticsearch, os tipos de campo, as taxonomias de categorias, a lógica de preços e as restrições de negócio na janela de contexto do agente e pedir ao LLM que traduza a linguagem natural para um DSL válido de consulta Elasticsearch. O LLM se torna o autor da consulta.</p><p>Essa abordagem funciona em demonstrações. Ela falha na produção por quatro motivos.</p><h3>Excesso de contexto</h3><p>Um mapeamento de índice de e-commerce empresarial não é um documento trivial. Definições de campos, objetos aninhados, configurações de múltiplos campos e configurações de analisador podem conter milhares de tokens antes que qualquer lógica de negócio seja adicionada. Além do mapeamento, o agente precisa de taxonomias de categorias (que, no e-commerce empresarial, podem conter dezenas de milhares de valores), regras de preços, hierarquias de marcas, restrições de elegibilidade e lógica de campanhas.</p><p>O resultado é uma janela de contexto dominada por metadados estruturais em vez da real intenção do usuário. Isso aumenta a latência, aumenta o custo do token e degrada a capacidade do LLM de seguir instruções à medida que o contexto cresce. Este é um fenômeno bem documentado, às vezes chamado <a href="https://www.trychroma.com/research/context-rot"><em>decomposição de contexto</em></a>: conforme o prompt fica mais longo, a atenção do modelo a qualquer instrução específica enfraquece.</p><h3>Alucinação probabilística</h3><p>Os LLMs geram consultas com base em padrões em dados de treinamento e no contexto fornecido. Quando recebe a solicitação de produzir Elasticsearch Query DSL, o modelo pode alucinar nomes de campos que não existem, criar cláusulas de consulta sintaticamente inválidas, aplicar incorretamente tipos de filtro aos tipos de campo errados ou produzir consultas que são sintaticamente válidas, mas semanticamente erradas, retornando resultados que não correspondem à intenção do usuário.</p><p>O <a href="https://cloud.google.com/blog/products/databases/how-to-get-gemini-to-deeply-understand-your-database">benchmark BIRD do Google Cloud para Text-to-SQL</a> ilustra o limite dessa abordagem. O resultado de última geração do Google, baseado em um único modelo, alcançou uma precisão entre 70% e 80%, o que significa que quase uma em cada quatro consultas geradas estava incorreta. Isso é para SQL, que é muito mais padronizado do que o DSL de Consulta Elasticsearch. A taxa de erro para consultas do Elasticsearch geradas pelo LLM em um ambiente de produção real, com mapeamentos complexos e semântica específica do negócio, provavelmente seria maior.</p><p>Para um sistema de e-commerce crítico para a receita, uma taxa de erro de um para quatro consultas não é um problema de ajuste a ser resolvido iterativamente. É uma limitação arquitetônica da abordagem.</p><h3>A lacuna de segurança</h3><p>Quando o LLM tem acesso ao esquema do banco de dados e age como o autor da consulta, o sistema fica vulnerável à injeção indireta de prompt. Um usuário interagindo com um chatbot de e-commerce pode criar entradas projetadas para manipular o agente a gerar consultas não intencionais.</p><p>Isso não é um risco teórico. <a href="https://www.elastic.co/blog/owasp-top-10-for-llms-guide">Injeção de prompt</a> é uma das superfícies de ataque mais ativamente pesquisadas em sistemas LLM implantados. A questão fundamental é que, quando o agente cria a consulta, não há uma fronteira estrutural entre a intenção do usuário e a execução da consulta. O LLM interpreta simultaneamente a solicitação do usuário e constrói a operação do banco de dados. Qualquer manipulação do primeiro afeta diretamente o segundo.</p><h3>Falha de redimensionamento em alta cardinalidade</h3><p>Certos campos de e-commerce têm cardinalidade extrema. Um catálogo de produtos pode ter 17.000 valores de categoria, milhares de marcas e centenas de combinações de atributos. Fluxos de trabalho agênticos padrão exigem a injeção desses valores no contexto para que o LLM possa selecionar o correto ao construir uma consulta.</p><p>Isso cria um trade-off impossível: ou se injetam todos os valores possíveis (consumindo um contexto enorme e degradando o desempenho), se injeta um subconjunto (e se aceita que o agente não pode referenciar valores fora desse subconjunto) ou se recorre à busca não governada. Isso se conecta diretamente ao problema central da <a href="https://www.elastic.co/search-labs/blog/ecommerce-search-governance-improve-retrieval">Parte 1</a>: se o LLM pesquisar por “laranjas” e o Elasticsearch retornar refrigerante de laranja, a experiência do chat se degrada da mesma forma que uma experiência de busca. A ausência de governança significa que o sistema não consegue aplicar a resolução pretendida pelo consumidor.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt14a980ba09d88ee8/6a16f34d66c4f98516f8bd97/f11c44feb5291002d4ec4ac79484ea39d4e48a95-642x133.png" alt="Um fluxograma mostra uma solicitação do usuário: &quot;Quero preparar uma bebida refrescante...&quot;, resultando em uma saída LLM de &quot;laranjas&quot;, seguida por um servidor de aplicativos enviando uma consulta de texto por laranjas para um catálogo de produtos, terminando com resultados que mostram marmelada, laranjas inteiras e refrigerante de laranja." /><p>Recuperar valores relevantes de forma dinâmica com base na consulta é uma alternativa conhecida, mas introduz uma etapa adicional não determinística onde a própria recuperação pode perder valores relevantes. Além disso, adiciona latência e complexidade a cada consulta.</p><h2>A alternativa arquitetônica: desacoplar intenção da execução</h2><p>O plano de controle governado descrito nas Partes 1 a 7 oferece uma abordagem fundamentalmente diferente. Em vez de o LLM criar a consulta final, a função do LLM é reduzida a uma tarefa única e bem delimitada: extrair uma string de intenção de busca da entrada de linguagem natural do usuário.</p><p>O usuário diz: "Estou procurando sapatos marrons baratos." O trabalho do agente não é gerar uma consulta Elasticsearch. É extrair e repassar a intenção de busca (neste caso, algo como "sapatos marrons baratos") para o plano de controle. O plano de controle então faz o que sempre fez: permeia a string de intenção contra políticas armazenadas, compõe políticas correspondentes por meio de transformações em cascata, resolve conflitos deterministicamente e produz uma consulta Elasticsearch governada.</p><p>O LLM nunca vê o mapeamento do índice. Ele nunca sabe sobre tipos de campo, taxonomias de categorias ou limites de preço. Ele nunca cria uma cláusula de consulta. Ele opera no lado da linguagem natural de uma fronteira arquitetônica que chamamos de <em>lacuna de metadados</em>, uma separação estrita entre o componente probabilístico (o LLM) e a camada de dados estruturados (esquema, políticas e construção de consultas).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb4d701bfa4f2f279/6a16f34e1949f70ddce7a78d/12dacc77f0c481c9ada84725eff370c7e2c4b429-642x143.png" alt="Um fluxograma mostra uma solicitação do usuário: &quot;Quero fazer uma bebida refrescante...&quot;, resultando em uma saída LLM de &quot;laranjas&quot;, seguida por um servidor de aplicativos enviando a consulta para um plano de controle e recebendo uma consulta reescrita, que é usada para realizar uma consulta de texto por laranjas na categoria Frutas, terminando com uma pesquisa de produto que retorna imagens de laranjas." /><h3>O que a separação de metadados oferece</h3><ul><li><p><strong>Cegueira ao esquema.</strong> O LLM não tem acesso ao esquema do banco de dados e, portanto, não pode gerar consultas inválidas, inventar nomes de campos ou ser manipulado para expor informações estruturais. O esquema existe apenas no lado determinístico do air gap.</p></li><li><p><strong>Contexto mínimo.</strong> Em vez de milhares de tokens de dados de mapeamento, regras de negócios e taxonomias de categorias, o prompt do LLM contém apenas instruções para extração de persona e intenção. Isso reduz drasticamente o custo do token, a latência e a deterioração do contexto.</p></li><li><p><strong>Execução determinística.</strong> Toda consulta que chega ao Elasticsearch é construída pelo plano de controle usando modelos de políticas avaliados por humanos, e não gerada probabilisticamente por um LLM. A validade sintática é garantida. A correção semântica é imposta pelo mesmo framework de políticas que as Partes 1 a 6 descreveram.</p></li><li><p><strong>Segurança pela arquitetura.</strong> A injeção rápida se torna estruturalmente ineficaz. Mesmo que um usuário manipule o agente para produzir uma string de intenção incomum, essa string é permeada contra políticas armazenadas. Se nenhuma política corresponde, nenhuma consulta é gerada. O usuário não pode instruir o agente a construir uma consulta porque o agente não cria consultas. O plano de controle sim, e o plano de controle é determinístico.</p></li></ul><h2>Como as peças se conectam</h2><p>O guia a seguir mostra como o plano de controle governado lida com uma consulta mediada por agente.</p><h3>Passo 1: O usuário fala com o agente</h3><p>Um comprador interagindo com um chatbot de e-commerce diz: "Estou procurando chocolate barato, sem amendoim."</p><h3>Etapa 2: O agente extrai a intenção</h3><p>O papel do LLM é extração de intenções, não geração de consultas. Com uma solicitação mínima que o instrui a identificar a intenção do produto, o agente produz uma string de intenção de buscar: "chocolate barato sem amendoim".</p><p>Esta é uma tarefa de classificação leve. O LLM não precisa do mapeamento de índice, taxonomia de categorias ou regras de precificação para realizá-lo. Ele precisa entender linguagem natural, que é exatamente no que os LLMs são bons.</p><h3>Etapa 3: O plano de controle governa a consulta</h3><p>A string de intenção "chocolate barato sem amendoim" é passada para o plano de controle, que a filtra contra o índice de política. Três políticas coincidem:</p><ul><li><p>A política "barato" (extrai "barato", aplica um filtro de preço com base na categoria do produto).</p></li><li><p>A política de "chocolate" (restringe os resultados a categorias de chocolate).</p></li><li><p>A política de negação "sem" (extrai o alvo de exclusão e aplica um filtro <code>must_not</code> )</p></li></ul><p>O plano de controle aplica essas políticas por meio da mesma transformação em cascata descrita nas <a href="https://www.elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture">Partes 3</a> e <a href="https://www.elastic.co/search-labs/blog/elasticsearch-percolator-search-governance">4</a>: ordenação de prioridade, resolução de conflitos por campo e rastreamento de frases consumidas. Se uma política de "campanha de Natal" também estiver ativa, ela se compõe com as políticas de produto exatamente como descrito na <a href="https://www.elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture">Parte 3,</a> o envolvimento do agente não altera em nada o modelo de governança.</p><h3>Etapa 4: A consulta controlada é executada</h3><p>O plano de controle gera uma consulta Elasticsearch totalmente governada: uma busca por "chocolate", restrita às categorias apropriadas, com um limite de preço derivado da política de "barato", um filtro de exclusão para produtos que contenham amendoim e quaisquer impulsionamentos de campanha ativos aplicados. Se a política de “chocolate” também incluir pesos de otimização econômica (<a href="https://www.elastic.co/search-labs/blog/ecommerce-search-optimization-query-governed">Parte 7</a>), estes também serão aplicados. O aumento de margem está definido em 3,0x porque "chocolate" é uma consulta de navegação em que o varejista se beneficia ao promover produtos com margens mais altas. Se o comprador tiver um histórico de compras<a href="https://www.elastic.co/search-labs/blog/elasticsearch-personalized-search-governed-ecommerce">(Parte 6</a>), os sinais de personalização serão colocados em camadas. Essa consulta é sintaticamente válida por construção e semanticamente correta de acordo com a política de projeto.</p><h3>Etapa 5: Retorno dos resultados pelo agente</h3><p>Os resultados do produto são retornados ao agente, que os apresenta de forma conversacional ao usuário. O papel do agente no caminho de retorno é a apresentação: formatar resultados, responder perguntas de acompanhamento e fornecer detalhes do produto. A própria recuperação era governada, determinística e explicável.</p><h2>No que o agente é bom (e no que não é)</h2><p>Essa arquitetura aproveita o LLM para o que ele faz bem e protege o sistema do que ele faz mal.</p><p>Os LLMs se destacam em compreender a intenção da linguagem natural. "Estou procurando chocolate barato, sem amendoim" é uma tarefa de compreensão de linguagem natural, analisando a intenção, identificando referências de produtos e reconhecendo a negação. Os LLMs lidam com isso de forma confiável porque é um problema de classificação, não de geração. A saída é uma string curta de intenção, não uma consulta complexa e estruturada.</p><p>Os LLMs enfrentam dificuldades para gerar resultados estruturados precisos sob restrições complexas. A geração de DSL válida do Elasticsearch Query exige nomes de campo exatos, aninhamento correto de cláusulas, tipos de filtro apropriados para cada campo e aplicação consistente de regras de negócios em milhares de casos extremos. Essas são exatamente as propriedades que um sistema determinístico impõe trivialmente e que um sistema probabilístico aplica de forma pouco confiável.</p><p>O plano de controle governado coloca cada componente onde ele pertence: o LLM no lado da linguagem natural, o mecanismo de política determinística no lado da construção de consultas e um limite arquitetônico entre eles.</p><h2>A governança restringe o raio da explosão</h2><p>Essa é a mesma percepção da <a href="https://www.elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture">Parte 3</a>, ampliada ao contexto agêntico. Na Parte 3, observamos que a governança torna a recuperação semântica mais segura ao restringir o conjunto de candidatos antes do início da recuperação. Uma busca semântica sobre 500 produtos em uma categoria governada é uma proposta fundamentalmente diferente de uma busca semântica sobre 500.000 SKUs.</p><p>O mesmo princípio se aplica a consultas mediadas por agentes. Sem governança, um agente que interprete mal "chocolate barato" poderia gerar uma consulta que buscasse todo o catálogo sem restrição de preço, sem filtro de categoria e sem exclusões. Com governança, mesmo que o agente produza uma string de intenção imperfeita, o plano de controle restringe a consulta às políticas que correspondem. O pior cenário é que menos políticas sejam ativadas, não que uma consulta ilimitada entre no catálogo de produtos.</p><p>A governança reduz o raio de explosão de erros probabilísticos. Isso é verdade tanto para o componente probabilístico quanto para um modelo semântico de recuperação ou um agente de LLM.</p><h2>Políticas sugeridas pelo LLM: ampliar a cobertura</h2><p><a href="https://www.elastic.co/search-labs/blog/ecommerce-search-governance-zero-deploy">A Parte 2</a> introduziu a ideia de que um LLM pode sugerir novas políticas que entram no mesmo pipeline Author → Test → Promote que as criadas por humanos. No contexto agente, isso se torna um poderoso ciclo de retroalimentação.</p><p>Um LLM pode analisar os logs de consulta, identificar padrões em que o plano de controle não tem uma política correspondente (consultas que passam por uma recuperação não modificada) e sugerir novas políticas para cobrir essas lacunas. Um comerciante analisa cada sugestão, testa e a promove se ela produzir o comportamento esperado. O modelo de governança garante que nenhuma política sugerida pelo LLM chegue à produção sem validação humana.</p><p>Com o tempo, isso cria um ciclo virtuoso: a abrangência das políticas do plano de controle se expande, a proporção de consultas que exigem recuperação sem modificações diminui e o sistema se torna progressivamente mais governado, com cada política auditável, versionada e reversível individualmente.</p><h2>O padrão mais amplo: proteções determinísticas para sistemas probabilísticos</h2><p>A arquitetura descrita nesta série, um plano de controle determinístico que se situa entre uma fonte de entrada probabilística e um sistema de recuperação de dados, não é específica para busca em e-commerce. O mesmo padrão se aplica sempre que um agente de IA precisa interagir com dados estruturados.</p><p>Um agente que consulta um banco de dados SQL enfrenta os mesmos desafios: excesso de contexto devido à injeção de esquema, nomes de colunas alucinados, riscos de injeção imediata e seleção de valores de alta cardinalidade. Um agente interagindo com um sistema de emissão de tíquetes como o Jira, um sistema de gerenciamento de relacionamento com o cliente (CRM) como o Salesforce ou um repositório de código como o GitHub enfrenta problemas análogos. Em todos os casos, a questão arquitetônica do núcleo é a mesma: o LLM deve criar a consulta ou o LLM deve extrair a intenção e passá-la para uma camada determinística que cria a consulta?</p><p>O plano de controle governado fornece uma resposta repetível para essa pergunta. As políticas são dados. A extração de intenções é tarefa do LLM. A construção de consultas é tarefa do plano de controle. O espaço de metadados os mantém separados. E o framework de governança (ordenação de prioridades, resolução de conflitos, transformações em cascata, auditabilidade) garante que a camada determinística seja operacionalmente gerenciável à medida que o número de políticas cresce.</p><h2>Conclusão</h2><p>Os padrões de governança de pesquisa de e-commerce descritos nesta série (políticas como dados, fluxo de trabalho Autor → Teste → Promover, transformações em cascata, resolução de conflitos por campo, correspondência reversa baseada em permeações e fallback de várias camadas) foram projetados para um mundo em que um comerciante cria políticas e um comprador digita consultas. Mas a arquitetura pode permitir muito mais do que seu caso de uso inicial.</p><p>Quando a fonte de entrada é um agente de IA em vez de um comprador humano, o plano de controle governado torna-se a camada de segurança crítica entre um sistema probabilístico e um armazenar de dados de produção. Ele oferece as garantias determinísticas (validade sintática, correção semântica, auditabilidade e segurança) que os sistemas corporativos exigem e que os LLMs não podem fornecer sozinhos.</p><p>O plano de controle determinístico não substitui o agente de IA. Isso torna o agente de IA seguro para implantação.</p><h2>Coloque em prática o buscar governado de comércio eletrônico</h2><p>A arquitetura do plano de controle governado descrita nesta série, desde o paradigma de política como dados até a busca baseada em permeação, passando pela personalização, otimização econômica e o espaço aéreo agente, foi projetada e construída pela Elastic Services Engineering. Cada padrão descrito nesta série provém de um sistema funcional construído e validado em catálogos de produtos de escala empresarial.</p><p>Se sua equipe está desenvolvendo experiências de busca com inteligência artificial e precisa de diretrizes determinísticas para consultas mediadas por agentes, ou se deseja implementar uma arquitetura de busca governada e editável pela empresa no Elasticsearch, o Elastic Professional Services pode acelerar a implementação. Entre em contato com o <a href="https://www.elastic.co/consulting">Elastic Professional Services</a>.</p><h2>Participe da discussão</h2><p>Tem dúvidas sobre governança de buscar, estratégias de recuperação ou arquitetura de buscar para e-commerce? Participe da <a href="https://discuss.elastic.co/">conversa mais ampla da comunidade Elastic</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/agentic-ai-search-deterministic-guardrail-query-execution</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/agentic-ai-search-deterministic-guardrail-query-execution</guid>
    <category><![CDATA[Operações]]></category>
    <dc:creator><![CDATA[Alexander Marquardt,Honza Král,Taylor Roy]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt5b5aa5493a75281a/6a16f3490811ae71b8e9fe94/769cdc7b53cbb222f52095193cd423277e8017d9-1280x720.png" length="0" type="image/png"/>
    <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Personalizando a busca de e-commerce: integrando o histórico de compras e de grupos de usuários]]></title>
    <description><![CDATA[Aprenda a criar uma experiência personalizada de busca em e-commerce no Elasticsearch sem comprometer a governança. Este post explica como destacar produtos que um cliente já comprou antes e como ativar políticas específicas de grupo com base nos perfis dos usuários.]]></description>
    <content:encoded><![CDATA[<p><a href="https://www.elastic.co/search-labs/blog/series/governed-search-patterns">As partes 1 a 5</a> desta série descrevem um plano de controle governado que classifica a intenção, impõe restrições, resolve conflitos de políticas e direciona para a estratégia de recuperação apropriada, tudo isso antes que o catálogo de produtos seja consultado. Todos os mecanismos descritos até agora tratam todos os compradores de forma idêntica. Uma busca por "chocolate" produz o mesmo conjunto de resultados, independentemente de o comprador ser vegano, um pai comprando chocolate para o aniversário de um filho ou um consumidor que segue os princípios halal.</p><p>Este post apresenta dois mecanismos de personalização que ampliam o plano de controle governado sem alterar a arquitetura. Ambos os mecanismos se acumulam multiplicativamente com a camada de governança das Partes 1 a 5: as políticas ainda são acionadas, as restrições ainda são aplicadas, os conflitos ainda são resolvidos e os sinais de personalização são compostos na mesma consulta governada, garantindo que os resultados retornados pelo Elasticsearch já estejam personalizados.</p><p>O primeiro mecanismo impulsiona produtos que o cliente individual já comprou antes. O segundo ativa políticas específicas de grupo com base no perfil do cliente. Juntos, eles demonstram que a personalização não é um sistema separado acoplado à busca ou aplicado como processamento pós-recuperação; é uma extensão natural do plano de controle orientado por políticas.</p><p>Para uma análise aprofundada da matemática por trás das técnicas de personalização usadas nesta postagem, veja <a href="https://alexmarquardt.com/elastic/personalizing-search-in-elasticsearch-without-ml-post-processing/">Busca personalizada no Elasticsearch sem pós-processamento de ML</a> e <a href="https://www.elastic.co/search-labs/blog/ecommerce-search-relevance-cohort-aware-ranking-elasticsearch">Classificação com reconhecimento de agrupamento no Elasticsearch</a>.</p><p>Para ver uma demonstração em tempo real de como o histórico de compras pode ser usado para melhorar os resultados de busca para clientes recorrentes, assista ao vídeo: <a href="https://www.youtube.com/watch?v=TGf_pOWHA5M">Personalização explicável: melhora na busca com o histórico de compras</a>.</p><h2>Impulsionamento do histórico de compras individual</h2><p>A forma mais simples de personalização também é uma das mais eficazes: se um cliente já comprou um produto antes, valorize-o quando ele buscar algo relacionado ao produto. Um comprador que compra regularmente uma marca específica de cookies com gotas de chocolate deve ver esses biscoitos listados primeiro ao buscar por "cookies", não porque um modelo previu uma preferência, mas porque há evidências comportamentais diretas.</p><h3>Como funciona</h3><p>Quando uma solicitação de pesquisa inclui um identificador de usuário, como seria o caso de um usuário que tem uma sessão aberta, o plano de controle executa duas consultas Elasticsearch em paralelo usando um thread pool:</p><ol><li><p>A consulta percolador no índice de políticas (a mesma pesquisa de governança descrita nas Partes 3 e 4).</p></li><li><p>Uma consulta de histórico de compras em um índice <code>user_purchases</code> , filtrada para o usuário específico por <code>term(user_id)</code> e comparação da string de pesquisa atual com os títulos de produtos desse usuário.</p></li></ol><p>Essas operações executam de forma concomitante (nenhuma espera pela outra), então a busca de personalização não adiciona latência significativa ao pipeline de governança.</p><p>A consulta do histórico de compras usa <a href="https://www.elastic.co/docs/manage-data/data-store/text-analysis">a análise de texto do Elasticsearch</a> (stemming, tokenização) ao comparar a string de busca atual com os títulos de produtos armazenados. Isso significa que ao buscar por "cookies" corresponderá a uma compra anterior de "cookies de brownie" por meio da análise de texto padrão, sem exigir a correspondência exata de string.</p><h3>Cálculo dos pesos de impulso</h3><p>Nem todas as compras passadas merecem o mesmo impulso. O peso é responsável por dois fatores intuitivos: a frequência com que o comprador comprou o produto e há quanto tempo. Um produto comprado 15 vezes na semana passada é um sinal muito mais forte do que um produto comprado uma vez há seis meses. A ponderação usa redimensionamento logarítmico na frequência (para que um único item muito comprado não sobrecarregue todos os outros) e decaimento exponencial na atualidade (para que compras antigas desapareçam naturalmente com o tempo).</p><p>Para saber os detalhes matemáticos da fórmula de impulso, veja <a href="https://alexmarquardt.com/elastic/personalizing-search-in-elasticsearch-without-ml-post-processing/">Busca personalizada no Elasticsearch sem pós-processamento de ML</a>.</p><h3>Como isso se torna uma consulta</h3><p>Os impulsos do histórico de compras são incorporados à consulta como a camada de pontuação mais externa, envolvendo os filtros de política de governança e os impulsos das Partes 3 e 4, além de quaisquer<a href="https://www.elastic.co/search-labs/blog/function-score-query-boosting-profit-popularity-elasticsearch"> impulsos de sinais de negócios, como margem e popularidade</a> (que exploraremos na Parte 7). Isso significa que um produto removido por uma política de governança não reaparecerá devido a um impulso no histórico de compras. <em>A governança</em> controla o conjunto de resultados; <em>a personalização</em> ajusta a ordenação dentro dele. Produtos sem histórico de compras não são penalizados. A classificação que possuíam é mantida, embora produtos com histórico de compras relevante fiquem acima deles, considerando todos os outros fatores iguais.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt731e67dfd3bd6ee2/6a17e9523e9e4582bbba14b6/80f0285bd80935703d39b7a4e1fd6094d71af0aa-545x273.jpg" alt="Um fluxograma mostra como a busca do usuário por &quot;laranjas&quot; se move por um servidor de aplicação, um plano de controle, histórico de compras e consultas de políticas, e depois um índice de catálogo de produtos para devolver resultados sobre o produto laranja." /><h3>Por que consultar o Elasticsearch em cada busca?</h3><p>O histórico de compras é consultado no Elasticsearch a cada busca, em vez de ficar em cache na camada de aplicação. Esta é uma escolha de design deliberada. Como a consulta faz a correspondência da string de busca atual com os títulos dos produtos usando o pipeline de análise de texto do Elasticsearch, o sistema se beneficia da mesma stemização, da tokenização e do tratamento de idioma que melhoram a própria busca de produtos. Uma consulta em cache na memória exigiria reimplementar essa análise ou aceitar uma correspondência menos precisa.</p><p>Para ver por que essa ordenação importa, considere um comprador que já comprou suco de laranja e agora busca por "laranjas". A consulta do histórico de compras faz a correspondência de "suco de laranja" com o termo de busca "laranjas" por meio da análise de texto e calcula um impulso para esse produto. Mas a camada de governança já restringiu "laranjas" à categoria de hortifruti, excluindo por completo o suco de laranja. O impulso do histórico de compras para suco de laranja está presente na consulta, mas não tem efeito porque não há nenhum documento correspondente, no conjunto de resultados governado, sobre o qual ele possa atuar. O comprador vê laranjas frescas, ranqueadas por relevância e personalização. A proteção de governança continua valendo.</p><p>O custo de desempenho é mínimo: o índice do histórico de compras é pequeno (o histórico de compras de um usuário normalmente tem de dezenas a centenas de documentos, não milhões), e a consulta é executada em paralelo à busca pelo percolador, portanto não estende o caminho importante.</p><h3>Exemplo de consulta para “água mineral” sem histórico do usuário</h3><p>Se um usuário não logado ou um usuário que nunca comprou "água mineral" pesquisar, pode encontrar resultados semelhantes aos seguintes:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt90249896bcf2b8c2/6a17e954af47b685f5cddfcf/1d03558c8f6492a0999e1ac4f1d22680c8f3a6ce-1130x1028.png" alt="Uma página exibe os resultados da pesquisa por &quot;água mineral&quot;, mostrando uma barra de pesquisa, filtros por categoria e marca, e três listas de produtos com detalhes como marca, composição e preço." /><h3>Exemplo de histórico de compras do usuário</h3><p>Por outro lado, uma usuária chamada Carol tem um histórico de compras que contém os seguintes produtos:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3aa784ccb0653a0d/6a17e95563baffd6b7741c8d/31c1fb789efc6cef673984e9711d571efce8ed27-661x523.png" alt="Uma interface digital intitulada &quot;Perfil de Compras&quot; mostra uma compradora chamada Carol com dois grupos e uma lista de itens comprados recentemente, incluindo quantidades, datas da última compra e tempo decorrido desde cada compra." /><h3>Exemplo de busca por "água mineral" com o histórico de compras acima</h3><p>Se Carol buscar por “água mineral”, verá resultados personalizados que refletem o que ela comprou no passado. Olhando o histórico de compras acima, ela comprou "água mineral" (a garrafa verde) cerca de 40 vezes, e a compra mais recente foi há dois dias. Se ela buscar por "água mineral", esse produto é potencializado, pois sabemos que ela gosta disso. Note que, nos resultados não personalizados, a água mineral Rubicon foi o primeiro resultado.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf243c5ef1a1808ba/6a17e95763baff5d73741c91/6fce63ff051e345a79fef934cd6e71ba113ae585-1159x1062.png" alt="Uma página mostra resultados de busca por “água mineral”, listando detalhes dos produtos, preços e opções de filtro para bebidas e marcas." /><h2>Ativação de políticas sensível à coorte</h2><p>O histórico de compras individual funciona bem para clientes recorrentes com comportamento definido. Mas muitos compradores são novos, anônimos ou estão navegando fora dos padrões habituais. Para esses compradores, a participação no grupo oferece um tipo diferente de personalização, uma personalização baseada em quem o comprador é, não no que ele fez.</p><p>Um comprador vegano que procura por "chocolate" deve ver o chocolate vegano listado nas primeiras posições. Um comprador que segue as práticas halal e busca por "snacks" deve ver opções certificadas halal em destaque. Um consumidor preocupado com a saúde que busca por "iogurte" deve ver as opções probióticas em destaque.</p><h3>Agrupamentos como políticas, não como tags de produto</h3><p>Os produtos já possuem atributos normais, incluindo campos como <code>dietary_restrictions: ["vegan"]</code> ou <code>dietary_restrictions: ["halal"]</code>. A questão é onde reside a lógica que conecta o grupo de compradores a esses atributos do produto.</p><p>A abordagem mais ingênua seria codificar esse mapeamento na camada da aplicação ou no modelo de busca: se o usuário for vegano, adicione um impulso à <code>dietary_restrictions: "vegan"</code>. Mas este é o mesmo emaranhado de código na camada de aplicação descrito na <a href="https://www.elastic.co/search-labs/blog/ecommerce-search-governance-improve-retrieval">Parte 1</a>, e cria o mesmo atrito operacional: adicionar um novo grupo ou alterar o que um agrupamento significa exige uma alteração no código.</p><p>O plano de controle governado mantém a lógica de agrupamento no mecanismo de políticas. Uma política de agrupamento faz a ponte entre duas coisas: a associação de um comprador a agrupamento (por exemplo, "vegano") e um atributo de produto (por exemplo, <code>dietary_restrictions: “vegan”</code>). A política define a conexão: quando um comprador do grupo vegano pesquisa, priorize produtos onde <code>dietary_restrictions</code> incluir "vegano".</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte15937af719dff39/6a17e95925daab370608a274/2b6fe359774bbea059aaf93f3fa4a03eb31233ea-544x290.jpg" alt="" /><p>Como a lógica de coorte está no motor de políticas e não no código do aplicativo, isso significa:</p><ul><li><p>Adicionar um novo grupo é algo que pode ser feito criando uma nova política; não é necessário reindexar produtos.</p></li><li><p>As políticas de agrupamento usam o mecanismo de regras completo: elas podem adicionar filtros, aplicar reforços flexíveis, expandir sinônimos, alterar a estratégia de recuperação ou qualquer outra ação que uma política possa realizar.</p></li><li><p>O comportamento da agrupamento é gerenciado por meio da mesma admin UI de todas as outras políticas: um comerciante pode criar, testar e promover políticas de agrupamento por meio do fluxo de trabalho Autor → Testar → Promover descrito na <a href="https://www.elastic.co/search-labs/blog/ecommerce-search-governance-zero-deploy">Parte 2</a>.</p></li></ul><h3>Exemplo de política de coorte vegana</h3><p>Um merchandiser cria uma política de coorte com as seguintes características:</p><ul><li><p><strong>Agrupamentos:</strong> <code>["vegan"]</code>.</p></li><li><p><strong>Critérios de correspondência:</strong> corresponde a qualquer consulta (ou a uma categoria de produto específica).</p></li></ul><p><strong>Ação:</strong> Impulso suave no <code>dietary_restrictions: "vegan"</code> com um peso de impulso de 2.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt835034b54f6790b8/6a17e95b7b54f980408b391e/fc58bbd97c0dd1fa3ce757394ca117d0789c52f6-1080x1018.png" alt="Uma interface web intitulada &quot;Editar política de reescrita&quot; mostra campos para ID de política, título, descrição, seleção de agrupamento, opções de consulta de regras, tipo de regra, configurações de filtro e mais, com foco na agrupamento contendo &quot;vegano&quot; e outro no valor &quot;vegano&quot;." /><h3>Como funciona a ativação por coorte</h3><p>Cada documento de política tem um campo <code>cohorts</code>. Políticas universais que se aplicam a todos os compradores, independentemente do grupo, podem deixar este campo em branco, e estes serão internamente atribuídos um valor de <code>"_all"</code> pelo plano de controle. Políticas específicas de agrupamento armazenam os nomes de agrupamento-alvo, como <code>["vegan", "kosher", “sweet_tooth”]</code>.</p><p>Quando uma solicitação de busca inclui um perfil de usuário, o plano de controle cria um filtro simples de <code>terms</code> para a consulta do percolador:</p>{ "terms": { "cohorts": ["_all", "vegan", "health_conscious"] } }<p>Esse filtro único inclui todas as políticas universais mais as políticas específicas de agrupamento do usuário. O sentinela <code>_all</code> limpa esse filtro de inclusão: não são necessárias consultas <code>must_not</code> ou <code>exists</code> para lidar com o caso em que uma política não possui restrição de agrupamento.</p><p>O percolador então avalia as correspondências de política normalmente. A única diferença é que o conjunto de políticas do candidato foi restringido àquelas relevantes para os grupos desse cliente. Tudo o que vem depois (transformações em cascata, resolução de conflitos por campo, rastreamento de frases consumidas) funciona de forma idêntica ao fluxo não personalizado descrito nas Partes 3 e 4.</p><h3>Resultados de usuários não veganos (padrão) ao buscar por "chocolate"</h3><p>Quando um usuário não vegano pesquisa por chocolate, não há um aumento de agrupamento vegano aplicado aos seus resultados. Eles viam chocolates não veganos entre os principais resultados, conforme segue:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc5244b19c2162f5b/6a17e95d3e03d727f74f2cb6/5bade79944ef294e2cb835cfd6e3231392e8fbd0-1159x1104.png" alt="Uma página mostra os resultados de busca por “chocolate”, com filtros de categoria e marca à esquerda e três listas de produtos de chocolate com descrições, preços e especificações." /><h3>Resultados da política de agrupamento vegana ao buscar por "chocolate"</h3><p>Quando um comprador vegano busca por "chocolate", essa política está incluída no conjunto de candidatos a percolador. Há correspondência e o plano de controle aplica um leve impulso aos chocolates certificados veganos. O aumento é multiplicativo: chocolates veganos têm uma classificação mais alta, mas chocolates não veganos não são totalmente excluídos porque o filtro acima é definido como <em>leve impulso</em>, que descrevemos em detalhes na Parte 3 desta série.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf73ce626bcd3d66d/6a17e95f2f4a5c5341fa8934/fc6f7ec6a9de30f3a6d8f32bb9ee7ec457dea458-1138x1255.png" alt="Uma página da web mostra os resultados de busca por “chocolate”, com filtros de categoria e marca à esquerda e três listas de produtos de chocolate com descrições, preços e especificações, com foco nos rótulos veganos circulados." /><p>No entanto, se o comprador buscar explicitamente por "chocolate ao leite Hershey", o impulso para produtos veganos ainda se aplica, mas pode ser superado pela relevância textual mais forte dos produtos de chocolate ao leite Hershey.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0e7487727387e524/6a17e9617b54f965ab8b3922/f47bb8bfa58106f897c4c6c143494f4367355528-1136x1142.png" alt="Uma página mostra resultados de busca por &quot;chocolate ao leite Hershey&quot;, com filtros de categoria e marca à esquerda e três listagens de produtos de chocolate Hershey's, com descrições detalhadas, preços e informações nutricionais." /><p>Um consumidor que não faz parte do grupo vegano e busca pela mesma consulta nunca vê a política de "grupo vegano"; ela não está no conjunto de resultados possíveis. A camada de governança é idêntica; somente o conjunto de políticas ativo é diferente.</p><h3>Agrupamentos com histórico de compras</h3><p>Um consumidor vegano com um extenso histórico de compras recebe ativação de políticas específicas para o grupo de clientes veganos, além de impulso no histórico de compras. Para compradores novos ou anônimos, a simples associação implícita a um grupo proporciona uma personalização significativa sem exigir quaisquer dados comportamentais (por exemplo, talvez um usuário anônimo tenha pesquisado apenas produtos veganos e, portanto, o classificamos como membro do grupo vegano). Um comprador que se identifica como halal durante a criação da conta recebe imediatamente resultados personalizados halal na primeira busca.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt89044f002807c2e4/6a17e962af47b64034cddfd3/81af35a533a567d99324860c8e69cf9752533c8f-545x301.jpg" alt="Um diagrama de fluxo mostra como a busca por &quot;laranjas&quot; se move por um servidor de aplicação, um plano de controle, histórico e consultas de políticas, e depois um índice de produtos para devolver o produto laranja." /><h2>Como as camadas de personalização são compostas</h2><p>A ordem de nidificação das <code>function_score</code> camadas importa. Do mais interno ao mais externo:</p><ol><li><p><strong>Consulta básica:</strong> a palavra-chave ou a correspondência semântica com consultas nomeadas (<code>fulltext_match</code>, <code>title_phrase_match</code>).</p></li><li><p><strong>Camada de política de governança:</strong> Filtros rígidos como cláusulas <code>bool.filter</code>, reforços suaves como funções <code>function_score</code> (Partes 3 e 4).</p></li><li><p><strong>Impulsionamentos de sinal de negócio:</strong> aumento de margem e popularidade (que exploraremos na Parte 7).</p></li><li><p><strong>O histórico de compras aumenta:</strong> a camada mais externa <code>function_score</code>.</p></li></ol><p>Essa ordenação garante que a governança controle o conjunto de resultados (o que aparece), os sinais de negócios ajustam a classificação dentro desse conjunto (o que aparece primeiro da perspectiva do varejista) e o histórico de compras ajusta ainda mais a classificação com base no comportamento individual (o que aparece primeiro da perspectiva do comprador). Cada camada envolve a camada anterior multiplicativamente, de modo que os efeitos se acumulam em vez de entrarem em conflito.</p><h2>O que isso significa operacionalmente</h2><p>A personalização por meio do plano de controle governado preserva todas as propriedades operacionais descritas nas Partes 1 e 2:</p><ul><li><p><strong>Mudanças de implantação zero.</strong> As políticas de agrupamento são criadas, testadas e promovidas através da UI. Adicionar um novo agrupamento alimentar ou ajustar um impulso de peso não requer alterações no código nem envolvimento de engenharia.</p></li><li><p><strong>Auditabilidade.</strong> Cada política de agrupamento é um documento discreto e com uma versão. Quando um comerciante pergunta: "Por que os produtos veganos estão classificados mais alto para esse usuário?", a resposta é uma política específica com prioridade específica, visível no painel de fazer debug junto com todas as outras políticas que foram acionadas por aquela consulta.</p></li><li><p><strong>Resolução de conflitos.</strong> As políticas de agrupamento participam da mesma resolução de conflitos por campo descrita na Parte 3. Se o impulso de categoria de uma política de agrupamento entrar em conflito com a substituição de categoria de uma política de campanha, o conflito será resolvido deterministicamente pela mesma estrutura de prioridade e estratégia, sem necessidade de tratamento especial.</p></li><li><p><strong>Mensurabilidade.</strong> Como as políticas de coorte são discretas e podem ser alternadas individualmente, seu impacto nas taxas de conversão, cliques e adição ao carrinho pode ser medido de forma independente, assim como qualquer outra política do sistema.</p></li></ul><h2>O que vem a seguir nesta série</h2><p>O próximo post explora outra dimensão do plano de controle governado: como o aumento de margem e popularidade pode ser ajustado por consulta por meio de políticas, transformando a otimização econômica em uma decisão de governança, em vez de uma configuração estática.</p><p>Veja a Parte 7: otimização econômica governada por consulta: impulso de margem e popularidade por consulta</p><h2>Coloque em prática o buscar governado de comércio eletrônico</h2><p>Os padrões de personalização descritos neste post (impulsionamento do histórico de compras individual e ativação de políticas com reconhecimento de agrupamento) foram projetados e desenvolvidos pela Elastic Services Engineering como parte de nosso acelerador de busca de e-commerce reutilizável. Ambos os mecanismos se integram à arquitetura do plano de controle governado descrita ao longo desta série. Entre em contato com o <a href="https://www.elastic.co/consulting">Elastic Professional Services</a>.</p><h2>Participe da discussão</h2><p>Tem dúvidas sobre governança de buscar, estratégias de recuperação ou arquitetura de buscar para e-commerce? Participe da <a href="https://discuss.elastic.co/">conversa mais ampla da comunidade Elastic</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-personalized-search-governed-ecommerce</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-personalized-search-governed-ecommerce</guid>
    <category><![CDATA[Operações]]></category>
    <dc:creator><![CDATA[Alexander Marquardt,Honza Král,Taylor Roy]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte3979255ddfc7f45/6a17e25ffaa913812f93c7cb/92c517a2e7b36122a18feee317a0215981b62b6b-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Percolador do Elasticsearch para governança de busca em comércio eletrônico: traduzindo consultas ambíguas em estratégias de recuperação controladas]]></title>
    <description><![CDATA[Aprenda como usar o percolador do Elasticsearch para implementar a governança de busca. Neste blog, delineamos os padrões necessários para criar um motor de políticas governado em produção e criar uma estratégia de recuperação controlada.]]></description>
    <content:encoded><![CDATA[<p>Este artigo é uma análise técnica aprofundada da implementação do Elasticsearch da arquitetura do plano de controle descrita na <a href="http://elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture">Parte 3</a>, mostrando como construí-la usando o percolador do Elasticsearch. Ele descreve os padrões usados para implementar um motor de políticas determinístico e governado na produção.</p><h2><strong>Da arquitetura à implementação</strong></h2><p>A <a href="http://elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture">parte 3</a> descreveu a arquitetura do plano de controle: correspondência reversa como uma primitiva de pesquisa, documentos de política que separam a correspondência da ação e transformações em cascata que compõem várias políticas em um único plano de execução. Este artigo explora na prática o recurso do Elasticsearch que viabiliza a busca de políticas: a <a href="https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-percolate-query">consulta percolator</a>.</p><p>O percolador é uma solução natural para governança porque inverte a direção da busca exatamente da forma que um plano de controle precisa. Este post percorre a implementação passo a passo, começando com uma explicação clara do que o percolador faz e por que isso importa, e depois passando pelo design do índice, armazenamento de políticas, avaliação em tempo de consulta e composição de múltiplas políticas.</p><h2><strong>Como funciona a busca normal</strong></h2><p>Em um sistema de comércio eletrônico, você pode ter centenas de milhares ou milhões de documentos de produto contendo campos como <code>title</code>, <code>category</code> e <code>price</code>. Quando um usuário busca documentos correspondentes, você está pedindo ao Elasticsearch para comparar a string de busca do usuário com um ou mais campos armazenados nesses documentos de produto. O analisador padrão do Elasticsearch, <a href="https://www.elastic.co/docs/reference/text-analysis/analysis-standard-analyzer">o analisador padrão</a>, converte texto em minúsculas e o divide em tokens. Uma busca por "laranjas" corresponde a "Laranjas" por causa da conversão para minúsculas. Com um analisador sensível à linguagem que inclui a redução ao radical, ele também corresponde a "laranja" porque ambas as formas se reduzem ao mesmo radical. Por exemplo, a seguinte <a href="https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-match-query">consulta de correspondência</a> retorna documentos que têm "laranja" ou "laranjas" em seu campo <code>“title”</code>.</p>POST products/_search
{
  "query": {
    "match": {
      "title": "oranges"
    }
  }
}<p>Então, para a consulta acima, o Elasticsearch retorna os documentos do produto cujo campo <code>title</code> corresponde a "laranjas", que podem incluir resultados como "Pasta de Fruta de Laranja", "Suco de Laranja", "Laranjas Suculentas", "Marmelada de Laranja" e assim por diante. O ponto principal a ser lembrado é que o Elasticsearch é comumente usado para comparar uma string de busca com documentos e retornar os documentos que correspondem à string de busca.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt806e1c8c115bc9b6/6a170dba67045b634645c266/ba758f25616f2106d245ce0d47926c174766e028-642x318.png" alt="Um diagrama que compara uma string de busca recebida com títulos de produtos armazenados, mostrando correspondências para três títulos que contêm &quot;laranja&quot; e nenhuma correspondência para dois títulos que não contêm." /><h2><strong>O problema da governança: encontrar políticas relevantes antes de buscar produtos</strong></h2><p>Conforme estabelecido nas <a href="https://www.elastic.co/search-labs/blog/series/governed-search-patterns">Partes 1 a 3</a>, um sistema de busca governado não envia a string de busca do usuário diretamente para o catálogo de produtos. Primeiro, verifica se alguma política se aplica àquela string de busca.</p><p>Um comerciante decidiu que, quando alguém busca exatamente por "laranjas", os resultados devem ser restritos à categoria Laranjas, eliminando suco de laranja, geleia de laranja e refrigerante de laranja. Essa decisão de negócios é armazenada como uma política. Quando um usuário digita "laranjas", o plano de controle precisa encontrar essa política, ler as instruções e modificar adequadamente a busca no catálogo de produtos. Para isso, o plano de controle precisa descobrir quais políticas armazenadas são relevantes para essa string de busca.</p><p>Uma implantação corporativa pode ter centenas ou milhares dessas políticas. Verificá-las uma por uma com a lógica if/else é o antipadrão da camada de aplicação descrito na <a href="http://elastic.co/search-labs/blog/ecommerce-search-governance-zero-deploy">Parte 2</a>. O que precisamos é de uma maneira de armazenar todas essas políticas em um índice e encontrar instantaneamente aquelas que correspondem a uma determinada string de busca. É aqui que entra o percolador.</p><h2><strong>Invertendo a direção: O percolador</strong></h2><p>Anteriormente mencionamos que, em uma busca normal, o Elasticsearch é comumente usado para comparar uma string de busca com documentos e retornar os documentos que contêm essa string de busca.</p><p>O percolador inverte isso. Com um percolador, você tem um índice em que cada documento armazena um padrão de consulta e, em seguida, uma string de busca recebida é verificada em relação a essas consultas armazenadas para determinar quais desses padrões de consulta armazenados foram acionados.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1e7e2966bf46474d/6a170dbba929cf500aae0a57/1e6348531d1c0be57b385f51d248488cf58489ff-642x279.png" alt="Um diagrama mostrando vários padrões de consulta armazenados testados independentemente em relação a uma string de busca recebida, com &quot;laranjas&quot; produzindo uma correspondência e todos os outros padrões não retornando nenhuma correspondência." /><p>Para governança, os "padrões de consulta armazenados" são políticas. Cada política contém um padrão que descreve o tipo de string de busca que ela deve corresponder. Por exemplo, a string de busca corresponde exatamente a "laranjas" ou também contém "azeite de oliva"? A string recebida é o texto de busca do usuário, que chega no momento da consulta e precisa ser verificada contra todos os padrões de políticas armazenados. Isso é abordado em um <a href="https://youtu.be/Ap5K2Y00Xjc?t=246">vídeo relacionado ao PRISM em 4:09</a>.</p><h2>Passo a passo: como uma busca por "laranjas" encontra sua política</h2><h3>A política</h3><p>Um comerciante criou uma política que corresponde ao caso de um usuário buscar exatamente por "laranjas" sem outras palavras. Uma vez que o percolador encontra correspondência, o restante do documento inclui as regras que o plano de controle usará para construir a consulta do Produto; neste exemplo, uma das regras é restringir (filtrar) os resultados à categoria Frutas.</p>{
  "percolator": {
    "match_phrase": { "query": "START oranges END" }
  },
  "rule_type": "filter",
  "rule_args": {
    "filters": [
      {
        "field": "categories",
        "values": ["Fruits"],
        "mode": "hard_filter",
        "on_conflict": "soft_boost",
        "on_conflict_boost_weight": 1.0
      }
    ]
  },
  "priority": 0,
  "enabled": true
}<p>O campo <code>percolator</code> contém o padrão que define quando essa política deve ser acionada. Nesse caso, ele corresponde à frase <code>"START oranges END"</code>. Os campos <code>rule_type</code> e <code>rule_args</code> definem o que a política deve fazer quando for acionada. Os tokens <code>START</code> e <code>END</code> são marcadores de limite, que explicaremos em breve.</p><p>Você pode ver como uma política é criada na interface do usuário do PRISM Studio às <a href="https://youtu.be/Ap5K2Y00Xjc?t=172">2:52 do vídeo relacionado do PRISM</a>.</p><h3>O usuário realiza a busca.</h3><p>Um comprador digita "laranjas" na barra de busca.</p><h3>O plano de controle verifica se há políticas correspondentes.</h3><p>Antes de buscar o catálogo de produtos, o plano de controle intercepta a string de busca do usuário, envolve-a em marcadores de limite e a envia para o percolador:</p>POST policies/_search
{
  "query": {
    "percolate": {
      "field": "percolator",
      "document": {
        "query": "START oranges END"
      }
    }
  }
}<p>A string <code>"START oranges END"</code> é verificada contra todos os padrões de políticas armazenados. Internamente, o Elasticsearch executa os padrões de políticas armazenados contra essa string e retorna as que coincidem. Esse é o percolador. A string de busca do usuário foi verificada em relação a todos os padrões de políticas armazenados, e os que coincidiam eram retornados. Não há cadeias if/else. Sem avaliação sequencial. O índice cuida da correspondência.</p><h3>O plano de controle aplica a política</h3><p>O plano de controle lê as ações das políticas correspondentes. A política acima instrui o plano de controle a restringir os resultados à categoria Frutas. O plano de controle constrói a consulta final do Elasticsearch com base no catálogo de produtos da seguinte forma:</p>POST products/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "oranges" } }
      ],
      "filter": [
        { "terms": { "categories": ["Fruits"] } }
      ]
    }
  }
}<p>O usuário buscou por "laranjas". O catálogo de produtos recebe uma consulta para "laranjas" restrita à categoria Frutas. Por causa dessa limitação, suco de laranja, geleia de laranja e refrigerante de laranja são excluídos.</p><h3>Por que "marmelada de laranja" NÃO aciona a política das laranjas</h3><p>Suponha que outro usuário busque por "geleia de laranja". O plano de controle encapsula a string e a percola: <code>"START orange marmalade END"</code>. O padrão da política de laranjas é <code>match_phrase: "START oranges END"</code>. A política de laranjas não corresponde; portanto, ela não é aplicada, e os resultados não ficam restritos à categoria Frutas.</p><p>Este é o propósito dos marcadores de limite <code>START</code> e <code>END</code>. Sem elas, uma política que corresponde à palavra "laranjas" poderia acidentalmente ser acionada em uma consulta como "orange marmalade". Ao envolver a string de busca do usuário com <code>START</code> e <code>END</code> e incluir esses marcadores no padrão da política, garantimos que a política só seja acionada quando "oranges" for a string completa de busca, sem outras palavras. Isso corresponde tanto à intenção dos compradores quanto à do comerciante.</p><h2>Uma segunda política: "azeite de oliva" no campo com redução ao radical</h2><p>Nem toda política precisa de uma correspondência exata de string. A política do "azeite de oliva" corresponde a um campo com redução ao radical, então ela dispara independentemente de pequenas variações na forma das palavras:</p>{
  "percolator": {
    "bool": {
      "should": [
        { "match_phrase": { "query.stemmed": "START olive oil END" } }
      ]
    }
  },
  "rule_type": "filter",
  "rule_args": {
    "filters": [
      {
        "field": "categories",
        "values": ["Olive oils"],
        "mode": "hard_filter",
        "on_conflict": "soft_boost",
        "on_conflict_boost_weight": 1.0
      }
    ]
  },
  "priority": 300,
  "enabled": true
}<p>O padrão dessa política corresponde a <code>query.stemmed</code> em vez de <code>query</code>. Quando a string de busca do usuário chega, ela é armazenada em um campo <code>query</code> (o texto exato) e em um campo <code>query.stemmed</code> (analisado com um analisador de redução ao radical que reduz as palavras aos seus radicais, de modo que "olivas" e "oliva" são reduzidos ao mesmo radical, assim como "azeites" e "azeite"). O padrão da política é verificado em relação à versão com redução ao radical da string, portanto, ela é acionada independentemente de pequenas variações na forma da palavra.</p><p>Os marcadores de limite <code>START</code> e <code>END</code> também funcionam no campo com redução ao radical, garantindo que essa política só seja acionada quando "azeite de oliva" for toda a string de busca, e não quando aparecer como parte de algo mais longo.</p><p>O restante deste artigo aborda os detalhes de implementação que tornam isso pronto para uso em produção: o mapeamento de índice que suporta ambos os modos de correspondência, como os destaques direcionam a remoção de frases e o rastreamento de frases consumidas, e como várias políticas conflitantes se combinam em um único plano de execução.</p><h2><strong>O mapeamento do índice de políticas</strong></h2><p>O índice de política precisa de um campo percolador para manter padrões de consulta armazenados e um campo de texto que espelhe a estrutura da string de busca recebida com a qual o percolador fará a correspondência. O mapeamento abaixo é simplificado para maior clareza. Uma implantação de produção é mais complexa, usando analisadores personalizados para lidar com marcadores de limite, correspondência de padrões variáveis (por exemplo, reconhecer que "menos de US$ 4" contém um valor de moeda) e outros tipos de análise.</p>PUT policies
{
  "mappings": {
    "properties": {
      "percolator": {
        "type": "percolator"
      },
      "query": {
        "type": "text",
        "fields": {
          "stemmed": {
            "type": "text",
            "analyzer": "stemming"
          }
        }
      },
      "rule_type": { "type": "keyword" },
      "rule_args": { "type": "object", "enabled": false },
      "priority": { "type": "integer" },
      "enabled": { "type": "boolean" }
    }
  }
}<p>O índice é denominado <code>policies</code> porque cada documento representa uma política governada completa, conforme definida na <a href="http://elastic.co/search-labs/blog/ecommerce-search-governance-zero-deploy">Parte 2</a>. Isso inclui critérios de correspondência, ação, prioridade e metadados. Os campos <code>rule_type</code> e <code>rule_args</code> contêm o componente de ação da política, que contém as instruções que o plano de controle usará para compor a consulta para execução no catálogo de produtos.</p><p>O campo <code>query</code> é a string contra a qual o percolador faz a correspondência. Possui duas variantes: uma versão exata e uma versão com redução ao radical. Quando a string de busca do usuário chega, ela é inserida neste campo no índice temporário em memória. Políticas que correspondem a <code>query</code> veem a string exata; políticas que correspondem a <code>query.stemmed</code> veem a versão com redução ao radical.</p><h2><strong>Percolação com destaques, filtragem e ordenação</strong></h2><p>Os exemplos simples acima mostraram pedidos mínimos de percolação. Na prática, o plano de controle adiciona destaque, filtra políticas desativadas e ordena por prioridade:</p>POST policies/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "percolate": {
            "field": "percolator",
            "document": {
              "query": "START olive oil END"
            }
          }
        },
        {
          "term": { "enabled": true }
        }
      ]
    }
  },
  "highlight": {
    "fields": {
      "query": {
        "matched_fields": ["query.stemmed"]
      }
    }
  },
  "sort": [
    { "priority": { "order": "desc" } }
  ]
}<p>A configuração de destaque usa <code>"query"</code> como chave de campo com <code>"query.stemmed"</code> em <code>matched_fields</code>. Isso diz ao <a href="https://www.elastic.co/docs/reference/elasticsearch/rest-apis/highlighting">destacador</a> unificado do Elasticsearch para retornar destaques no campo <code>query</code> principal, mas também para considerar correspondências do subcampo <code>query.stemmed</code> ao determinar quais tokens destacar. Isso é o que permite que uma política que corresponde ao campo com redução ao radical ainda produza destaques precisos no texto original, que o plano de controle precisa para remoção e rastreamento de frases consumidas.</p><p>O filtro <code>enabled: true</code> garante que as políticas desativadas sejam ignoradas. A prioridade <code>sort</code> garante que as políticas de maior prioridade sejam retornadas primeiro, para que o plano de controle possa processá-las na ordem correta para transformações em cascata. O campo <code>highlight</code> é a adição mais importante; ela nos diz exatamente quais palavras na string de busca do usuário acionaram cada partida.</p><p>A resposta para uma busca por "azeite de oliva" pode ser a seguinte:</p>{
  "hits": {
    "hits": [
      {
        "_id": "en_2c3021c8",
        "_source": {
          "rule_type": "filter",
          "rule_args": {
            "filters": [
              {
                "field": "categories",
                "values": ["Olive oils"],
                "mode": "hard_filter",
                "on_conflict": "soft_boost",
                "on_conflict_boost_weight": 1.0
              }
            ]
          },
          "priority": 300
        },
        "highlight": {
          "query": ["&lt;em&gt;START olive oil END&lt;/em&gt;"]
        }
      }
    ]
  }
}<h2><strong>Por que os destaques são importantes</strong></h2><p>Observe o destaque na resposta: <code>"&lt;em&gt;START olive oil END&lt;/em&gt;"</code>. O Elasticsearch nos diz exatamente quais palavras na string de busca do usuário fizeram a política corresponder. Isso não é cosmético. Os metadados de destaque determinam dois comportamentos críticos subsequentes:</p><p><strong>Remoção de frases.</strong> Algumas políticas precisam remover o texto correspondente da string de busca antes de construir a consulta do catálogo de produtos. Por exemplo, uma política que corresponda a "barato" remove essa palavra e a converte em um filtro de preço. O destaque identifica exatamente qual trecho da string de busca correspondeu à política, para que o sistema saiba o que remover.</p><p><strong>Rastreamento de frases consumidas.</strong> Conforme descrito na <a href="http://elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture">Parte 3</a>, quando várias políticas correspondem à mesma string de buscar, uma política de prioridade mais alta pode remover palavras que também foram correspondidas por uma política de prioridade mais baixa. Ao comparar o destaque de cada política com a string de busca atual (em evolução), o sistema pode detectar que uma frase foi consumida e ignorar a política de menor prioridade. Isso evita o processamento duplo e garante um comportamento determinístico.</p><p>Você pode saber mais sobre como os destaques funcionam <a href="https://www.elastic.co/docs/reference/elasticsearch/rest-apis/how-es-highlighters-work-internally">neste artigo</a>.</p><h2><strong>Da percolação ao plano de execução</strong></h2><p>O percolador retorna um conjunto de políticas correspondentes. Mas como a <a href="http://elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture">Parte 3</a> descreveu, a pesquisa é apenas metade da história. A outra metade é compor essas correspondências em um plano de execução coerente. Veja como fica para uma consulta concreta.</p><h3><strong>Exemplo resolvido: "Chocolate barato" durante uma campanha de Natal</strong></h3><p>Suponha que o sistema tenha duas políticas ativas: a política "Chocolate barato" (prioridade 210) e a política "Chocolates de Natal" (prioridade 300), ambas descritas em detalhes na <a href="http://elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture">Parte 3</a>.</p><p><strong>Etapa 1: Percolação.</strong> O usuário busca por "chocolate barato". O plano de controle encapsula a string de busca como <code>"START cheap chocolate END"</code> e a envia para o percolador. Duas políticas coincidem: o padrão da política "chocolate barato" corresponde à expressão "chocolate barato"; e o padrão da política de "chocolates de Natal" corresponde ao "chocolate" pelo campo com redução ao radical.</p><p><strong>Etapa 2: Ordenação por prioridade.</strong> O percolador retorna ambas as políticas, ordenadas por prioridade em ordem decrescente. A política de "chocolates de Natal" (300) é processada primeiro, seguida pela política de "Chocolate barato" (210).</p><p><strong>Etapa 3: Aplicação da transformação em cascata.</strong> Este é o modelo <code>initial state → [Policy A] → state' → [Policy B] → state'' → execution plan</code> da <a href="http://elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture">Parte 3</a>.</p><p>A política "chocolates de Natal" (prioridade 300) aplica-se primeiro:</p><ul><li><p>Adiciona um filtro rígido por categoria: "Comidas e bebidas de Natal", "Doces de Natal".</p></li><li><p>Adiciona um filtro de preço: menos de US$ 7.</p></li><li><p>Adiciona um impulso leve na categoria: "Calendários do Advento" (3x).</p></li></ul><p>A política "Chocolate barato" (prioridade 210) é a próxima a ser aplicada ao estado modificado:</p><ul><li><p>Tenta adicionar um filtro rígido de categoria: "Chocolates", "Chocolates ao leite"; mas a política de Natal já definiu esse campo com <code>on_conflict: override</code>, então as categorias de chocolate barato foram descartadas.</p></li><li><p>Tenta adicionar um filtro de preço: US$ 2, a política de Natal definiu <code>on_conflict: restrict</code> para o preço, e US$ 2 é mais restritivo do que US$ 7, então US$ 2 vence.</p></li><li><p>Remove "barato" da string de busca.</p></li></ul><p><strong>Etapa 4: Criação da consulta do Elasticsearch.</strong> O plano de controle monta o plano de execução em uma única consulta Elasticsearch contra o catálogo de produtos:</p>POST products/_search
{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": [
            { "match": { "title": "chocolate" } }
          ],
          "filter": [
            { "terms": { "categories": ["Christmas foods and drinks", "Christmas sweets"] } },
            { "range": { "price": { "lt": 2 } } }
          ]
        }
      },
      "functions": [
        {
          "weight": 1
        },
        {
          "filter": { "terms": { "categories": ["Advent calendars"] } },
          "weight": 3
        }
      ],
      "score_mode": "sum",
      "boost_mode": "multiply"
    }
  }
}<p>A string original de busca era "chocolate barato". A consulta que chega ao catálogo de produtos é um plano de recuperação governado e orientado pela intenção: a palavra "barato" foi consumida e convertida em uma restrição de preço, os resultados são restritos a categorias sazonais de Natal, os produtos de calendários do Advento recebem um impulso de classificação, e o limite de preço reflete o valor mais restritivo da política de menor prioridade. Toda transformação é determinística, rastreável e explicável.</p><p>Para uma visão geral rápida sobre como esses multiplicadores interagem com a pontuação básica do BM25, consulte <a href="https://youtu.be/Ap5K2Y00Xjc?t=525">8:45 no vídeo PRISM relacionado</a>, onde discutimos brevemente os aumentos multiplicativos.</p><h2><strong>Por que isso escala</strong></h2><p>O percolador é eficiente para este caso de uso devido à assimetria: um sistema de comércio eletrônico empresarial pode ter milhões de produtos, mas apenas centenas ou milhares de políticas de governança. O percolador está verificando uma string de busca recebida contra esse conjunto de padrões de política armazenadas, não escaneando o catálogo completo de produtos. O custo é proporcional ao número de políticas, e o Elasticsearch aplica otimizações internas (indexação de termos de padrões de consulta armazenados, curto-circuito lógico) para manter a correspondência rápida.</p><p>Adicionar uma nova política é apenas indexar um novo documento. Desativar um é apenas uma atualização de campo. Sem alterações de código, sem implantações, sem reinicializações.</p><h2><strong>Da pesquisa à recuperação governada</strong></h2><p>O percolador fornece a primitiva de correspondência reversa rápida que torna a arquitetura do plano de controle da <a href="http://elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture">Parte 3</a> viável em grande escala. Políticas são dados que são armazenados e indexados, e eficientemente comparados com as strings de busca recebidas. O plano de controle compõe políticas correspondentes em um plano de execução governado por meio da transformação em cascata e da resolução de conflitos por campo descritas na Parte 3. E o motor de recuperação executa o plano de execução governado contra o catálogo de produtos.</p><p>O resultado é um sistema onde um comerciante pode criar uma nova política sem tocar no código da aplicação, testá-la contra consultas representativas, promovê-la para produção e imediatamente ver o efeito. O percolador agiliza a pesquisa de políticas; o plano de controle torna a composição da política determinística; e o fluxo de trabalho governado torna todo o processo seguro.</p><h2><strong>O que vem a seguir nesta série</strong></h2><p>O próximo post desta série estende o plano de controle governado para novos territórios. Ele introduz uma <strong>arquitetura de busca em múltiplos níveis</strong>, explicando como orquestrar uma recuperação rigorosa, relaxada e semântica, mantendo a estabilidade da paginação e das facetas.</p><h2><strong>Coloque em prática o buscar governado de comércio eletrônico</strong></h2><p>O plano de controle baseado em percolador descrito neste post — desde mapeamentos de índice e marcadores de limite até o rastreamento de frases com base em destaques e a composição de políticas em cascata — foi desenvolvido pela Elastic Services Engineering como parte de nossos aceleradores de busca de comércio eletrônico reutilizáveis. Todos os exemplos de consultas e estruturas de políticas mostrados aqui são provenientes de um sistema em funcionamento validado com base em catálogos de produtos em escala empresarial.</p><p>Se você deseja implementar um plano de controle governado e orientado por políticas no Elasticsearch, o Elastic Services pode ajudá-lo a chegar lá mais rapidamente. Entre em contato com o <a href="https://www.elastic.co/consulting">Elastic Professional Services</a>.</p><h2>Participe da discussão</h2><p>Tem dúvidas sobre governança de buscar, estratégias de recuperação ou arquitetura de buscar para e-commerce? Participe da <a href="https://discuss.elastic.co/">conversa mais ampla da comunidade Elastic</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-percolator-search-governance</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-percolator-search-governance</guid>
    <category><![CDATA[Operações]]></category>
    <dc:creator><![CDATA[Alexander Marquardt,Honza Král,Taylor Roy]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt19fcc31ad093ad30/6a170dbd7d8d67301070e799/5e485cdd52d78419ff0ac30a4192b953f6d70c61-1280x720.png" length="0" type="image/png"/>
    <pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Construindo um plano de controle para gerenciar a busca de comércio eletrônico]]></title>
    <description><![CDATA[Como criar um plano de controle com governança para e-commerce que integra políticas de busca conflitantes em um único plano de execução (sem alterações de código).]]></description>
    <content:encoded><![CDATA[<p><a href="https://www.elastic.co/search-labs/blog/ecommerce-search-governance-improve-retrieval">A parte 1</a> e <a href="https://www.elastic.co/search-labs/blog/ecommerce-search-governance-zero-deploy">a parte 2</a> desta série estabeleceram por que a busca no comércio eletrônico precisa de uma <em>camada de governança</em>, uma camada de decisão entre a consulta do usuário e o mecanismo de recuperação que classifica a intenção, impõe restrições e direciona para a estratégia de recuperação correta (por exemplo, BM25, semântica, híbrida). Este post mostra como construir essa camada usando uma primitiva arquitetônica simples onde as políticas de interpretação de consultas são armazenadas como documentos e recuperadas no momento da consulta por meio de correspondência reversa rápida. Como as novas políticas de recuperação (por exemplo, "destacar a marca X" ou "mostrar apenas a categoria Y") não exigem alterações no código, o resultado é uma camada de roteamento que permanece estável enquanto as políticas evoluem e que mantém os mecanismos de recuperação seguros em ambientes de alto risco. Se você quiser ver o resultado final dessa arquitetura antes de continuar a leitura, confira este vídeo: <a href="https://www.youtube.com/watch?v=e1GuL9CYWAk">Corrigindo a relevância da busca em segundos: apresentando o PRISM</a>.</p><h2>Por que a interpretação de consultas é frequentemente um desafio</h2><p>O armazenamento de políticas como código (blocos if/else na camada de aplicação) produz dezenas de milhares de linhas de lógica frágil que não possui indexação para recuperação eficiente de políticas no momento da consulta. A iteração é lenta (uma única alteração de comportamento de consulta pode exigir um ciclo de implantação de seis semanas), a responsabilidade não é clara (por que os resultados foram alterados?) e os usuários corporativos não podem modificar o comportamento de busca sem o envolvimento da engenharia. Isso é mostrado no lado esquerdo da imagem a seguir:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb84f89f4d9029df7/6a170f806234e077cddb1ab6/4e2cd5244ef8b9a05af6337a4825252f321a9a43-1377x768.png" alt="Imagem com dois títulos, &quot;Políticas como código&quot; à esquerda e &quot;Políticas como dados&quot; à direita. O lado esquerdo mostra blocos de código condicional definindo regras de tratamento de consultas, com notas sobre implantação, ciclos de mudança e avaliação sequencial. O lado direito mostra objetos de política JSON com títulos, termos de correspondência, ações, filtros e prioridades, junto com notas sobre armazenamento em um índice do Elasticsearch, comportamento de atualização e correspondência indexada." /><p>O armazenamento de políticas como dados em um índice Elasticsearch é mostrado no lado direito da imagem acima. Essa abordagem resolve todos os problemas associados à lógica de resolução de consultas codificadas. No entanto, para que isso funcione, você precisa determinar rapidamente quais políticas correspondem à consulta do usuário e como os conflitos devem ser resolvidos. É aqui que entra o plano de controle governado.</p><h2>O padrão do plano de controle</h2><p>Um plano de controle governado fica entre a consulta bruta do usuário e uma recuperação do Elasticsearch. Ele recebe o texto do usuário como entrada, e sua saída é um plano de execução que inclui filtros, impulsionamentos e decisões de roteamento de recuperação.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0585c90830d63d02/6a170f82964cea7a5908bc8b/5562da5de521f3c83ed55a13e9be87ca7fa70109-546x489.png" alt="Diagrama que ilustra dois fluxos de busca através de um plano de controle governado: um em que uma consulta de texto por “laranjas” é reescrita com uma restrição de categoria antes da busca do produto, e outro em que uma consulta semântica por “presente para o avô” é reescrita e encaminhada para recuperar produtos correspondentes de um catálogo de produtos." /><p>Um pipeline de plano de controle consiste em:</p><ol><li><p><strong>Consulta do usuário: </strong>o usuário digita uma string do que está procurando, como "laranjas" ou "presente para o avô".</p></li><li><p><strong>Consulta de política: </strong>compare a consulta do usuário com o índice de políticas.</p></li><li><p><strong>Retorno das políticas correspondentes:</strong> as políticas que correspondem à consulta do usuário são retornadas do índice de políticas.</p></li><li><p><strong>Aplicação de políticas: </strong>o plano de controle analisa as políticas retornadas e compõe as políticas correspondentes em um único plano de execução coerente que inclui filtros, reforços, substituições e salvaguardas, e que aplica o método de recuperação apropriado (por exemplo, lexical, semântico ou híbrido).</p></li><li><p><strong>Execução:</strong> a consulta modificada <em>do Elasticsearch, consciente da intenção</em> é passada para a aplicação para ser executada em um índice de catálogo de produtos.</p></li><li><p><strong>Explicação (opcional):</strong> além de criar uma consulta que fornece resultados alinhados aos negócios e às intenções, o plano de controle fornece uma carga útil opcional de explicabilidade para mostrar quais políticas foram acionadas e como elas foram combinadas.</p></li></ol><p>Encontrar quais políticas devem ser aplicadas ao termo de busca de um usuário requer uma primitiva de correspondência reversa rápida, que resolvemos com a <a href="https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-percolate-query">consulta de percolador</a>. Após recuperar as políticas relevantes, combinar várias políticas correspondentes em um plano de execução unificado requer uma estrutura de julgamento: prioridades, estratégias de conflito, rastreamento de frases consumidas e transformações em cascata que aplicam políticas em sequência, em vez de independentemente. Além disso, a tecnologia de recuperação mais apropriada precisa ser selecionada (por exemplo, <a href="https://www.elastic.co/elasticon/conf/2016/sf/improved-text-scoring-with-bm25">BM25</a> para "laranjas" versus <a href="https://www.elastic.co/docs/solutions/search/semantic-search">busca semântica</a> para "presente para o avô").</p><h2>Consulta de política: checar a consulta antes de buscar produtos</h2><p>Quando um comprador digita uma consulta, um sistema de busca com plano de controle regulado não envia essa consulta diretamente para ser executada no catálogo de produtos. Primeiro, a consulta é verificada em relação a um conjunto de políticas armazenadas e modificada para refletir a intenção da consulta e as prioridades de negócio.</p><h3>Estrutura da política</h3><p>Cada política é um documento simples que define duas coisas:</p><ul><li><p><strong>Critérios de correspondência:</strong> qual texto de consulta deve acionar esta política. Isso poderia ser uma frase exata, uma única palavra, um padrão ou uma combinação.</p></li><li><p><strong>Ação:</strong> o que você deve fazer quando a política for acionada. Isso pode ser a aplicação de um filtro de categoria, excluindo produtos, extraindo uma restrição de preço ou mudando a estratégia de recuperação.</p></li></ul><p>O sistema encontra todas as políticas correspondentes, as compõe em um plano de execução e só então executa a busca pelo produto. Juntas, as políticas agem como um atendente de loja experiente que entende o que você procura e leva você até o corredor certo.</p><h3>O padrão de política</h3><p>Os primeiros artigos desta série apresentaram exemplos de políticas em ação: restringir "laranjas" à categoria de produtos agrícolas, tratar "sem amendoim" como uma exclusão e direcionar "presente para o avô" para a recuperação semântica. O ponto arquitetônico fundamental é que, em cada caso, a consulta é verificada em relação às políticas armazenadas antes do início da busca pelo produto. As políticas determinam quais restrições aplicar, qual texto modificar e qual estratégia de recuperação utilizar. A consulta ao catálogo de produtos ocorre após a aplicação das políticas e a criação de uma nova consulta reescrita.</p><h3>Por que isso é rápido</h3><p>Um sistema de e-commerce corporativo pode ter milhões de produtos, mas apenas centenas ou milhares de políticas. A etapa de pesquisa de políticas consiste em buscar em um pequeno índice curado, não no catálogo completo de produtos, e por isso é rápida. E como as políticas são armazenadas como dados em seu próprio índice, um responsável por merchandising que adiciona uma nova política não toca no código da aplicação, e um engenheiro que otimiza a busca do produto não toca no índice da política. As duas preocupações evoluem independentemente.</p><p>Os exemplos acima descrevem o que acontece conceitualmente. Nos bastidores, a pesquisa de políticas é implementada usando o tipo <a href="https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-percolate-query">consulta de percolador</a> do Elasticsearch, criado especificamente para esse tipo de padrão: comparar o texto recebido com um conjunto de consultas armazenadas. <a href="https://www.elastic.co/search-labs/blog/elasticsearch-percolator-search-governance">A Parte 4</a> desta série oferece uma análise prática e aprofundada da implementação do percolador, incluindo mapeamentos de índice, marcadores de limite e rastreamento de frases orientado por destaque. Com o mecanismo de pesquisa abordado em profundidade na Parte 4, vamos ver o que um documento de política realmente contém e como o plano de controle compõe várias políticas em um único plano de execução.</p><h2>Exemplo de políticas</h2><p>Agora que vimos o que as políticas fazem conceitualmente, vamos analisar o que elas realmente contêm. As duas políticas abaixo foram projetadas para conflitar intencionalmente, o que demonstrará o sistema de resolução de conflitos descrito nas seções seguintes.</p><h3>Chocolate barato</h3><p>A política mostrada abaixo detecta se um usuário enviou uma busca contendo a expressão "chocolate barato". Nesse caso, os resultados são restritos às categorias “Chocolates” e “Chocolates ao leite”. Esta política também aplica um filtro de preço de $ 2. Além disso, observe que essa política tem uma prioridade de 210; voltaremos a isso quando discutirmos a resolução de conflitos com mais detalhes.</p><p>As configurações do modo de filtro e da estratégia de conflito mostradas aqui (hard_filter, soft_boost, restrict, override) são explicadas em detalhes na seção de resolução de conflitos abaixo.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltada4d46e2ab26208/6a170f836f7f04f91f914924/bbcd66b20fc3aa861b5880ca67daf8e809698717-1002x890.png" alt="Interface que exibe uma configuração de regras com uma frase correspondente para &quot;chocolate barato&quot;, filtros de categoria e preço, um campo para remoção de frases e configurações de prioridade." /><p>Quando a política acima é ativada, a busca por “chocolate barato” respeita o filtro de preço de $2 e restringe os resultados às categorias “Chocolates” e “Chocolates ao leite”. Exemplos de resultados são mostrados abaixo:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt368bdfbb9a6e5a5e/6a170f8566c4f975a1f8c10f/3f373af9a985864315d7639440a416e45a882a1b-1133x1146.png" alt="Interface que exibe uma configuração de regras com uma frase correspondente para &quot;chocolate barato&quot;, filtros de categoria e preço, um campo para remoção de frases e configurações de prioridade." /><h3>Chocolate de Natal</h3><p>A política mostrada abaixo é um exemplo de uma política poderia ser aplicada no Natal. Este exemplo restringe os resultados a “comidas e bebidas de Natal” e “Doces de Natal”, impulsiona quaisquer produtos que também estejam na categoria “Calendários do Advento” e aplica um filtro de preço de menos de $ 7 para focar em itens sazonais acessíveis. Além disso, observe que esta política tem uma prioridade de 300. Voltaremos a isso quando discutirmos a resolução de conflitos em mais detalhes.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta3428d211f2d8304/6a170f86839dfa0049dcffb3/8f1179342d0e05cf78266d142b046021a3694368-1007x941.png" alt="Captura de tela da interface de consulta de regras do Elasticsearch mostrando uma consulta match_phrase para &quot;chocolate&quot;, filtros baseados em categorias e preço, opções de tratamento de conflitos e configurações de prioridade das regras." /><p>Quando a política acima é ativada sem políticas conflitantes, uma busca por "chocolate" respeita o filtro de preço de $ 7 e restringe os resultados às categorias "Comidas e bebidas de Natal" e "Doces de Natal" e aumenta todos os produtos marcados como "Calendários do Advento". Exemplos de resultados são mostrados abaixo:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0e7f1fe91b2cadcd/6a170f8866c4f90b0af8c113/662b0e40cb3a9291c17816c33169e9ff5b68f98d-1129x1085.png" alt="Página de resultados de busca exibindo uma consulta por &quot;chocolate&quot;, com filtros de categoria e marca à esquerda e uma lista de produtos de calendários do advento de chocolate com imagens, preços, categorias e descrições à direita." /><h2>Combinando políticas correspondentes</h2><p>A consulta de políticas descrita acima é apenas metade da história. A outra metade é o que acontece quando várias políticas correspondem à mesma consulta.</p><p>Em qualquer implantação não trivial, uma única consulta rotineiramente acionará várias políticas ao mesmo tempo. "Chocolate barato" vai combinar com as duas políticas que demonstramos acima. Cada política está correta isoladamente. O desafio é compô-los em um único plano de execução coerente, sem contradições, sem contagem dupla e sem que uma política desfaça silenciosamente o trabalho de outra.</p><p>Isso não é um problema de busca; é um problema de julgamento. O sistema deve decidir:</p><ul><li><p><strong>Ordem de aplicação:</strong> se uma política de negação remover "sem amendoim" da consulta, a política de preço ainda verá o texto original ou o texto modificado?</p></li><li><p><strong>Conflitos de filtros:</strong> se duas políticas estabelecem tetos de preços diferentes, qual delas vence? O perdedor é descartado silenciosamente ou se degrada de forma suave para um aumento leve?</p></li><li><p><strong>Propriedade da frase:</strong> Se duas apólices corresponderem à mesma palavra e a primeira já a tiver consumido, a segunda ainda deverá ser acionada?</p></li></ul><p>Uma implementação ingênua (aplicar todas as políticas correspondentes de forma independente e mesclar os resultados) falha assim que as políticas interagem. A arquitetura precisa de um modelo explícito de como as políticas se compõem. As próximas duas seções descrevem esse modelo: um framework de prioridade e resolução de conflitos e um modelo de transformação em cascata que torna a interação entre políticas determinística.</p><p>O principal insight é que a aplicação de políticas não é um conjunto de operações independentes; é uma transformação em cascata. Cada política recebe o estado de reescrita produzido por todas as políticas de maior prioridade e o transforma ainda mais:</p><p>estado inicial → [Política A] → estado' → [Política B] → estado'' → ... → plano de execução</p><p>O estado contém o texto da consulta reescrito, filtros acumulados, intenção atual e quaisquer expansões de sinônimos. Uma política de alta prioridade pode remover texto da consulta, e toda política subsequente vê a consulta modificada, não a original. O contexto se acumula. A ordem importa.</p><h2>Precedência e resolução de conflitos: O determinismo importa</h2><p>As estratégias específicas de conflito são uma escolha de design. Diferentes organizações podem resolver conflitos de forma diferente, dependendo das necessidades de seus negócios. A abordagem a seguir ilustra o tipo de estrutura de julgamento que um plano de controle precisa. O importante não são essas estratégias específicas, mas que o sistema tenha estratégias explícitas e determinísticas, em vez de permitir que os conflitos sejam resolvidos por meio de interações imprevisíveis.</p><h3>Pedido prioritário</h3><p>As políticas são ordenadas por prioridade (maior primeiro). Quando várias políticas correspondem à mesma consulta, elas são aplicadas em ordem de prioridade. Se duas políticas tentarem definir o mesmo campo de filtro, a estratégia declarada pela política de maior prioridade para esse campo terá precedência. Se houver múltiplas políticas acionadas com a mesma prioridade, então a política com o ID mais alto recebe precedência (como se tivesse uma prioridade maior); essa escolha garante um comportamento determinístico quando surgem conflitos.</p><h3>Resolução por campo, não por política</h3><p>Um princípio crítico de design: a resolução de conflitos opera por campo (por exemplo, marca, categoria ou descrição), não por política. Quando duas políticas produzem filtros que se sobrepõem em campos específicos, apenas esses campos específicos são afetados pela estratégia de resolução de conflitos, e a estratégia de resolução é definida pela política de correspondência de maior prioridade. Campos não conflitantes de ambas as políticas sobrevivem intactos.</p><p>Isso é importante porque a alternativa de uma abordagem por política forçaria o sistema a aceitar ou rejeitar uma política inteira quando apenas um de seus campos entrasse em conflito.</p><p>A resolução por campo preserva a quantidade máxima de informação útil sobre restrições.</p><h3>Três configurações por campo de filtro</h3><p>Cada campo de filtro em uma política tem três configurações independentes:</p><p><strong>Modo de filtro:</strong> como o filtro é aplicado quando não há conflito.</p><ul><li><p><code>hard_filter</code> (padrão): aplicado como uma cláusula <a href="https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-bool-query#score-bool-filter">Elasticsearch </a><a href="https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-bool-query#score-bool-filter"><code>bool.filter</code></a>. Isso é útil para excluir completamente produtos não relacionados. Por exemplo, restringir a busca por "laranjas" à categoria de hortifruti elimina resultados como suco de laranja e geleia de laranja. Documentos que não correspondem são completamente excluídos dos resultados.</p></li><li><p><code>soft_boost</code>: aplicado como um <a href="https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-function-score-query">Elasticsearch </a><a href="https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-function-score-query"><code>function_score</code></a> peso com um <code>boost_weight</code> configurável. Documentos que coincidem recebem um aumento de ranking, mas documentos que não correspondem não são excluídos. Isso é útil para algo como impulsionar uma marca, sem excluir outras marcas.</p></li></ul><h3>Estratégia de conflito</h3><p>O que acontece quando uma política de menor prioridade define o mesmo campo:</p><ul><li><p><code>override</code>: o valor dessa apólice de alta prioridade vence; o valor de menor prioridade é completamente eliminado. Válido para todos os tipos de campo.</p></li><li><p><code>restrict</code>: pegue o valor numérico mais restritivo (por exemplo, o teto inferior para preço__max, the higher floor for price__min). Válido somente para campos de intervalo numérico.</p></li><li><p><code>merge</code>Combine ambos os valores em uma união. Válido apenas para campos não numéricos.</p></li><li><p><code>soft_boost</code>: converta o filtro conflitante para um peso <code>function_score</code> com um <code>boost_weight</code> configurável em vez de um filtro rígido. Para mais detalhes sobre function_score boosting, veja <a href="https://www.elastic.co/search-labs/blog/bm25-ranking-multiplicative-boosting-elasticsearch">Influenciando o ranking BM25 com boosting multiplicativo no Elasticsearch</a>. Isso é válido apenas para campos sem negação.</p></li></ul><p><strong>Valor:</strong> O valor efetivo do filtro (por exemplo, uma lista de categorias, um limite de preço).</p><p><strong>Estratégias por tipo de campo: </strong>nem todas as estratégias fazem sentido para todos os tipos de campo. Por exemplo, uma exclusão é inerentemente binária, então não pode ser suavemente impulsionada. A tabela a seguir mostra quais estratégias estão disponíveis para cada tipo de campo:</p><p>Tipo de campo</p><p>Estratégias disponíveis</p><p>Padrão</p><p>Campos de negação (__not, __match__not)</p><p>substituir, mesclar</p><p>substituir</p><p>Campos de intervalo numérico (__max, __min, __gt, __lt)</p><p>restrict, override, soft_boost</p><p>restringir</p><p>Todos os outros campos (palavra-chave, texto)</p><p>soft_boost, sobrescrever, mesclar</p><p>soft_boost</p><p>Campos de negação não podem ser soft-boosted porque as exclusões são binárias. A conversão de "nunca mostrar enlatados" para "leve restrição a enlatados" altera fundamentalmente a semântica; um produto "enlatado" ainda apareceria, apenas com uma classificação ligeiramente inferior, o que anula o objetivo da exclusão.</p><h2>Um exemplo concreto: Procurando por "chocolate barato" durante uma campanha de Natal</h2><p>Suponha que um comerciante tenha criado duas políticas para chocolate que demonstramos anteriormente: uma de menor prioridade para chocolate barato e outra, de maior prioridade, que será ativada durante o Natal. Se ambas as políticas estiverem ativadas, a forma como são combinadas dependerá do modo de filtro e da estratégia de conflito da política de maior precedência. Se ambas as políticas discutidas anteriormente estiverem habilitadas, elas serão combinadas da seguinte forma:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf930b42611a6126c/6a170f8aacf088ae28be9c1b/0405e193522172bde283180df96ed3651178fafc-529x447.png" alt="Captura de tela mostrando um pipeline de transformação onde uma consulta inicial &quot;chocolate barato&quot; é modificada por múltiplas regras, incluindo filtros de categoria e preço adicionados, comportamento de resolução de conflitos, prioridades de regras e uma consulta final transformada de &quot;chocolate&quot;." /><p>Isso mostra dois conflitos: um em categorias e outro em preço. Vale destacar que a consulta executada após essa transformação tem as seguintes características:</p><ul><li><p>Somente produtos das categorias “Comidas e bebidas de Natal” e “Doces de Natal” serão exibidos.</p></li><li><p>Dentro dessas categorias, se os produtos também forem marcados como "Calendários do Advento", eles terão um aumento de 3 vezes.</p></li><li><p>É aplicado um filtro de preço de $2, proveniente da política de menor prioridade (porque a política de maior prioridade especificou “Restringir” em caso de conflito).</p></li><li><p>A palavra "barato" é removida, devolvendo apenas produtos que correspondam a "chocolate".</p></li></ul><p>Com ambas as políticas ativadas, o "chocolate barato" retorna resultados semelhantes à imagem mostrada abaixo:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7e3c2ee36f963e8c/6a170f8ccdacbf5be17d2ac2/01bbab1c5bd3d0fd37e39c25973d60141f9796e9-1126x1123.png" alt="Página de resultados de busca mostrando uma consulta por &quot;chocolate barato&quot;, com filtros de categoria e marca à esquerda e uma lista de produtos de calendário do Advento de chocolate com imagens, preços e detalhes do produto à direita." /><h3>Relaxamento das restrições</h3><p>Talvez o varejista não queira excluir produtos nas categorias de "Chocolates" e "Chocolates ao leite" durante o Natal. As configurações da política de Natal podem ter ultrapassado e removido inadvertidamente as categorias aplicadas pela política de "chocolate barato". Este é um exemplo que mostra por que pode ser mais desejável combinar políticas de menor prioridade com políticas conflitantes de prioridade mais alta. Por exemplo, poderíamos modificar a promoção de chocolates de Natal para que, em vez de "sobrescrever" no conflito, façamos um ajuste suave. A mudança para essa política seria a seguinte:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbb7393566aeab705/6a170f8db0367d5b6472bde2/45e88311014d67933ca8cf8381d8f91de090e2b4-1090x103.png" alt="UI mostrando uma regra de política de busca com campo definido como Categorias, operador definido como Igual, valores &quot;Comidas e bebidas de Natal&quot; e &quot;Doces de Natal&quot;, tratamento de conflito definido como Soft com prioridade 1, e modo de filtro definido como Hard filter." /><p>Após essa modificação, a execução do pipeline de transformação do rewriter de consultas para "chocolate barato" é a seguinte:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt6b4453b35b5f8ef0/6a170f8fb339d5ba9b76a09a/396b360e48327421c2c38bcf4a039fb1a6d5a8e0-519x445.png" alt="Captura de tela de um pipeline de transformação mostrando como a consulta inicial &quot;chocolate barato&quot; é modificada por várias regras, incluindo filtros de categoria, limites de preço, modos de filtro soft boost e hard filter, resultados de resolução de conflitos, prioridades de regras e uma consulta final de &quot;chocolate&quot;." /><p>Com o soft boost no conflito, os filtros conflitantes são convertidos em soft boosts em vez de serem descartados. A consulta que será executada no catálogo de produtos após essa transformação possui as seguintes características:</p><ul><li><p>Como “Em conflito” é especificado como “reforço suave” na política de maior prioridade, os conflitos serão convertidos em reforços da seguinte forma:</p><ul><li><p>Os produtos das categorias “Comidas e bebidas de Natal” e “Doces de Natal” receberão um aumento de 1 vez.</p></li><li><p>Produtos das categorias "Chocolates" e "Chocolates ao leite" receberão um aumento de 3x aplicado a eles.</p></li></ul></li><li><p>Como no exemplo anterior, se os produtos também forem marcados como pertencentes à categoria "Calendários do Advento", eles terão sua relevância aumentada em 3 vezes.</p></li><li><p>Como no exemplo anterior, é aplicado um filtro de preço para $2.</p></li><li><p>A palavra "barato" é removida, devolvendo apenas produtos que correspondam a "chocolate".</p></li></ul><p>Com filtragem relaxada, os resultados são os seguintes:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0288336675c509ef/6a170f917d8d6723bc70e808/7a68c54d878dadfe8b1821dd3860b7b60f9ce45f-1126x1123.png" alt="Página de resultados de busca para a consulta &quot;chocolate barato&quot;, mostrando filtros de categoria e marca à esquerda e uma lista de produtos à direita, com múltiplos itens de chocolate, preços, categorias e um total de 6.895 resultados indicados no topo." /><h3>Substituição de preço por uma política de alta prioridade</h3><p>Ou talvez o varejista queira permitir que chocolates um pouco mais caros sejam exibidos durante o Natal, aumentando o preço máximo para US$ 7. Para garantir que o preço máximo da política de chocolates de Natal não seja sobrescrito se alguém buscar por "chocolates baratos", podemos definir o modo de conflito do preço como "sobrescrever" em vez de "restringir", da seguinte forma:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltae1b40d312cf59e6/6a170f92cdacbfa1277d2ac6/c2621e6513281f545b84eb77362f2b93e1c46a1f-996x70.png" alt="UI mostrando uma regra de política de busca com o campo definido como Preço, operador definido como Menor que, valor definido como 7, tratamento de conflito definido como Substituir e modo de filtro definido como Filtro rígido." /><p>Com essa substituição, a consulta por "chocolate barato" ignora o preço máximo definido na "política de chocolate barato" e aplica apenas o preço especificado na "política de chocolates de Natal", da seguinte forma:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4a47aa71c925b4a3/6a170f94ab7f0863d3db9f6d/d50da7900beb3c08439e9fd79cbe2ddd98196441-511x389.png" alt="Captura de tela de um pipeline de transformação detalhando como a consulta inicial &quot;chocolate barato&quot; é processada por duas regras de filtro, mostrando filtros de categoria e preço adicionados, modos de filtro rígido e reforço flexível, resultados do tratamento de conflitos, prioridades das regras e a remoção de um filtro de preço devido a um conflito." /><p>Este exemplo é semelhante ao anterior, com a diferença de que o preço máximo é definido como o valor de US$ 7 da política de maior prioridade, porque essa política especificou "Substituir" em caso de conflito. Com o filtro de preços de Natal em primeiro lugar, os resultados são os seguintes:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2b9ac1a62437c967/6a170f96839dfa3f58dcffb9/635ee6353ba84727486e7e053764788fb26b6f44-1134x1079.png" alt="Página de resultados de busca para a consulta &quot;chocolate barato&quot;, mostrando filtros de categoria e marca à esquerda e uma lista de produtos de chocolate à direita, incluindo vários calendários do advento com imagens, preços, categorias e um total exibido de 10.000 resultados." /><p>Essas três variações (override, soft_boost e override on price) demonstram uma propriedade fundamental do sistema: um comerciante pode mudar a forma como duas políticas interagem modificando uma configuração em um único campo dentro de uma única política, sem implantar nenhum código. A estratégia de conflito é a alavanca que controla o comportamento empresarial.</p><h2>Rastreamento de frases utilizadas</h2><p>Existe uma forma mais sutil de conflito: duas políticas que correspondem à mesma frase. Se uma política de maior prioridade remover "sem amendoim" da consulta, uma política de menor prioridade que também correspondeu a "sem" não terá mais nada sobre o que agir. O sistema detecta se a frase correspondente não está mais presente na consulta reescrita e ignora a política de menor prioridade.</p><p>As políticas de intenção estão isentas do rastreamento de frases consumidas: elas definem a estratégia de recuperação com base na correspondência da consulta original, independentemente do texto removido pelas políticas de maior prioridade.</p><p>Juntos, a ordenação prioritária, a resolução de conflitos por campo e o rastreamento de frases consumidas fornecem ao plano de controle um modelo de composição determinística. Com essa base estabelecida, o sistema pode tomar uma decisão de roteamento que seria arriscada sem ela.</p><h2>A governança torna segura a estratégia de recuperação.</h2><p>Um insight importante sobre o roteamento para o método correto de recuperação (texto, semântica ou híbrido) é que ele é executado após a governança. Se suas políticas já aplicaram a "categoria de produção", então a recuperação semântica se torna muito menos arriscada porque o conjunto candidato é restrito. Uma busca semântica sobre 500 itens de produto é uma proposta muito diferente de uma busca semântica com mais de 500.000 SKUs. A governança reduz o raio da explosão antes do início da recuperação.</p><p>Por exemplo, sem governança, uma consulta semântica por "Frutas ricas em vitamina C por menos de US$ 4", além de frutas, poderia retornar frascos de vitaminas, cenouras e pimentão verde. O plano de controle garante que esses resultados indesejados nem sequer sejam considerados como parte da expansão semântica.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltdaa3ff1bb3afaa36/6a170f97acf088954bbe9c1f/6dccd5b8a94bfa81f68e3d1c4ad8929ce8cc4e5e-990x378.png" alt="Diagrama que mostra o fluxo de uma consulta de pesquisa, desde o usuário até o servidor de aplicativos e o plano de controle, onde as regras de correspondência são consultadas, a consulta é reescrita com a intenção semântica, incluindo restrições de categoria e preço, e os resultados são recuperados de um catálogo de produtos, excluindo-se os produtos que não correspondem à consulta." /><p>Com essa restrição em vigor, o plano de controle aplica lógica de roteamento pragmática:</p><ul><li><p><strong>Lexical</strong> para consultas de navegação e principais, onde a precisão determinística é importante.</p></li><li><p><strong>Semântica</strong> para consultas descritivas de descoberta, onde a correspondência de conceitos é útil.</p></li><li><p><strong>Híbrido</strong> seletivamente, quando as restrições já foram aplicadas e o negócio aceita uma recuperação mais ampla.</p></li></ul><h2>da arquitetura à implementação</h2><p>O plano de controle governado traduz a intenção de negócios em planos de execução determinísticos e componíveis, sem incorporar essa lógica no código do aplicativo. As políticas são dados: correspondidas no momento da consulta, resolvidas por meio de estratégias explícitas de conflito por campo e aplicadas como transformações em cascata que produzem resultados explicáveis. A Elastic Services Engineering desenvolveu e implantou essa arquitetura para equipes de comércio eletrônico corporativo, usando padrões e aceleradores reutilizáveis que reduzem o caminho do conceito à produção. Você pode assistir a uma demonstração da nossa implementação de um plano de controle no YouTube em: <a href="https://www.youtube.com/watch?v=e1GuL9CYWAk">Corrigindo a relevância da busca em segundos: Apresentando o PRISM</a>.</p><h3><strong>O que vem a seguir nesta série</strong></h3><p>O próximo post aborda a implementação: como o percolador Elasticsearch alimenta a consulta de políticas, incluindo mapeamentos de índice, marcadores de limite, rastreamento de frases guiado por destaque e exemplos concretos de consultas.</p><h2>Coloque em prática o buscar governado de comércio eletrônico</h2><p>A arquitetura do plano de controle descrita neste post (resolução de conflitos por campo, transformações de políticas em cascata e roteamento de recuperação com restrição de governança) foi projetada e construída pela Elastic Services Engineering. Cada padrão, captura de tela e pipeline de transformação mostrados nesta série vem de um sistema operacional criado pela Elastic Services Engineering e validado em catálogos de produtos em escala empresarial.</p><p>Se você quiser implementar um plano de controle governado e orientado por políticas no Elasticsearch, <a href="https://www.elastic.co/consulting">Elastic Services</a> pode ajudá-lo a chegar lá mais rápido.</p><h2>Participe da discussão</h2><p>Tem dúvidas sobre governança de buscar, estratégias de recuperação ou arquitetura de buscar para e-commerce? Participe da <a href="https://discuss.elastic.co/">conversa mais ampla da comunidade Elastic</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture</guid>
    <category><![CDATA[Operações]]></category>
    <dc:creator><![CDATA[Alexander Marquardt,Honza Král,Taylor Roy]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb84f89f4d9029df7/6a170f806234e077cddb1ab6/4e2cd5244ef8b9a05af6337a4825252f321a9a43-1377x768.png" length="0" type="image/png"/>
    <pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Por que a busca para e-commerce precisa de governança]]></title>
    <description><![CDATA[Descubra por que a busca para e-commerce falha sem governança e como uma camada de controle garante resultados previsíveis e orientados pela intenção, melhorando a recuperação.]]></description>
    <content:encoded><![CDATA[<p>Os varejistas de e-commerce precisam lidar com vários tipos de consultas fundamentalmente diferentes dentro do mesmo sistema. Um comprador que procura por “laranjas” espera a fruta, não produtos que contenham a palavra “laranja”, como suco de laranja ou geleia de laranja, e não produtos cítricos semanticamente relacionados. Um comprador que procura um "presente para o avô que gosta de doces" precisa de uma descoberta semântica, não de uma correspondência literal de palavras-chave.</p><p><em>Recuperação lexical</em> (correspondência de texto), <em>recuperação semântica</em> (correspondência de conceitos) e <em>recuperação híbrida</em> (combinação de sinais lexicais e semânticos) não resolvem esses problemas por si só. A recuperação lexical pode retornar qualquer conteúdo que contenha a palavra "laranjas", enquanto a recuperação semântica pura, em uma consulta com alta intenção como "laranjas", pode ampliar o escopo para itens relacionados, como limões ou toranjas. A recuperação híbrida mescla esses sinais lexicais e semânticos, mas ainda não determina se essa consulta deve ser tratada como uma consulta de navegação, quais restrições devem ser impostas ou quais políticas de negócios se aplicam. A lacuna não está na tecnologia de recuperação em si; está na ausência de uma camada de governança que entenda que tipo de consulta é esta e quais restrições devem ser impostas antes de a recuperação começar.</p><p>Neste blog, exploramos a governança de busca para e-commerce, por que isso é importante e como uma camada de controle garante uma recuperação previsível e precisa.</p><h2>O que significa governança na busca para e-commerce</h2><p><em>Governança</em>, neste contexto, significa introduzir uma camada de decisão entre a consulta do usuário e o mecanismo de recuperação de dados. Esta camada realiza as seguintes funções:</p><ul><li><p>Classifica a intenção da consulta: isso é navegação ("laranjas") ou descoberta ("presente para o avô")?</p></li><li><p>Aplica restrições comerciais: Quais limites de categoria, regras de elegibilidade, restrições de disponibilidade ou políticas de comercialização se aplicam?</p></li><li><p>Caminhos para a estratégia apropriada: deve-se usar recuperação lexical, semântica ou híbrida?</p></li></ul><p>Uma camada de governança determina qual abordagem de recuperação deve ser usada para cada consulta, quais restrições devem ser aplicadas e quais políticas de negócios devem ser aplicadas antes do início da recuperação. É importante não confundir governança com recuperação híbrida: híbrida é uma estratégia de recuperação que combina sinais lexicais e semânticos, enquanto a governança é a camada inicial de decisão que determina se deve ser usada a recuperação lexical, semântica ou híbrida.</p><h2>O status quo: a implementação da camada de aplicação "spaghetti"</h2><p>Atualmente, muitos varejistas tentam resolver isso inserindo lógica diretamente na camada de aplicação. Isso geralmente resulta em <em>código espaguete</em>, ou seja, milhares de linhas de instruções if-then fixas no código, regex e templates de busca complexos.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltdd7b33454d925cfd/6a1710f1e8fbce25ee39fd4d/f532b099ee103458e15563a711dae92952f8df02-1024x765.png" alt="Comparação entre lógica de aplicação codificada e Elasticsearch, mostrando como o Elasticsearch simplifica a classificação e a recuperação sem regras complexas de &quot;se-então&quot;." /><p>Essa abordagem pode fornecer resultados de busca desejados, como mostrado acima; no entanto, ela cria atritos operacionais significativos:</p><ul><li><p><strong>Dependência da engenharia:</strong> usuários da área de negócios e a equipe de merchandising não conseguem modificar o comportamento de busca sem abrir chamados para a engenharia e enfrentar longos ciclos de implantação, que muitas vezes levam várias semanas.</p></li><li><p><strong>Fragmentação:</strong> a lógica de busca fica dispersa entre o código da aplicação e os modelos de busca, sendo difícil de explicar ou auditar, tornando arriscado evoluir.</p></li></ul><p>Mesmo quando as equipes reconhecem a necessidade de roteamento, o debate frequentemente se concentra na questão errada: qual método de recuperação escolher.</p><h2>A falsa escolha: lexical vs. semântico vs. híbrido</h2><p>As equipes de busca costumam enquadrar o desafio como uma escolha de estratégia de recuperação: lexical/BM25 versus semântica/vetores versus híbrida. Esse enquadramento é compreensível (os métodos de recuperação são importantes), mas ignora a falha mais comum em implantações reais: usar uma única abordagem de recuperação para todas as consultas gera resultados abaixo do ideal.</p><p>A busca de comércio é uma combinação de intenções fundamentalmente diferentes:</p><ul><li><p><strong>Navegação determinística e de alta intenção</strong> ("laranjas", "leite", "chocolate sem amendoim", "azeite de oliva barato").</p></li><li><p><strong>Descoberta exploratória</strong> ("jaqueta para caminhar nas montanhas", "presente para uma criança de 12 anos que gosta de robótica").</p></li><li><p><strong>Restrições operacionais</strong> (disponibilidade, tamanho, preço, cor).</p></li><li><p><strong>Merchandising e campanhas</strong> (impulsionar, enterrar, campanhas sazonais).</p></li></ul><p>Quando o sistema encaminha todos esses elementos pela mesma estratégia de recuperação, os resultados frequentemente apresentam erros sistemáticos e previsíveis, devido à falta de governança no modelo operacional. Quando as equipes não percebem isso como uma lacuna de governança, elas recorrem à única ferramenta que possuem: mais ajustes.</p><h2>Por que o "ajuste de relevância" pode se tornar cíclico</h2><p>Sem uma camada de roteamento, a "relevância" frequentemente se transforma em um amontoado interminável:</p><ul><li><p>Por que essa consulta mostra acessórios acima do produto núcleo?</p></li><li><p>Por que essa consulta principal passou a exibir itens relacionados de repente?</p></li><li><p>Por que os resultados mudaram depois que adicionamos sinônimos, ajustamos analisadores ou ativamos a funcionalidade híbrida?</p></li><li><p>Por que a equipe de negócios precisa de um release de engenharia para corrigir uma única consulta?</p></li></ul><p>As equipes respondem com mais ajustes: mais sinônimos, mais impulsos, mais experimentos de reclassificação, mais exceções no código da aplicação. Isso pode funcionar por um tempo, mas frequentemente produz um comportamento frágil, porque o sistema ainda não possui uma camada de decisão explícita para determinar o tipo de consulta e impor as restrições corretas antes da recuperação.</p><h2>A anatomia da intenção do e-commerce: cabeça e cauda</h2><p>Nesta seção, usamos "cabeça" e "cauda" como abreviações práticas para padrões comuns de navegação e exploração de consultas no comércio eletrônico. No mundo real, muitas consultas contêm aspectos de ambos:</p><h3>Consultas principais (intenção determinística)</h3><p>São consultas diretas e navegacionais onde o usuário sabe exatamente o que quer:</p><ul><li><p>Intenção de item único ("laranjas", "leite", "pão").</p></li><li><p>Marcas exatas ou famílias de produtos ("iPhone 15 Pro", "Coca Coke").</p></li><li><p>SKUs, números de modelo, tamanhos ("ABC123", "Air Max 270").</p></li></ul><p>Para essas consultas, a recuperação lexical pode lidar com correspondência de tokens (palavras correspondentes), mas o negócio também espera respeitar restrições, devolver rankings previsíveis e ter resultados controláveis. Um profissional de merchandising precisa garantir que uma consulta seja resolvida dentro dos limites da categoria correta, respeite os critérios de elegibilidade e destaque as prioridades específicas do negócio.</p><p>A governança é necessária para fazer cumprir a resolução pretendida. Por exemplo, "laranjas" devem corresponder à categoria de hortifrúti, não a suco de laranja, geleia de laranja ou refrigerante de laranja.</p><h3>Consultas de cauda (descoberta exploratória)</h3><p>São consultas descritivas e ricas em intenção, nas quais os consumidores exploram:</p><ul><li><p>"Presente para o avô que adora doces"</p></li><li><p>"Jaqueta para caminhadas nas montanhas"</p></li><li><p>"Sapatos para ficar em pé o dia todo"</p></li></ul><p>A recuperação lexical costuma apresentar dificuldades nesse caso. A recuperação semântica se destaca porque pode conectar o conceito de consulta ao produto, mesmo quando a redação não corresponde. Mas a recuperação semântica sozinha raramente é suficiente também. Consultas reais frequentemente exigem restrições para serem aplicadas, independentemente do método de recuperação usado.</p><h2>As restrições são ortogonais ao método de recuperação</h2><p>Aplicar restrições à recuperação semântica não significa <em>busca híbrida</em>. São conceitos ortogonais. Restrições, como filtros e boosts no Elasticsearch, podem ser aplicadas a qualquer recuperação lexical, semântica ou híbrida. O desafio é decidir como a consulta deve ser interpretada, quais restrições devem ser aplicadas e qual estratégia de recuperação deve ser utilizada.</p><p>Abaixo estão alguns exemplos de consultas que combinam recuperação com restrições rígidas:</p><ul><li><p><strong>Laranjas:</strong> recuperação lexical para "laranjas" mais uma restrição de categoria, como "Frutas" ou "Produtos", eliminando geleia de laranja, suco de laranja e refrigerante de laranja.</p></li><li><p><strong>Frutas com alto teor de vitamina C por menos de US$ 4:</strong> recuperação semântica com foco em intenção nutricional, além de restrições que limitam os resultados à categoria de frutas e produtos por menos de US$ 4.</p></li><li><p><strong>Sapatos confortáveis para trabalhar:</strong> recuperação semântica para intenção contextual mais uma restrição de categoria que limita os resultados a sapatos.</p></li></ul><p>Essas consultas não podem ser tratadas por uma única abordagem:</p><ul><li><p><strong>A recuperação lexical pura</strong> geralmente é insuficiente aqui porque frases como "rico em vitamina C" ou "confortável" podem não existir como atributos bem definidos e estruturados. Talvez seja necessário inferi-las a partir de descrições, análises ou especificações do produto.</p></li><li><p><strong>A recuperação semântica pura</strong> também nem sempre é suficiente, pois, sem restrições explícitas, uma consulta como "frutas ricas em vitamina C" pode se expandir para suplementos vitamínicos, bebidas com sabor de frutas ou vegetais ricos em vitaminas fora da categoria e faixa de preço pretendidas.</p></li></ul><p>Uma camada de governança determina se uma consulta precisa de recuperação lexical, compreensão semântica, aplicação de restrições ou alguma combinação dessas. Sem essa camada, as equipes de comércio eletrônico podem acabar:</p><ul><li><p><strong>Excesso de restrições:</strong> usar a recuperação lexical para pedidos semânticos (por exemplo, "presente para o avô").</p></li><li><p><strong>Sub-restrição: </strong>utilizar consultas semânticas para consultas principais de alta intenção (por exemplo, "laranjas").</p></li></ul><p>O desafio da governança é construir um sistema que possa tomar a decisão correta para cada classe de consulta.</p><h2>O que acontece sem governança</h2><p>O modo de falha mais comum é simples: as equipes pegam a consulta bruta do usuário e a encaminham diretamente para uma única estratégia de recuperação (lexical, semântica ou híbrida), sem uma camada intermediária de governança.</p><h3>A recuperação lexical falha na resolução pretendida</h3><p>Quando um usuário pesquisa por “laranjas”, uma estratégia de recuperação lexical pode retornar qualquer resultado que contenha esse token: suco de laranja, geleia de laranja ou refrigerante de laranja. O sistema encontrou o termo corretamente, mas, sem governança, pode não resolver o contexto de compra pretendido (a fruta).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1b4595242ea6eb05/6a1710f35091684ba3e1bbd0/99abc7a46f9c56a26a68d0a089d7ab830b9b5568-1560x814.png" alt=" Ilustração mostrando como uma única consulta por &quot;laranjas&quot; retorna diferentes resultados relacionados, como geleia, laranjas frescas e refrigerante de laranja." /><h3>A recuperação semântica se expande além das restrições pretendidas</h3><p>Quando um usuário busca por "laranjas", um sistema semântico pode recuperar itens conceitualmente relacionados entre conceitos de produtos próximos. O sistema pode entender corretamente o domínio mais amplo (frutas ou produtos), mas, sem uma governança explícita, ele ainda pode se expandir além da restrição pretendida pelo usuário (especificamente laranjas).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltff1aba60c7b13fc8/6a1710f58b73cb3cef18a117/c9de86363ecbed499fe48259f47b3c5b2c26bc43-1568x796.png" alt="Diagrama mostrando como uma consulta para &quot;laranjas&quot; é roteada para diferentes categorias de frutas, incluindo maçãs, laranjas e frutas mistas." /><h3>A lacuna é a governança</h3><p>O que é necessário é uma camada de decisão a montante que determine a intenção da consulta e impeça as restrições corretas antes do início da recuperação. Isso resolve questões como:</p><ul><li><p>Itens semelhantes ou relacionados aparecendo ao lado do que o usuário realmente queria.</p></li><li><p>Limites de categorias desfocados ("bebidas" versus. "produtos").</p></li><li><p>Incapacidade de implementar aumentos sazonais ou campanhas.</p></li><li><p>Resultados imprevisíveis e inexplicáveis.</p></li></ul><h2>Compreensão e roteamento de intenções: o plano de controle necessário</h2><p>Um sistema de busca governado introduz um plano de controle leve antes da recuperação (antes de executar uma consulta no Elasticsearch).O controle será discutido em detalhes nas partes <a href="https://www.elastic.co/search-labs/blog/ecommerce-search-governance-control-plane-architecture">3</a> e <a href="https://www.elastic.co/search-labs/blog/elasticsearch-percolator-search-governance">4</a> desta série de blog; por enquanto, discutiremos apenas o que ele pode fazer, mas não como funciona:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt373bd838e1751998/6a1710f74a531b1e5436aa57/88c3d0f9731a128d73a765dcdffed897308110a6-2680x766.png" alt="Diagrama que mostra como diferentes consultas são roteadas por um plano de controle para o BM25 ou para resultados de busca semântica." /><p>Um plano de controle pode detectar intenção, aplicar políticas de negócio e garantir a estratégia de recuperação apropriada da seguinte forma:</p><p><strong>1. Detectar sinais de intenção</strong></p><ul><li><p>Essa consulta é provavelmente navegação versus descoberta?</p></li><li><p>É uma consulta conhecida como principal (leite, pão, bananas)?</p></li><li><p>Existe uma interpretação conhecida de produto, marca ou categoria (por exemplo, "laranjas" deve ser interpretado como hortifrúti).</p></li><li><p>A consulta segue um padrão semelhante ao SKU?</p></li><li><p>A consulta se enquadra em uma campanha ativa ou em uma política sazonal (por exemplo, durante o Natal, aumentar os resultados relacionados a peru)?</p></li><li><p>A consulta implica alguma restrição (categoria, atributos, exclusões, preço/tamanho/cor)?</p></li></ul><p><strong>2. Aplicar governança e políticas de negócios</strong></p><ul><li><p>Aplique primeiro as restrições determinísticas (categoria/atributo/negação/disponibilidade).</p></li><li><p>Aplique políticas de comercialização ativas (impulsionar/enterrar/fixar/substituir).</p></li><li><p>Resolva conflitos com regras de precedência (por exemplo, substituições de campanhas versus políticas globais).</p></li></ul><p><strong>3. Encaminhar para a estratégia de recuperação apropriada</strong></p><ul><li><p>Lexical (rápido, determinístico) para consultas de navegação/de alta intenção.</p></li><li><p>Recuperação semântica para consultas verdadeiras de descoberta.</p></li><li><p>Híbrido onde sinais lexicais e semânticos combinados agregam valor sob restrições explícitas de negócios.</p></li></ul><p>Na prática, a saída do plano de controle não é simplesmente “usar híbrido” ou “usar semântico”. Trata-se de um plano de recuperação de compras controlado: uma interpretação da intenção do comprador, das restrições e políticas que devem ser aplicadas e da estratégia de recuperação que deve ser executada. Alguns exemplos simples tornam isso concreto:</p><p>Consulta do cliente</p><p>Interpretação governada</p><p>Exemplo de plano de recuperação</p><p>"Chocolate sem amendoim"</p><p>Consulta orientada a produto com uma restrição de exclusão rígida</p><p>Recuperação lexical para chocolate com um filtro de exclusão para produtos que contenham amendoim.</p><p>"azeite de oliva barato"</p><p>Consulta de produto/categoria com restrição de preço</p><p>Recuperação lexical para azeite de oliva mais um filtro de preço limitado no limite do varejista para barato</p><p>"frutas ricas em vitamina C abaixo de $ 4"</p><p>Consulta de descoberta que exige compreensão semântica mais restrições rígidas</p><p>Recuperação semântica por intenção nutricional, restrita à categoria de frutas e filtrada para produtos com preço inferior a $ 4</p><p>Um plano de controle seleciona a política e a estratégia de recuperação adequadas para cada consulta de forma consistente, previsível e em escala. Isso torna os métodos avançados de recuperação mais previsíveis em produção porque as restrições alinhadas à intenção são aplicadas primeiro e as decisões de roteamento são explícitas, em vez de implícitas.</p><h2>Como isso se relaciona com outras abordagens</h2><p>Algumas equipes usam modelos de incorporação aprimorados para capturar melhor a semântica do produto, o que pode melhorar substancialmente a qualidade da recuperação semântica. Outros utilizam abordagens de reclassificação, como <a href="https://www.elastic.co/docs/solutions/search/ranking/learning-to-rank-ltr">o Learning To Rank (LTR)</a>, para otimizar a ordenação dos resultados com base em engajamento ou sinais de negócio após a recuperação. Ambos são valiosos e frequentemente complementares. Embeddings melhores melhoram a correspondência de similaridade. A reclassificação melhora a ordem entre os candidatos recuperados.</p><p>A governança aborda uma camada diferente do problema: ela se situa antes da recuperação de dados. Ela decide qual estratégia de recuperação usar (por exemplo, lexical, semântica ou híbrida), quais restrições determinísticas são necessárias e quais consultas devem combinar várias políticas de negócios.</p><h2>O que um plano de controle governado permite</h2><p>Depois que uma camada de governança é implementada, o modelo operacional muda de forma fundamental. Consultas de busca críticas para a receita se tornam previsíveis. As equipes de negócios podem atualizar o comportamento de busca sem precisar esperar pelos ciclos de release da engenharia. E métodos avançados de recuperação, como a semântica e a híbrida, podem ser adotados de forma incremental, com roteamento e mecanismos de proteção, em vez de uma chave liga/desliga global.</p><p>O <a href="https://www.elastic.co/search-labs/blog/ecommerce-search-governance-zero-deploy">próximo post</a> desta série explora como esse modelo operacional funciona na prática e por que ele pode ser tão importante quanto a tecnologia de retrieval que está por trás dele.</p><p>Se um comerciante precisar abrir um ticket do Jira e esperar por uma implantação para corrigir uma consulta crítica de receita, o gargalo não é o mecanismo; é o modelo operacional. A pesquisa moderna de comércio eletrônico precisa de uma forma de traduzir a intenção comercial em um comportamento de pesquisa controlado e auditável de forma rápida e segura, sem deixar de usar a recuperação avançada, que agrega valor mensurável.</p><h2>O que vem a seguir nesta série</h2><p>Os padrões explorados nesta série operam antes da recuperação: traduzindo a intenção comercial na estratégia de consulta correta antes do início da geração da consulta. No <a href="https://www.elastic.co/search-labs/blog/ecommerce-search-governance-zero-deploy">próximo post</a>, passamos do problema técnico para o operacional: o que acontece quando equipes de negócios conseguem mudar o comportamento de busca sem uma implantação de engenharia, e por que a governança torna isso seguro.</p><h2>Coloque em prática o buscar governado de comércio eletrônico</h2><p>Gargalos de engenharia, lógica frágil da camada de aplicativos e resultados de busca imprevisíveis são problemas que a Elastic Services pode ajudar a resolver em contratos de serviços de comércio eletrônico corporativo. A arquitetura do plano de controle governado descrita nesta série foi construída pela Elastic Services Engineering.</p><p>Se sua equipe está gastando ciclos de engenharia traduzindo solicitações de merchandising em alterações de código, ou se o backlog de relevância de buscar nunca parece diminuir, podemos ajudá-lo a avaliar sua arquitetura atual e construir um caminho para uma buscar governada e editável pela área de negócios. Entre em contato com <a href="https://www.elastic.co/consulting">Elastic Services</a>.  </p><h2>Participe da discussão</h2><p>Tem dúvidas sobre governança de buscar, estratégias de recuperação ou arquitetura de buscar para e-commerce? Participe da <a href="https://discuss.elastic.co/">conversa mais ampla da comunidade Elastic</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/ecommerce-search-governance-improve-retrieval</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/ecommerce-search-governance-improve-retrieval</guid>
    <category><![CDATA[Operações]]></category>
    <dc:creator><![CDATA[Alexander Marquardt,Honza Král,Taylor Roy]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt840c7a0a5b92080f/6a1710f967045b3e5445c2cd/3793259b01a5653a7520393a2f006610de0d21e7-1280x720.png" length="0" type="image/png"/>
    <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>