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)
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
-
Instale a extensão.
CREATE EXTENSION smlar;NotaA extensão smlar entra em conflito com a extensão rum no operador
%. Portanto, não crie essas duas extensões no mesmo schema. -
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)NotaPara obter mais informações sobre outras funções, consulte Funções e operadores.
-
-
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: |
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:
|
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: |
smlar.tf_method STRING | Método de cálculo da frequência do termo (TF). Valores válidos:
|
smlar.idf_plus_one BOOL | Método de cálculo da frequência inversa de documentos (IDF). Valores válidos:
|
Referências
Para obter mais informações sobre a extensão smlar, consulte: