Indexação e Motor de Busca (Meilisearch)
O projeto utiliza o Laravel Scout em conjunto com o Meilisearch para fornecer uma busca ultrarrápida, baseada em texto e vetores semânticos. Toda a lógica de indexação está centralizada no model WakeProduct.
Regras de Elegibilidade (O Porteiro)
Nem todos os produtos salvos no banco de dados vão para o motor de busca. O método shouldBeSearchable() atua como um filtro rigoroso. Um produto só é indexado se atender a todas as seguintes condições simultaneamente:
- URL Válida: O campo de URL não pode estar vazio e deve obrigatoriamente conter o segmento
/produto/. - Visibilidade na Wake: O JSON bruto da API (
raw_data) deve confirmar que a página renderiza ou é válida, validando seexibirSiteouvalidosãotrue.
Estrutura do Documento Indexado
Quando um produto passa na elegibilidade, o método toSearchableArray() o converte em um documento otimizado para o Meilisearch.
1. Limpeza e Otimização de Atributos
- Ficha Técnica: O sistema faz um "strip" de tags HTML da descrição original e agrupa as informações adicionais da Wake em uma string contínua (
informacoes_tecnicas_full), facilitando o match de palavras-chave na busca. - Cálculo de Desconto: O sistema calcula dinamicamente a tag de desconto em tempo de indexação, gerando o
percentual_descontosempre que oprecoDefor maior que o preço atual. - Cache de Voltagem: Para evitar Full Table Scans e economizar RAM do servidor, o sistema possui uma rotina que vai ao banco apenas uma vez para montar um cache de voltagens disponíveis em memória estática (
$voltagemCache), anexando o array final ao camposelecione a voltagem.
2. Integração com Inteligência Artificial
O documento enviado ao Meilisearch já embute o processamento assíncrono realizado pela IA local:
- Tags Semânticas: O campo
tags_iainclui intenções de uso geradas pelo motor Ollama/LLaVA. - Busca Híbrida/Vetorial: O índice contempla o array
_vectors['default']contendo ovector_embeddingdo produto, preparando o terreno para buscas semânticas nativas do motor.