OpenSearch のクエリ: Lucene とクエリ DSL

DynoTable は、OpenSearch の 2 つのクエリ言語のどちらでも OpenSearch のクエリを実行します: 検索ボックスでは Lucene のクエリ構文、クエリエディタでは JSON のクエリ DSL です。フィルターピルと時間範囲で、どちらも絞り込めます。

インデックスはテーブルと同じくタブで開きます。グリッド、ページング、選択、クイックビュー、最後まで実行も同じように動きます。ツールバーはアイテムではなくドキュメントを数え、N of M docs と表示します。OpenSearch は検索の正確な総数を返すからです。

インデックスを開く

⌘K を押して、インデックス名の一部を入力します。インデックスはテーブルの下の専用のインデックスグループに並び、それぞれにドキュメント数とサイズが表示されます。プロファイルが複数のドメインやコレクションに届く場合は、各行にターゲットの名前が表示されます。

  • エイリアスの行には エイリアス と、その背後のインデックスが表示されます。インデックスと同じように開けますが、エイリアス経由では編集、一括編集、インポートはできません。それにはインデックス自体を開いてください。
  • 名前を最後まで入力すると、同じ名前のテーブルがなくてもそのインデックスが直接開きます。
  • アプリの起動後に作成したインデックスは、次に ⌘K を開いたときに表示されます。
ビジュアルモードのインデックスタブ:検索ボックスの Lucene クエリ、フィルターピル 1 つ、時間範囲ピル、ドキュメント数を表示したグリッド。
ビジュアルモードのインデックスタブ:検索ボックスの Lucene クエリ、フィルターピル 1 つ、時間範囲ピル、ドキュメント数を表示したグリッド。

グリッド

  • _id が先頭に来ます。 ドキュメントのキーで、パーティションキーと同じ # のマークが付きます。
  • サーバー側で並べ替えます。 列ヘッダーのメニューで昇順または降順に並べ替えます。読み込み済みの行だけでなく、インデックス全体が並べ替えられます。テキストフィールドは keyword サブフィールドで並べ替えます。それがないテキストフィールド、object、nested のフィールドは並べ替えられず、メニューに理由が表示されます。
  • 列を減らせばページも小さく。 列を非表示にすると、表示中のフィールドだけを OpenSearch に求めるため、検索がもう一度実行されます。エディタとエクスポートは引き続きドキュメント全体を読み取ります。
  • 入れ子の値。 object の各フィールドには、オブジェクト名とドットを付けた名前の専用の列ができます。nested フィールドの下のフィールドには専用の列がありません。

行で Space を押すと クイックビュー が開き、↑ / ↓ で行を移動します。ドキュメントを変更するにはエディタで開きます。

行で Space を押して開いた、orders ドキュメントのクイックビュー。
行で Space を押して開いた、orders ドキュメントのクイックビュー。

Lucene で検索する

検索ボックスは Lucene のクエリ構文を受け付けます: status:shipped、 total:[100 TO *]、AND / OR / NOT、ワイルドカード、引用符で囲んだフレーズ。 ↩ で実行し、/ でボックスにカーソルを移します。入力中に構文が色分けされ、ボックス末尾の ? でよく使う 8 つのクエリの形を確認できます。

ボックスは入力に合わせて補完します:

  • 単語だけなら、インデックスのマッピングからフィールド名を候補に出します。
  • field: の後には、そのフィールドが持つ値を候補に出します。数値、日付、 IP のフィールドでは [* TO *] や >= のような範囲の形が先に出ます。
  • 句を書き終えた後には AND、OR、NOT を候補に出します。

Tab で候補を確定します。

フリーテキストの検索は関連度で結果を並べ、各セルで一致したテキストをハイライトします。列で並べ替えると、結果はその並び順に従います。

status: と入力した検索ボックスと、その下に候補として表示されたフィールドの値。
status: と入力した検索ボックスと、その下に候補として表示されたフィールドの値。

フィルターピルと時間範囲

フィルターを追加は 1 つのフィールドに条件を作ります。演算子はテーブルと同じで、比較、between、in、begins_with、contains、そして 2 つの存在チェックです。マッピングが各フィールドの型を決めるので、型の選択はありません。ピルと検索ボックスは組み合わさり、ドキュメントは両方に一致する必要があります。

date フィールドを持つインデックスには、検索ボックスの隣に時間範囲のピルが付きます:

  • 全期間、過去 15 分から過去 1 年間までのプリセット、または 2 か月表示のカレンダーを使うカスタム範囲…。
  • プリセットは検索を実行するたびに前へずれます。さらに読み込むは最初のページが使った範囲を保つので、ページ間で食い違いません。
  • ピルは @timestamp、次に timestamp、次に最初の日付フィールドを使います。日付フィールドが複数あれば、ピル上でフィールドを選びます。
プリセットを開いた時間範囲ピルと、その横の status フィルターピル。
プリセットを開いた時間範囲ピルと、その横の status フィルターピル。

クエリを自分で書く

⌘⇧M を押すか、タブヘッダーで Query を選ぶと、ピルがクエリエディタに切り替わります。どちらの書き方も受け付けます:

  • クエリ DSL: { で始まる JSON。{"match": {"title": "refund"}} のような句だけでも、本文全体でもかまいません。実行されるのは query オブジェクトだけです。size、sort、ページングは DynoTable が受け持ち、それらを含めるとそう伝えます。
  • Lucene: それ以外。検索ボックスと同じ構文です。

エディタは入力に合わせてクエリを確認します: 壊れた JSON、入力ミスと思われる不明な句の名前(修正つき)、マッピングにないフィールド。Run を無効にするのは本当のエラーだけで、ほかは警告です。⌘↩ でクエリを実行し、 ⌘⇧F で JSON を整形します。

エディタの下には、実行したクエリの件数が ~N docs と表示されます。

Query モード:エディタで警告が 1 つ下線表示された JSON DSL クエリ、その下のドキュメント数、グリッドに表示された一致ドキュメント。
Query モード:エディタで警告が 1 つ下線表示された JSON DSL クエリ、その下のドキュメント数、グリッドに表示された一致ドキュメント。

保存したクエリと履歴

  • 保存したクエリには、このインデックスのフィールド名を入れたスタータークエリ(match、multi_match、exists、prefix など)が最初から入っています。自分のクエリもその横に保存できます。
  • 履歴には、このインデックスで実行したすべてのクエリが残ります。1 つを選ぶとエディタに入り、実行するまでは実行されません。

AI を設定していれば、このエディタで AI の自動補完と ⌘⇧K のインライン編集が使えます。

検索をコードとしてコピーする

ツールバーのコードは、実行した検索を REST リクエスト(Dev Tools の表記)、 curl、JavaScript クライアント、Python クライアントとしてエクスポートします。どれもプロファイルの認証情報で署名され、セルフホストのエンドポイントは署名なしのままです。

スニペットに含まれるのは query だけです。ページング、並べ替え、ハイライトはグリッドが付け加えるものなので、スニペットはクラスターの既定のページを返します。同じダイアログでインデックス定義もエクスポートできます。

更新日