O motor de busca das lojas na e-com.plus utiliza Elasticsearch, que possui um recurso chamado stopwords onde palavras comuns
são ignoradas na indexação (“de”, “la”, “a”, “o”, etc.). O problema é que ao buscar “DE LA SOUL”, o Elasticsearch tenta encontrar produtos com “de” E “la” E “soul” simultaneamente. Como “de” e “la” são stopwords e nunca foram indexados, nenhum produto satisfaz essa condição. Já ao buscar “SOUL”, há apenas um termo indexado normalmente e os produtos aparecem.
A solução
A correção é feita no repositório da loja, no arquivo template/js/custom-js/html/SearchEngine.js. São duas alterações:
1. Atualizar o import na linha 34:
// Antes
import EcomSearch from '@ecomplus/search-engine'
// Depois
import EcomSearch, { dslMiddlewares } from '@ecomplus/search-engine'
2. Adicionar logo abaixo desse import:
dslMiddlewares.push(dsl => {
const must = dsl.query && dsl.query.bool && dsl.query.bool.must
if (Array.isArray(must)) {
must.forEach(clause => {
if (clause.multi_match) {
clause.multi_match.operator = 'or'
}
})
}
})
Isso instrui o Elasticsearch a usar o operador OR, ou seja, “DE LA SOUL” passará a retornar produtos que contenham qualquer um dos termos e como “soul” está indexado corretamente, os produtos aparecerão normalmente.
Possíveis efeitos colaterais
A mudança aumenta o recall (encontra mais resultados), mas pode reduzir levemente a precisão em alguns casos:
- Busca
"jazz rock" → com OR, retorna todos os jazz + todos os rock separadamente, em vez de apenas produtos classificados nos dois gêneros
- Busca
"pink floyd the wall" → pode trazer outros álbuns que contenham “wall” no título
- Busca
"vinil azul" → pode retornar produtos onde “azul” aparece em algum campo, mesmo sem relação direta
Na prática, o impacto é baixo: o Elasticsearch ordena os resultados por relevância, então produtos que combinam mais termos da busca aparecem primeiro. Para uma loja de discos onde as buscas são frequentemente por nomes de artistas e títulos de álbuns com stopwords (“De La Soul”, “Os Paralamas do Sucesso”, “O Rappa”, “A Cor do Som”, etc.) os benefícios superam os riscos, e manter zero resultados para esses casos é claramente pior.
Podem implementar caso tenham acesso ao repositório da loja, caso não tenham basta confirmar que desejam essa implementação que adicionamos por aqui.
Abraços.