すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:smlarエクステンションを使用する

最終更新日:Nov 12, 2024

このトピックでは、smlar拡張を使用して、同じデータ型の2つの配列間の類似度を計算する方法について説明します。

前提条件

  • RDSインスタンスはPostgreSQL 10以降のバージョンを実行します。

    説明

    この拡張機能は、PostgreSQL 17を実行するApsaraDB RDS for PostgreSQLインスタンスではサポートされていません。

  • RDSインスタンスのメジャーエンジンバージョンが要件を満たしているが、拡張機能がまだサポートされていない場合、RDSインスタンスのマイナーエンジンバージョンが更新されます。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。

背景情報

smlar拡張は、同じデータ型の2つの配列間の類似性を計算するための複数の関数を提供します。 また、類似度計算方法を制御するパラメータも提供する。 すべての組み込みデータ型がサポートされています。

機能説明

  • float4 smlar(anyarray、anyarray)

    同じデータ型の2つの配列間の類似度を計算します。

  • float4 smlar(anyarray, anyarray, bool useIntersect)

    複合データ型の2つの配列間の類似度を計算します。 複合データ型は次のように定義されます。

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

    useIntersectパラメーターがtrueに設定されている場合、重複する要素を含む部分のみが計算されます。 useIntersectパラメーターがfalseに設定されている場合、すべての要素が計算に使用されます。

  • float4 smlar( anyarray a, anyarray b, テキスト式)

    同じデータ型の2つの配列間の類似度を計算します。 配列は、数式パラメータによって指定されます。

    数式の定義済み変数は次のとおりです。

    • N.i: 2つの配列の共通要素の数。

    • N.a: 配列a内の別個の要素の数。

    • N.b: 配列b内の個別要素の数。

  • float4 set_smlar_limit(float4)

    smlar.thresholdパラメーターを設定します。

  • float4 show_smlar_limit()

    smlar.thresholdパラメーター値を表示します。

  • anyarray % anyarray

    配列間の類似度がsmlar.thresholdパラメーター値より大きい場合はtrueを返します。 それ以外の場合、関数はfalseを返します。

  • tsvector2textarray(tsvector) text[]

    tsvector型をtext型に変換します。

  • anyarray array_unique(anyarray)

    配列内の要素 (重複要素を除く) を並べ替えます。

  • float4 inarray(anyarray, anyelement)

    anyelementパラメーター値がanyarrayパラメーター値に存在する場合は1を返します。 それ以外の場合、関数はfalseを返します。 0 です。

  • float4 inarray(anyarray, anyelement, float4, float4)

    anyelementがanyarrayに存在する場合、3番目のパラメーター値を返します。 それ以外の場合、関数は4番目のパラメーター値を返します。

パラメーターの説明とサポートされるデータ型の詳細については、「smlar」をご参照ください。

拡張機能を使用するUse the extension

  • インスタンスに接続したら、次のステートメントを実行してsmlar拡張機能を作成します。

    testdb=> create extension smlar;
  • 次のステートメントを実行して、smlarの基本機能を使用します。

    testdb=> SELECT smlar('{1,4,6}'::int[], '{5,4,6}' );
      smlar   
    ----------
     0.666667
    (1 row)
    testdb=> SELECT smlar('{1,4,6}'::int[], '{5,4,6}', 'N.i / sqrt(N.a * N.b)' );
      smlar   
    ----------
     0.666667
    (1 row)
  • 次のステートメントを実行してsmlarを削除します。

    testdb=> drop extension smlar;