OpenSearch は検索に重点を置いており、SQL 機能を実装するための検索句を提供しています。 OpenSearch の検索句と SQL 文は異なる構文を使用しますが、同様の検索パフォーマンスを実現できます。以下のセクションでは、OpenSearch で主要な SQL 機能を実装する方法について詳しく説明します。
一般的な句の比較
ほとんどの開発者は SQL 文に精通しています。このセクションでは、SQL 文の実装ロジックに基づいて、OpenSearch が以下の SQL 機能をどのように実装するかについて説明します。
(1) FROM (2) ON (3) JOIN (4) WHERE (5) GROUP BY (6) WITH {CUBE | ROLLUP} (7) HAVING (8) SELECT (9) DISTINCT (10) ORDER BY (11) LIMIT
1. FROM:
SQL 文では、FROM の後にテーブル名またはデータセット名が続きます。 FROM 句は、複雑なネスト構造に関係なく、データ部分をクエリするために使用されます。
OpenSearch はアプリケーションをテーブル単位として使用し、アプリケーションはビジネスロジックの種類に対応します。したがって、検索を実行するときは、テーブル名を指定する必要はありません。 Java 用 OpenSearch SDK などの SDK で、ホスト、アプリケーション名、AccessKey ID、および AccessKey シークレットのみを指定する必要があります。詳細については、「検索機能を実装するためのデモコード」をご参照ください。
2. ON および JOIN:
SQL 文では、JOIN 句は 2 つのテーブルまたはデータセットを結合するために使用されます。 ON 句は、テーブルの結合を制限するために使用されます。つまり、ON 句は、2 つのテーブルを結合する前に満たす必要がある条件を指定します。
OpenSearch では、アプリケーションの作成プロセスでアプリケーションスキーマを定義するときに JOIN 句が設定されます。 JOIN 句が設定されると、OpenSearch にインポートされたデータが結合されてワイドテーブルが作成されます。実装ロジックの詳細については、「OpenSearch でのデータの同期方法」をご参照ください。 OpenSearch では、データソースを設定するときに、ON 句を使用して要件を満たさないテーブルエントリを除外できます。
3. WHERE:
SQL 文では、WHERE 句はフィルタ条件に似ており、要件を満たすデータを保持するために使用されます。
OpenSearch では、query 句または filter 句を使用してデータをフィルタリングできます。 query 句は転置インデックスを使用して検索を実行し、高い検索効率を実現できます。ただし、query 句は filter 句ほど柔軟ではありません。 query 句で式を使用して計算を実行することはできません。 filter 句はフォワードインデックスを使用して検索を実行します。 filter 句を使用した検索効率は、query 句を使用した検索効率よりも低くなります。ただし、filter 句で式と関数を使用して計算を実行できます。したがって、filter 句はより多様なシナリオに適応できます。
4. GROUP BY:
SQL 文では、GROUP BY 句は広く使用されており、複雑です。簡単に言うと、GROUP BY 句は、COUNT、SUM、MAX、MIN、AVG などの関数に基づいてグループ化と統計収集を行うために使用されます。
OpenSearch では、aggregate 句を使用して、GROUP BY 句と同じ効果を実現できます。
5. WITH および HAVING: OpenSearch は WITH 句と HAVING 句をサポートしていません。これらの句は、戻り結果が取得された後に要件に基づいて実装できます。
6. SELECT:
SQL 文では、SELECT 句は各データエントリで返されるフィールドを指定するために使用されます。
OpenSearch では、OpenSearch コンソールを使用するか、デフォルト表示フィールドと fetch_fields パラメーターを設定して、各データエントリで返されるフィールドを指定できます。
7. DISTINCT:
SQL 文では、DISTINCT 句はフィールド値を比較することで重複値を削除するために使用されます。
OpenSearch では、distinct 句を使用して重複値を削除できます。さらに、distinct 句を使用してフィールドを分散させることができます。これは、上位 N 件の結果を取得するためにデータをグループ化する概念に似ています。
8. ORDER BY:
SQL 文では、ORDER BY 句はフィールドまたは式によって結果を昇順または降順にソートするために使用されます。
OpenSearch では、sort 句を使用して、フィールドまたはドキュメントスコアで結果をソートできます。さらに、アルゴリズムモデルを使用してドキュメントに介入し、ドキュメントのスコアとフィールド値に基づいてドキュメントをソートできます。ソートポリシーの詳細については、「ソート式」をご参照ください。
9. LIMIT:
SQL 文では、LIMIT 句はページングを実装するために使用されます。 start と hit の 2 つのパラメーターが関係します。 start パラメーターは、ページングを開始する特定のエントリを指定します。 hit パラメーターは、返されるエントリの特定の数を指定します。
OpenSearch では、config 句を使用して start パラメーターと hit パラメーターを設定し、ページングを実装できます。
その他の句の比較
1. LIKE および NOT LIKE:
SQL 文では、LIKE 句と NOT LIKE 句はあいまい一致を実装するために使用されます。たとえば、like '%Beijing%' を使用して、値に 'Beijing' が含まれるフィールドを取得できます。
OpenSearch では、query 句を使用してドキュメントを取得できます。実装ロジックは、フィールド値を分析し、分析後に取得された項目と一致する値を返すことです。 OpenSearch はまた、様々な強力なアナライザを提供しており、LIKE 句と同じ効果を実現するために使用できます。さらに、これらのアナライザは LIKE 句よりも効率的に動作できます。 query 句で論理演算子 ANDNOT を使用して、NOT LIKE 句と同じ効果を実現できます。
2. IN:
SQL 文では、WHERE 句で IN 演算子を使用して複数の値を指定できます。例: WHERE column_name IN (value1, value2, ...);。
OpenSearch では、filter 句で in/notin 関数を使用して、SQL 文の IN 演算子と同じ効果を実現できます。