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

OpenSearch:概要

最終更新日:Dec 28, 2024

組み込みユーザー定義関数 (UDF)

複雑な関数

関数

説明

バージョン

contain

指定されたフィールドの特定の値が、指定された値セットに含まれている場合、true を返します。

すべて

notcontain

指定されたフィールドの特定の値が、指定された値セットに含まれていない場合、true を返します。

すべて

MATCHINDEX

指定されたフィールドの転置インデックスが指定された条件を満たす場合、true を返します。

すべて

QUERY

指定された条件に基づいて転置インデックスを返します。この関数の構文は、HA3 でサポートされている query 句の構文と同じです。

すべて

sphere_distance

指定された経度と緯度に基づいて距離値を計算します。

V3.7.5 以降

range

V3.9.0 以降

normalizescore

V3.9.0 以降

サンプルクエリ

  • phone テーブルの全データをクエリする

SELECT nid, price, brand, size FROM phone ORDER BY nid LIMIT 1000 

USE_TIME: 0.881, ROW_COUNT: 10

------------------------------- TABLE INFO ---------------------------
                 nid |               price |               brand |                size |
                   1 |                3599 |              Huawei |                 5.9 |
                   2 |                4388 |              Huawei |                 5.5 |
                   3 |                 899 |              Xiaomi |                   5 |
                   4 |                2999 |                OPPO |                 5.5 |
                   5 |                1299 |               Meizu |                 5.5 |
                   6 |                 169 |               Nokia |                 1.4 |
                   7 |                3599 |               Apple |                 4.7 |
                   8 |                5998 |               Apple |                 5.5 |
                   9 |                4298 |               Apple |                 4.7 |
                  10 |                5688 |             Samsung |                 5.6 |

contain

  • プロトタイプ

boolean contain(int32 a, const string b)
boolean contain(int64 a, const string b)
boolean contain(string a, const string b)
boolean contain(ARRAY<int32> a, const string b)
boolean contain(ARRAY<int64> a, const string b)
boolean contain(ARRAY<string> a, const string b)
  • 説明

この関数を使用すると、a フィールドの値が b 値セットに含まれているかどうかを判断できます。

  • パラメーター

a: データテーブル内のフィールド。指定するフィールドは、INT32、INT64、または STRING 型の単一値フィールドまたは複数値フィールドにすることができます。

b: 定数文字列。指定した定数は縦棒 (|) で区切ります。値が指定された定数のいずれかと一致する場合、この関数は true を返します。

  • 戻り値

この関数は BOOLEAN 型の値を返します。true の値は、a フィールドの値が b 値セットに含まれていることを示します。false の値は、a フィールドの値が b 値セットに含まれていないことを示します。

次のステートメントでは、contain 関数を使用して、nid フィールドの値が 1、2、または 3 である行のデータエントリをクエリします。

SELECT nid, price, brand, size FROM phone WHERE contain(nid, '1|2|3') ORDER BY nid LIMIT 100

USE_TIME: 0.059, ROW_COUNT: 3

------------------------------- TABLE INFO ---------------------------
                 nid |               price |               brand |                size |
                   1 |                3599 |              Huawei |                 5.9 |
                   2 |                4388 |              Huawei |                 5.5 |
                   3 |                 899 |              Xiaomi |                   5 |

notcontain

  • プロトタイプ

boolean notcontain(int32 a, const string b)
boolean notcontain(int64 a, const string b)
boolean notcontain(string a, const string b)
boolean notcontain(ARRAY<int32> a, const string b)
boolean notcontain(ARRAY<int64> a, const string b)
boolean notcontain(ARRAY<string> a, const string b)
  • 説明

この関数を使用すると、a フィールドの値が b 値セットに含まれていないかどうかを判断できます。

  • パラメーター

a: データテーブル内のフィールド。指定するフィールドは、INT32、INT64、または STRING 型の単一値フィールドまたは複数値フィールドにすることができます。

b: 定数文字列。指定した定数は縦棒 (|) で区切ります。値が指定された定数のいずれかと一致する場合、この関数は false を返します。

  • 戻り値

この関数は BOOLEAN 型の値を返します。true の値は、a フィールドの値が b 値セットに含まれていないことを示します。false の値は、a フィールドの値が b 値セットに含まれていることを示します。

次のステートメントでは、notcontain 関数を使用して、nid フィールドの値が 1、2、または 3 ではない行のデータエントリをクエリします。

SELECT nid, price, brand, size FROM phone WHERE notcontain(nid, '1|2|3') ORDER BY nid LIMIT 100

USE_TIME: 0.092, ROW_COUNT: 7

------------------------------- TABLE INFO ---------------------------
                 nid |               price |               brand |                size |
                   4 |                2999 |                OPPO |                 5.5 |
                   5 |                1299 |               Meizu |                 5.5 |
                   6 |                 169 |               Nokia |                 1.4 |
                   7 |                3599 |               Apple |                 4.7 |
                   8 |                5998 |               Apple |                 5.5 |
                   9 |                4298 |               Apple |                 4.7 |
                  10 |                5688 |             Samsung |                 5.6 |

MATCHINDEX

  • プロトタイプ

  • 説明

この関数を使用すると、a フィールドの値に b パラメーターの値が含まれているかどうかを判断できます。この関数を使用して、フィールドのインデックスを取得できます。

この関数は、WHERE 句でのみ使用して、インデックス検索フェーズで転置インデックスを最適化できます。

  • パラメーター

a: STRING 型のフィールド。システムは、指定されたフィールドに基づいて転置インデックスを作成し、クエリを最適化します。

b: STRING 型のキーワード。

b パラメーターの値は、位置インデックスの検索クエリ文字列として使用できます。詳細については、query 句を参照してください。

c: オプション。b パラメーターの値をトークン化するために使用されるアナライザーやストップワードなどの情報を指定できます。

c パラメーターの値には、次のパラメーターを使用できます。パラメーターの詳細については、このトピックの付録セクションを参照してください。

パラメーター名と対応する値の間にコロン (:) を指定し、複数のパラメーターをコンマ (,) で区切る必要があります。

    • global_analyzer

    • specific_index_analyzer

    • no_token_indexes

    • tokenize_query

    • remove_stopwords

    • default_op

  • 戻り値

この関数は BOOLEAN 型の値を返します。true の値は、a フィールドの値に b パラメーターの値が含まれていることを示します。false の値は、a フィールドの値に b パラメーターの値が含まれていないことを示します。

次のステートメントでは、MATCHINDEX 関数を使用して、title フィールドの値に Lens キーワードが含まれる行のデータエントリをクエリします。

SELECT nid, brand FROM phone WHERE MATCHINDEX('title', 'Lens')
------------------------------- TABLE INFO ---------------------------
                 nid |               brand |
                   1 |              Huawei |

QUERY

  • プロトタイプ

boolean QUERY(const string a, const string b)
boolean QUERY(const string a, const string b, const string c)
  • 説明

この関数を使用すると、a フィールドの値に b パラメーターの値が含まれているかどうかを判断できます。システムは、指定されたキーワードを自動的に用語に変換し、クエリを実行します。

この関数は、HA3 でサポートされている SQL ステートメントの query 句の構文をサポートしています。query 句の詳細については、query 句を参照してください。

この関数は、WHERE 句でのみ使用して、インデックス検索フェーズで転置インデックスを最適化できます。

  • パラメーター

a: STRING 型のフィールド。システムは、指定されたフィールドを config 句の default_index パラメーターの値として自動的に使用します。config 句の詳細については、Config 句を参照してください。

b: STRING 型のキーワード。

システムは、ステートメントを最適化し、指定された範囲からデータをクエリした後、b パラメーターの値をステートメントに含めます。

c: オプション。b パラメーターの値をトークン化するために使用されるアナライザーやストップワードなどの情報を指定できます。

パラメーター名と対応する値の間にコロン (:) を指定し、複数のパラメーターをコンマ (,) で区切る必要があります。

c パラメーターの値には、次のパラメーターを使用できます。

  • global_analyzer

  • specific_index_analyzer

  • no_token_indexes

  • tokenize_query

  • remove_stopwords

  • default_op

  • 戻り値

この関数は BOOLEAN 型の値を返します。true の値は、a フィールドの値に b パラメーターの値が含まれていることを示します。false の値は、a フィールドの値に b パラメーターの値が含まれていないことを示します。

  • 次のステートメントでは、QUERY 関数を使用して、title フィールドの値に Huawei キーワードが含まれる行のデータエントリをクエリします。

SELECT nid, price, brand, size FROM phone WHERE QUERY('title', 'Huawei')

USE_TIME: 0.034, ROW_COUNT: 1

------------------------------- TABLE INFO ---------------------------
                 nid |               price |               brand |                size |
                   2 |                4388 |              Huawei |                 5.5 |

  • 次のステートメントでは、Huawei キーワードと OPPO キーワードを使用して、title フィールドの値に Huawei キーワードまたは OPPO キーワードが含まれる行のデータエントリをクエリします。

SELECT nid, price, brand, size FROM phone 
   WHERE QUERY('title', 'Huawei OR OPPO') 

USE_TIME: 0.03, ROW_COUNT: 2

------------------------------- TABLE INFO ---------------------------
                 nid |               price |               brand |                size |
                   2 |                4388 |              Huawei |                 5.5 |
                   4 |                2999 |                OPPO |                 5.5 |

  • 次のステートメントでは、default_op パラメーターが c パラメーターの値に含まれています。パラメーター名と対応する値の間にコロン (:) を指定し、複数のパラメーターをコンマ (,) で区切ることで、c パラメーターの値に複数のパラメーターを含めることができます。

SELECT nid, price, brand, size FROM phone 
   WHERE QUERY('title', 'Huawei OPPO', 'default_op:OR,remove_stopwords:true') 

  • 使用上の注意

この関数の b パラメーターは、HA3 が提供する query 句の構文パーサーによって解析されます。HA3 でサポートされている query 句の構文の詳細については、query 句を参照してください。b パラメーターを定数文字列に設定し、ステートメントを実行してクエリを実行する場合、定数文字列を一重引用符 (') で囲まないでください。たとえば、ステートメントの query=Huawei OPPO 句は、QUERY 関数の WHERE QUERY ('title', 'Huawei OPPO') 条件と同等です。query 句で論理演算子を使用する場合は、各定数を一重引用符 (') で囲むことができます。たとえば、ステートメントの query='Huawei' AND 'OPPO' 句は、QUERY 関数の WHERE QUERY ('title', 'Huawei' AND 'OPPO') 条件と同等です。

  • 一般的なエラー

エラータイプ

誤った形式

正しい形式

関数構文が無効なため、クエリが失敗します。

QUERY('pidvid','123:456')

QUERY('pidvid','"123:456"')

sphere_distance

  • プロトタイプ

double sphere_distance(LOCATION point, double longitude, double latitude)
  • 説明

この関数を使用すると、ドキュメントと、指定された緯度と経度によって決定される場所の間の距離を計算できます。

  • パラメーター

point: LOCATION 型のフィールド。指定されたフィールドの値は、単一値形式である必要があります。

longitude: 場所の経度。

latitude: 場所の緯度。

  • 戻り値

球面距離。

次のステートメントでは、sphere_distance 関数が使用されています。geo フィールドは LOCATION 型の単一値フィールドである必要があります。また、このフィールドに基づいて順方向インデックスが作成されます。

SELECT sphere_distance(geo,127.0,30.0) FROM phone

range

  • プロトタイプ

boolean range(int8 v, const string rangeDesc)
boolean range(uint8 v, const string rangeDesc)
boolean range(int16 v, const string rangeDesc)
boolean range(uint16 v, const string rangeDesc)
boolean range(int32 v, const string rangeDesc)
boolean range(uint32 v, const string rangeDesc)
boolean range(int64 v, const string rangeDesc)
boolean range(uint64 v, const string rangeDesc)
boolean range(float v, const string rangeDesc)
boolean range(double v, const string rangeDesc)
  • 説明

この関数を使用すると、順方向インデックスに対応する v フィールドの値が、rangeDesc パラメーターで指定された範囲内にあるかどうかを判断できます。

  • パラメーター

v: クエリするデータが格納されているフィールド。フィールドは単一値フィールドである必要があります。

rangeDesc: 値の範囲。開区間、閉区間、または半開区間を指定できます。

  • 戻り値

次の表に、この関数の例と対応する戻り値を示します。

戻り値

range(v, "[0, 100]")

0<=v<=100

range(v, "(0, 100)")

0<v<100

range(v, "[0, 100)")

0<=v<100

range(v, "(0, 100]")

0<v<=100

range(v, "(0,)")

range(v, "(0,]")

0<v

range(v, "[0,)")

range(v, "[0,]")

0<=v

range(v, "(,100)")

range(v, "[,100)")

v<100

range(v, "(,100]")

range(v, "[,100]")

v<=100

range(v, "(,)")

range(v, "[,]")

range(v, "[,)")

range(v, "(,]")

true

rangeDesc パラメーターの値の前に ! を付けると、指定された値の範囲に対して NOT 演算が実行されます。

次のステートメントでは、range 関数が使用されています。

SELECT nid FROM phone where range(price,"(127.0,30.0)")
SELECT nid FROM phone where range(price,"!(127.0,30.0)")

normalizescore

  • プロトタイプ

double normalizescore(int8 v, const string defaultScore)
double normalizescore(uint8 v, const string defaultScore)
double normalizescore(int16 v, const string defaultScore)
double normalizescore(uint16 v, const string defaultScore)
double normalizescore(int32 v, const string defaultScore)
double normalizescore(uint32 v, const string defaultScore)
double normalizescore(int64 v, const string defaultScore)
double normalizescore(uint64 v, const string defaultScore)
double normalizescore(float v, const string defaultScore)
double normalizescore(double v, const string defaultScore)
  • 説明

この関数を使用すると、v フィールドの値を DOUBLE 型の値に正規化できます。値が初期化されている場合、関数は入力値を返します。値が初期化されていない場合、関数は defaultScore パラメーターの値を返します。

  • パラメーター

v: 正規化するデータが格納されているフィールド。フィールドは単一値フィールドである必要があります。

defaultScore: DOUBLE 型の文字列に変換できる定数文字列。

  • 戻り値

v フィールドの値が初期化されている場合、関数は入力値を返します。v フィールドの値が初期化されていない場合、関数は defaultScore パラメーターの値を返します。

次のステートメントでは、normalizescore 関数を使用して、doc1、doc2、および doc3 の price フィールドを正規化します。
doc1: price=1.0
doc2: price= (初期化されていません)
doc3: price=2.0

実行
select normalizescore(price, "1000.0") as normalized_score from phone

USE_TIME: 32.141ms, ROW_COUNT: 2

------------------------------- TABLE INFO ---------------------------
          normalized_score(double) |
                            1.0    |
                            1000.0 |
                            2.0.   |

付録

アナライザーの設定

MATCHINDEX や QUERY などの関数を使用する場合、次のパラメーターを設定してアナライザーを指定できます。

グローバルアナライザーを指定します。このパラメーターで指定されたアナライザーは、スキーマで指定したアナライザーよりも優先順位が高くなります。指定されたアナライザーは、analyzer.json ファイルに含まれている必要があります。

指定されたフィールドのアナライザーを指定します。このパラメーターで指定されたアナライザーは、global_analyzer パラメーターで指定したアナライザーとスキーマで指定したアナライザーよりも優先順位が高くなります。

システムが用語に変換しないようにするフィールドを指定します。このパラメーターの設定は、正規化やストップワードの削除など、指定されたフィールドの値に対して実行される他の操作には影響しません。

複数のフィールドはセミコロン (;) で区切ります。

  • tokenize_query

true: 検索クエリを用語に変換します。false: 検索クエリを用語に変換しません。QUERY UDF を指定するときにアナライザーを設定した場合、このパラメーターは有効になりません。

デフォルト値は true です。

  • remove_stopwords

true: ストップワードを削除します。false: ストップワードを削除しません。アナライザーを設定するときにストップワードを指定できます。

デフォルト値は true です。

デフォルトのアナライザーを使用して検索クエリをトークン化した後に返される用語間の論理関係を指定します。有効な値: AND および OR。biz を設定するときにデフォルトの演算子を指定できます。biz の設定方法については、biz の設定を参照してください。

サードパーティ製サポート UDF

複雑な関数

関数

説明

バージョン

型キャスト

値をあるデータ型から別のデータ型に変換します。

すべて