Blog

Elasticsearch: O motor de busca que também entende música

20/05/2025 às 14h00
Elasticsearch
Busca.Fuzzy
Similaridade.Melódica

Quando a busca textual encontra a estrutura melódica

Imagem relacionando o Elasticsearch com busca melódia.

Índice

Introdução

A maioria das aplicações com Elasticsearch foca em dados textuais, como análise de logs ou pesquisas em e-commerce. Mas e se o objetivo fosse encontrar similaridade entre melodias musicais?

Este artigo apresenta uma adaptação de técnicas de busca textual para padrões melódicos, permitindo comparar sequências de notas, mesmo com pequenas variações, contra um banco de melodias.

A proposta envolve representar a estrutura melódica de forma simbólica, aplicar n-gramas e utilizar a busca fuzzy do Elasticsearch como motor de comparação.

O problema

Imagine um usuário que assovia ou digita uma sequência simples como: Dó Ré Mi Ré Dó. O desejo é encontrar músicas que contenham esse padrão ou algo semelhante, mesmo que com notas diferentes ou pequenas variações. Como criar um mecanismo de busca que permita isso?

Trabalhar com notas musicais significa lidar com dados estruturados que têm significado semântico e relacional: intervalo, direção, repetição, contorno. Uma comparação literal de sequências não é suficiente para capturar o significado musical.

A abstração: contorno melódico

Em vez de comparar notas absolutas (como Dó Ré e Mi), as melodias são abstraídas para seus contornos melódicos. Isso significa representar a direção do movimento entre as notas:

Vejamos a música “Parabéns a você”:

Partitura da melodia da música: Parabéns para Você

A melodia: Sol, Sol, Lá, Sol, Dó, Si … se transforma em: “RUDUD” … Essa construção é feita de duas em duas notas:

  • Sol → Sol (igual): R (Repeat)
  • Sol → Lá (mais alto): U (Up)
  • Lá → Sol (mais baixo): D (Down)
  • Sol → Dó (mais alto): U (Up)
  • Dó → Si (mais baixo): D (Down)

Essa representação simbólica facilita a identificação de melodias semelhantes, independentemente da tonalidade, andamento ou tempo das notas, pois considera apenas o contorno melódico.

Aplicando n-gramas para capturar padrões

Com os contornos transformados em strings, aplicam-se n-gramas para quebrar a sequência em segmentos:

Para “RUDUD”, com n=3, obtém-se: “RUD”, “UDU”, “DUD”.

Isso é semelhante ao que se faz em NLP (Processamento de Linguagem Natural, do inglês Natural Language Processing) com palavras ou caracteres. O objetivo é indexar partes da melodia para permitir matching parcial.

A busca fuzzy com Elasticsearch

Foi criado um mapeamento no Elasticsearch com tipo “text” e analisador edge n-grams, permitindo indexar fragmentos melódicos como “palavras parciais” e buscar com fuzziness: 0. Sem tolerância a diferenças, tornando a busca mais precisa para padrões curtos.

A busca fuzzy no Elasticsearch funciona a partir do cálculo da distância de Levenshtein, que mede o número mínimo de operações (inserções, deleções ou substituições) necessárias para transformar uma sequência em outra. Dessa forma, é possível encontrar padrões semelhantes mesmo que haja pequenas variações entre eles.

Vamos considerar como exemplo o trecho destacado em verde sem a nota identificada em azul, extraída da música “Parabéns para você”:

Partitura da melodia da música: Parabéns para Você

Exemplo de query simplificada:

{
  "query": {
    "match": {
      "melodic_pattern": {
        "query": "RUDDD",
        "fuzziness": "0"
      }
    }
  }
}

Com esse modelo, é possível buscar padrões melódicos semelhantes mesmo quando há transposição, variações ou notas intermediárias. Veja o resultado da busca para a query acima:

Demonstração

Veja o projeto completo em GitHub

Conclusão

Ao reinterpretar a busca textual como uma busca simbólica de estruturas, o Elasticsearch se torna um mecanismo potente para comparação de padrões musicais. A solução é escalável, eficiente e viabiliza aplicações em musicologia, sistemas de recomendação e detecção de plágio, ao identificar músicas com padrões semelhantes.

Vale ressaltar que este é apenas um dos muitos caminhos possíveis para busca por similaridade melódica, e há diversas alternativas conforme o contexto.

Você já conhecia essa solução para busca de músicas com o Elasticsearch? Se achou interessante, compartilhe com colegas que também se interessam por tecnologia e música. Até a próxima!

Foto de Alex Caranha

Olá, eu sou o Alex Caranha, obrigado pela leitura!

Se você gostou deste artigo, não deixe de me seguir nas redes para ficar por dentro das próximas publicações: