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

OpenSearch:OpenSearch における SQL 文と検索句の構文の違いは何ですか?

最終更新日:Apr 23, 2025

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 演算子と同じ効果を実現できます。