組み込み関数とサードパーティのユーザー定義関数 (UDF) を使用すると、クエリで高度なフィルタリング、インデックス取得、距離計算、スコアの正規化を実行できます。
組み込み UDF
複合型関数
|
関数名 |
説明 |
バージョン |
|
フィールド値が指定されたコレクションに含まれているかどうかを確認します。 |
ALL |
|
|
フィールド値が指定されたコレクションに含まれていないかどうかを確認します。 |
ALL |
|
|
指定した条件に基づき、指定フィールドの転置インデックスをクエリします。 |
ALL |
|
|
指定した条件に基づき、転置インデックスをクエリします。この関数は HA3 のネイティブクエリ構文を使用します。 |
ALL |
|
|
経度と緯度の座標ペア間の距離を計算します。 |
>= 3.7.5 |
|
|
フィールド値が指定された数値範囲内にあるかを確認します。 |
>= 3.9.0 |
|
|
フィールド値を正規化し、 |
>= 3.9.0 |
例
取得の例
-
テーブルからすべてのコンテンツを取得します。
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 は、パラメータ 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:定数文字列の式です。複数の値を指定する場合は、パイプ文字 (|) で区切ります。いずれの値も一致しない場合に条件を満たします。
-
戻り値
ブール値を返します。true は、パラメータ 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:転置インデックスが作成されるフィールドを指定する定数文字列です。
パラメータ b:検索するコンテンツを含む定数文字列です。
パラメータ b は、クエリ用の文字列全体として使用することも、空間ベクトルインデックス に使用することもできます。
パラメータ c:任意のパラメータです。b 内のコンテンツをトークン化するためのトークナイザーやストップワードなどの設定を指定します。
設定は次のキーワードを使用して構成します。詳細については、「付録」をご参照ください。
コロン (:) とカンマ (,) を使用して項目を区切ります。
-
global_analyzer
-
specific_index_analyzer
-
no_token_indexes
-
tokenize_query
-
remove_stopwords
-
default_op
-
戻り値
ブール値を返します。true は、フィールド 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 で指定したコンテンツが含まれているかどうかを確認します。この関数は自動トークン化と取得機能を提供します。
この関数は SQL モードで、HA3 エンジンのネイティブクエリ構文である ha3_query 句 をサポートします。
この関数は WHERE 句でのみ使用でき、転置インデックスを使用してインデックステーブルからの取得を高速化します。
-
パラメータ
パラメータ a:デフォルトのインデックスフィールドを指定する定数文字列です。詳細については、「default_index」をご参照ください。
パラメータ b:検索するコンテンツを含む定数文字列です。
このパラメータは解析のためにクエリに連結され、範囲インデックスに使用できます。
パラメータ c:任意のパラメータです。b 内のコンテンツをトークン化するためのトークナイザーやストップワードなどの設定を指定します。
項目はコロン (:) とカンマ (,) を使用して区切ります。
設定は次のキーワードを使用して構成します:
-
global_analyzer
-
specific_index_analyzer
-
no_token_indexes
-
tokenize_query
-
remove_stopwords
-
default_op
-
戻り値
ブール値を返します。true は、フィールド 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 |
-
default_opなどの使用方法を指定するには、区切り文字として:を使用します。
SELECT nid, price, brand, size FROM phone
WHERE QUERY('title', 'Huawei phone OPPO phone', 'default_op:OR,remove_stopwords:true')
-
注:
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''') と記述する必要があります。
-
一般的なエラー
|
エラータイプ |
誤った形式 |
正しい形式 |
|
構文エラーにより結果が返されない |
QUERY('pidvid', '123:456') |
QUERY('pidvid', '"123:456"') |
sphere_distance
-
プロトタイプ
double sphere_distance(LOCATION point, double longitude, double latitude)
-
説明
指定した経度と緯度、および取得したドキュメントの位置情報の間の距離を計算します。
-
パラメータ
パラメータ point:単一値を含む LOCATION データ型の列です。
パラメータ longitude:経度を指定します。
パラメータ latitude:緯度を指定します。
-
戻り値
2 点間の地表上の球面距離を返します。
-
例:
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 の先頭に感嘆符 (!) を付けます。
-
例
range の使用
SELECT nid FROM phone where range(price, "[1000, 4000)")
SELECT nid FROM phone where range(price, "![1000, 4000)")
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 が初期化されている場合は元の値を返します。それ以外の場合は 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.141ms, ROW_COUNT: 3
------------------------------- TABLE INFO ---------------------------
normalized_score(double) |
1.0 |
1000.0 |
2.0 |
付録
トークナイザーの説明
次のパラメータは、MATCHINDEX 関数と QUERY 関数のトークン化の動作を構成します。
クエリのグローバル トークナイザーを指定します。指定したトークナイザーは、スキーマで定義されたトークナイザーを上書きします。指定するトークナイザーは analyzer.json ファイルで構成されている必要があります。
クエリ時にインデックスで使用するトークナイザーを指定します。このトークナイザーは、グローバルおよびスキーマのトークナイザーを上書きします。
クエリ内でトークン化の対象外とするインデックスを指定します。正規化やストップワードの削除など、その他の処理は引き続き適用されます。
インデックスはセミコロン (;) で区切ります。
-
tokenize_query:
true または false。クエリをトークン化するかどうかを指定します。このパラメータは、QUERY UDF でトークナイザーが指定されている場合は無視されます。
デフォルト値は true です。
-
remove_stopwords:
true または false。トークナイザーに構成されているストップワードを削除するかどうかを指定します。
デフォルト値は true です。
トークン化されたクエリ内でトークンを接続するための、デフォルトの演算子 (AND または OR) を指定します。デフォルトの動作はbiz で設定されます。
サードパーティ UDF
複合型関数
|
関数名 |
説明 |
バージョン |
|
type cast |
型キャスト |
ALL |