You are currently viewing OpenSearch QueryDSLを少し詳しく見てみる その1

OpenSearch QueryDSLを少し詳しく見てみる その1

openSearchで使用できるQueryDSLについて、少し詳しく見ていきたいと思います。
こちらのドキュメントを噛み砕いて紹介できればと思います。
https://opensearch.org/docs/latest/opensearch/query-dsl/index/

今回の記事では上記URLより色々と引用しています。

クエリの種類

QueryDSLは大きく2種類に分けられる。

  • リーフクエリ:特定のフィールドで指定された値を検索します。
  • 複合クエリ:複合クエリは、複数のリーフ句または複合句のラッパーとして機能し、結果を結合したり、動作を変更したりします。

ということで、クエリの種類は大きく2種類に分けられることがわかりました。

リーフクエリでできること

リーフクエリで行えることは以下の6つのようです。

  • 全文クエリ
    全文検索のクエリを実施。フィールドに指定されたアナライザを利用して検索することもできるし、テキスト解析せず、指定された値で検索することもできるようです。
  • 用語レベルのクエリ
    用語レベルのクエリを利用してIDの値や範囲を検索します。用語レベルのクエリは検索用語を解析したり並べ替えたりせず検索するとのことです。
  • 地理及びxyクエリ
    地理クエリを利用して、地理データを含むドキュメントを検索します。
  • 結合クエリ
    結合クエリを利用してネストされたフィールドを検索したり、特定のクエリに一致する親ドキュメントを検索したりします。
  • スパンクエリ
    スパンクリを利用して正確な位置情報を検索します。
  • 特殊なクエリ
    上記以外のクエリタイプを「特殊なクエリ」に分類しています。

テキストフィールドのUnicode特殊文字に関する注意事項

Unicode特殊文字に関連付けられた単語境界のため、Unicode標準アナライザーは、これらの特殊文字のいずれかが含まれている場合、テキストフィールドタイプの値を全体の値としてインデックス付けできません。

という注意書きがありました。具体例では「User-1」「User-2」というデータが有った場合、「-」でデータが区切られてしまうため、意図しない結果になる(User-1で検索しても、User-1、User-2の両方が一致する)ということのようです。

回避するには「カスタムアナライザーを定義する」「完全一致のフィールドを利用する」という方法があるようです。

終わりに

今回からQueryDSLのドキュメントを読み解くことにしました。
検索はOpenSearchのコアな機能になるので、使いこなしていきたいところです。

コメントを残す