Todos os produtos
Search
Central de documentação

PolarDB:smlar

Última atualização: Sep 02, 2026

Em cenários de e-commerce e mecanismos de busca, o cálculo de similaridade em grandes volumes de dados representa um desafio técnico crítico. Implementações simples de similaridade costumam ser lentas e consomem muitos recursos. O smlar é uma extensão de terceiros open-source para PolarDB for PostgreSQL que oferece funções para computação eficiente de similaridade no banco de dados, além de operadores compatíveis com índices GiST e GIN. A extensão smlar suporta todos os tipos de dados nativos do PostgreSQL.

Pré-requisitos

O PolarDB for PostgreSQL suporta as seguintes versões:

  • PostgreSQL 16 (versão secundária 2.0.16.9.6.0 ou posterior)

  • PostgreSQL 14 (versão secundária 2.0.14.5.1.0 ou posterior)

  • PostgreSQL 11 (versão secundária 2.0.11.9.28.0 ou posterior)

Nota

Visualize a versão secundária do mecanismo no console ou execute a instrução SHOW polardb_version;. Se a versão secundária do mecanismo não atender aos requisitos, atualize-a.

Uso

  1. Instale a extensão.

    CREATE EXTENSION smlar;
    Nota

    A extensão smlar entra em conflito com a extensão rum no operador %. Portanto, não crie essas duas extensões no mesmo schema.

  2. Execute os comandos a seguir para calcular a similaridade entre dois arrays.

    • Resultado retornado:

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

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

      Para obter mais informações sobre outras funções, consulte Funções e operadores.

  3. Desinstale a extensão.

    DROP EXTENSION smlar;

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. Os arrays devem ter o mesmo tipo.

float4 smlar(anyarray, anyarray, bool useIntersect)

Calcula a similaridade entre dois arrays de um tipo composto personalizado (elemento, peso). O parâmetro useIntersect define se apenas os elementos sobrepostos ou todos os elementos participam do cálculo.

Nota

O tipo composto tem a seguinte definição:

CREATE TYPE type_name AS (element_name anytype, weight_name FLOAT4);

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

Calcula a similaridade entre dois arrays do mesmo tipo de dado por meio de uma fórmula personalizada. Os arrays devem ter o mesmo tipo. Variáveis predefinidas da fórmula:

  • N.i: quantidade de elementos idênticos nos dois arrays (interseção).

  • N.a: quantidade de elementos únicos no primeiro array.

  • N.b: quantidade de elementos únicos no segundo array.

anyarray % anyarray

Retorna TRUE se a similaridade entre os dois arrays ultrapassar o limiar. Caso contrário, retorna FALSE.

text[] tsvector2textarray(tsvector)

Converte um valor tsvector em um array de texto.

anyarray array_unique(anyarray)

Ordena o array e remove elementos duplicados.

float4 inarray(anyarray, anyelement)

Retorna 1.0 se o elemento existir no array. Caso contrário, retorna 0.

float4 inarray(anyarray, anyelement, float4, float4)

Retorna o terceiro argumento se o elemento existir no array. Caso contrário, retorna o quarto argumento.

Parâmetros configuráveis

Parâmetro

Descrição

smlar.threshold FLOAT

Limiar de similaridade usado pelo operador de porcentagem (%) para determinar se dois arrays são semelhantes.

smlar.persistent_cache BOOL

Define se o cache de estatísticas globais fica armazenado em memória independente das transações.

smlar.type STRING

Fórmula de similaridade. Tipos válidos: cosine (padrão), tfidf e overlap.

smlar.stattable STRING

Nome da tabela que armazena estatísticas no nível de coleção. Definição da tabela:

CREATE TABLE table_name (
  value   data_type UNIQUE,
  ndoc    int4 (or bigint)  NOT NULL CHECK (ndoc>0)
);

smlar.tf_method STRING

Método de cálculo da frequência do termo (TF). Valores válidos:

  • n: contagem simples (padrão).

  • log: 1 + log(n).

  • const: frequência igual a 1.

smlar.idf_plus_one BOOL

Método de cálculo da frequência inversa de documentos (IDF). Valores válidos:

  • FALSE (padrão): log(d / df).

  • TRUE: log(1 + d / df).

Referências

Para obter mais informações sobre a extensão smlar, consulte: