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

OpenSearch:注意事項

最終更新日:Aug 22, 2026

ユーザー定義関数 (UDF) の使用上の注意です。

UDF のリスト

関数

説明

contain

フィールド値が指定されたセットに含まれているかどうかをチェックします。単一値フィールドと複数値フィールドをサポートします。

notcontain

フィールド値が指定されたセットから除外されているかどうかをチェックします。単一値フィールドと複数値フィールドをサポートします。

MATCHINDEX

指定された条件に基づいて、指定されたフィールドの転置インデックスをクエリします。

QUERY

HA3 本来のクエリ構文を使用して、指定された条件に基づいて転置インデックスをクエリします。

hashcombine

複数の INT64 値を単一の INT64 値にマージします。

rangevalue

範囲に基づいてフィールド値をマッピングします。

range

フィールド値が指定された区間に含まれているかどうかをチェックします。

normalizescore

フィールド値を正規化します。

クエリの例

テーブル内の全データのクエリ

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(INT a, const string b)
    boolean contain(LITERAL a, const string b)
    boolean contain(INT_ARRAY a, const string b)
    boolean contain(LITERAL_ARRAY a, const string b)
  • 説明:

単一値または複数値のフィールド a に、b で指定された内容が含まれているかどうかをチェックします。

  • パラメーター:

    パラメーター a: INT、LITERAL、INT_ARRAY、または LITERAL_ARRAY 型の入力。

    パラメーター b: | で区切られた定数文字列式。いずれか 1 つの項目に一致すればよいことを示します。

  • 戻り値:

    パラメーター a にパラメーター b で指定されたセットが含まれているかどうかを、ブール値で返します。

  • 例:

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(INT a, const string b)
    boolean notcontain(LITERAL a, const string b)
    boolean notcontain(INT_ARRAY a, const string b)
    boolean notcontain(LITERAL_ARRAY a, const string b)
  • 説明:

    単一値または複数値のフィールド a が、b で指定された内容に 含まれていない かどうかをチェックします。

  • パラメーター:

    パラメーター a: INT、LITERAL、INT_ARRAY、または LITERAL_ARRAY 型の入力。

    パラメーター b: | で区切られた定数文字列式。どの項目にも一致しないことを示します。

  • 戻り値:

    パラメーター 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

  • プロトタイプ:

    boolean MATCHINDEX(const string a, const string b)
  • 説明:

    フィールド a の転置インデックスに対し、b で指定された内容が 含まれている かどうかをチェックします。

    WHERE 条件でのみ使用され、インデックステーブルの取得フェーズで転置インデックスを使用したクエリを高速化します。

  • パラメーター:

    パラメーター a: 転置インデックスが作成されたフィールド名を表す定数文字列。

    パラメーター b: 検索文字列を表す定数文字列。

パラメーター b は単一の文字列としてクエリできます。

  • 戻り値:

    フィールド 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)
  • 説明:

    フィールド a に b で指定された内容が 含まれている かどうかをチェックし、自動的なトークン化と取得機能を提供します。

    SQL モードで HA3 エンジンのネイティブクエリ構文 (HA3 クエリ構文) をサポートします。

    WHERE 条件でのみ使用され、インデックステーブルの取得フェーズで転置インデックスを使用したクエリを高速化します。

  • パラメーター:

    パラメーター a: デフォルトのインデックスフィールドとして使用するフィールド名を表す定数文字列。

    パラメーター b: HA3 クエリ構文のクエリ文字列を表す定数文字列。

クエリ解析時に解釈され、範囲インデックスにも使用できます。

  • 戻り値:

    フィールド a にパラメーター b で指定された内容が 含まれている かどうかを、ブール値で返します。

  • 例:

  • QUERY を使用して、title に "Huawei phone" が含まれるエントリをクエリします。

  • SELECT nid, price, brand, size FROM phone WHERE QUERY(title, 'Huawei phone')
    USE_TIME: 0.034, ROW_COUNT: 1
    
    ------------------------------- TABLE INFO ---------------------------
                     nid |               price |               brand |                size |
                       2 |                4388 |              Huawei |                 5.5 |
  • 複合条件を使用して、title に "Huawei phone" または "OPPO phone" が含まれるエントリを取得します。

  • SELECT nid, price, brand, size FROM phone 
       WHERE QUERY(title, 'Huawei phone OR OPPO phone')
    USE_TIME: 0.03, ROW_COUNT: 2
    
    ------------------------------- TABLE INFO ---------------------------
                     nid |               price |               brand |                size |
                       2 |                4388 |              Huawei |                 5.5 |
                       4 |                2999 |                OPPO |                 5.5 |
  • 注:

  • QUERY UDF のパラメーター 2 は、HA3 クエリ構文パーサーによって解析されます。HA3 クエリ構文では、パラメーター 2 が定数文字列の場合、HA3 クエリに渡される際に先頭と末尾の単一引用符が削除される点にご注意ください。たとえば、QUERY(title, 'Huawei phone OPPO phone') は、HA3 クエリの query=Huawei phone OPPO phone と同等です。HA3 のクエリ文字列で query='Huawei phone' AND 'OPPO phone' のように引用符を使用する場合、QUERY UDF では QUERY(title, '''Huawei phone'' AND ''OPPO phone''') と記述します。SQL 記述における定数文字列の使用上の注意については、「制限」の「定数文字列」セクションをご参照ください。

  • よくある間違い:

  • エラーの種類

    誤った形式

    正しい形式

    構文エラーにより、クエリが結果を返しません

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

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

rangevalue

  • プロトタイプ:

    float rangevalue(float v, string desc)
  • 説明:

連続値を離散値にマッピングします。

  • パラメーター:

    パラメーター v: 連続値を持つフィールド。

    パラメーター desc: マッピングルール。

  • 戻り値:

    マッピング後の離散値。

  • 例:

    rangevalue を使用して price 値をマッピングします。価格が 1000 以下の値は 1.0 に、1000 より大きく 5000 以下の値は 2.0 にマッピングされます。指定されていないその他の値は、元の価格を保持します。

    SELECT rangevalue(price,'(,1000]:1.0;(1000,5000]:2.0') FROM phone;

range

  • プロトタイプ:

    boolean range(INT 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 文字列の先頭に "!" 記号を付けて、意図した間隔を否定することもサポートしています。

  • 例:

    range の使用

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

    注: range は SQL の予約語であるため、エスケープする必要があります。

normalizescore

  • プロトタイプ:

    double normalizescore(INT v, const double defaultScore)
    double normalizescore(FLOAT v, const double defaultScore)
    double normalizescore(DOUBLE v, const double defaultScore)
  • 説明:

入力フィールド v を double 型に変換して正規化します。フィールドが初期化されている場合は元の値が返され、初期化されていない場合は defaultScore が返されます。

  • パラメーター:

    パラメーター v: フィールド。単一値の数値型がサポートされています。

    パラメーター defaultScore: double 型に変換可能な文字列定数である必要があります。

  • 戻り値:

    v が初期化されている場合は元の値が返され、初期化されていない場合は defaultScore が返されます。

  • 例:

price フィールドを持つ 3 つのドキュメントがあり、元の内容は次のとおりです。
doc1: price = 1.0
doc2: price = (未初期化)
doc3: price = 2.0

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

USE_TIME: 32.141 ms, ROW_COUNT: 3

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