Todos os produtos
Search
Central de documentação

PolarDB:smlar

Última atualização: Jun 28, 2026

O smlar é uma extensão open-source para o PolarDB for PostgreSQL que calcula a similaridade de arrays diretamente no banco de dados. Ele oferece suporte a índices GiST e GIN para buscas de similaridade rápidas e funciona com todos os tipos de dados nativos do PostgreSQL.

Três algoritmos de similaridade estão disponíveis: consine (padrão), TF-IDF e overlap. Escolha o algoritmo conforme o seu caso de uso: o cosseno é uma medida geral de similaridade vetorial; o TF-IDF pondera termos por frequência e raridade, sendo útil para arrays semelhantes a texto; já o overlap conta elementos compartilhados sem normalização.

Versões suportadas

O smlar exige uma das seguintes versões do PolarDB for PostgreSQL:

  • PolarDB for PostgreSQL 16 (versão de revisão 2.0.16.9.6.0 ou posterior)

  • PolarDB for PostgreSQL 14 (versão de revisão 2.0.14.5.1.0 ou posterior)

  • PolarDB for PostgreSQL 11 (versão de revisão 2.0.11.9.28.0 ou posterior)

Para verificar sua versão de revisão, acesse o console do PolarDB ou execute SHOW polardb_version;. Caso a versão de revisão não atenda aos requisitos, atualize-a.

Instalar e remover o smlar

Instalação:

CREATE EXTENSION smlar;
Nota

O operador % do smlar entra em conflito com o operador % do rum. Não há suporte para instalar ambas as extensões no mesmo schema. Para usar o smlar junto com o rum, instale-os em schemas separados.

Remoção:

DROP EXTENSION smlar;

Calcular similaridade de arrays

Similaridade básica — mesmo tipo de dado:

SELECT smlar('{3,2}'::int[], '{3,2,1}');
  smlar
----------
 0.816497
(1 row)

Fórmula personalizada:

SELECT smlar('{1,4,6}'::int[], '{5,4,6}', 'N.i / (N.a + N.b)' );
  smlar
----------
 0.333333
(1 row)

Na fórmula, N.i representa a quantidade de elementos idênticos (interseção), N.a indica o número de elementos únicos no primeiro array e N.b corresponde aos elementos únicos do segundo array.

Teste de similaridade baseado em limiar:

Utilize o operador % para verificar se a similaridade entre dois arrays supera o limiar definido por smlar.threshold:

-- Set the threshold
SET smlar.threshold = 0.6;

-- Confirm the current value
SHOW smlar.threshold;
 smlar.threshold
-----------------
 0.6
(1 row)

-- Test similarity (returns TRUE or FALSE)
SELECT '{3,2}'::int[] % '{3,2,1}'::int[];

Funções e operadores

Função ou operador

Descrição

float4 smlar(anyarray, anyarray)

Calcula a similaridade entre dois arrays do mesmo tipo de dado.

float4 smlar(anyarray, anyarray, bool useIntersect)

Determina a similaridade de dois arrays de um tipo composto personalizado (pares de elemento e peso). Defina useIntersect como TRUE para incluir apenas elementos sobrepostos ou como FALSE para considerar todos os elementos. Crie o tipo composto com: CREATE TYPE type_name AS (element_name anytype, weight_name FLOAT4);

float4 smlar(anyarray a, anyarray b, text formula)

Obtém a similaridade por meio de uma fórmula customizada. Variáveis predefinidas: N.i (contagem da interseção), N.a (elementos únicos no array a) e N.b (elementos únicos no array b).

anyarray % anyarray

Retorna TRUE quando a similaridade dos dois arrays excede smlar.threshold. Caso contrário, devolve FALSE.

text[] tsvector2textarray(tsvector)

Converte um valor tsvector em um array text[].

anyarray array_unique(anyarray)

Ordena e remove elementos duplicados do array.

float4 inarray(anyarray, anyelement)

Devolve 1.0 se o elemento existir no array; senão, retorna 0.

float4 inarray(anyarray, anyelement, float4, float4)

Fornece o terceiro argumento caso o elemento esteja presente no array ou o quarto argumento na ausência dele.

Parâmetros

Configure os parâmetros usando o comando SET do PostgreSQL ou no arquivo postgresql.conf.

Parâmetros gerais

Parâmetro

Tipo

Padrão

Descrição

smlar.threshold

FLOAT

Pontuação mínima de similaridade para que o operador % retorne TRUE.

smlar.persistent_cache

BOOL

Define se as estatísticas globais em cache devem ser armazenadas em memória independente de transação.

smlar.type

STRING

consine

Algoritmo de similaridade utilizado. Valores válidos: consine, tfidf e overlap.

Parâmetros de TF-IDF

Estes parâmetros aplicam-se somente quando smlar.type = 'tfidf'.

Parâmetro

Tipo

Padrão

Descrição

smlar.stattable

STRING

Nome da tabela que armazena estatísticas no nível da coleção. Crie-a com: CREATE TABLE table_name (value data_type UNIQUE, ndoc int4 NOT NULL CHECK (ndoc>0));

smlar.tf_method

STRING

n

Método de cálculo da frequência do termo (TF). Opções válidas: n (contagem simples), log (1 + log(n)) e const (1).

smlar.idf_plus_one

BOOL

FALSE

Fórmula da frequência inversa de documentos (IDF). O valor FALSE aplica log(d/df), enquanto TRUE utiliza log(1 + d/df).

Referências