🍣

OpenSearchについて調べたことまとめ

2024/11/19に公開

OpenSearchとは?

リアルタイムのアプリケーションモニタリング、ログ分析、ウェブサイト検索などの幅広いユースケースにご利用いただける分散型、コミュニティ主導型、Apache 2.0 ライセンス、100% オープンソースの検索および分析スイートです。
参考:https://aws.amazon.com/jp/what-is/opensearch/

Document

OpenSearchではデータの保存単位をDocumentとしている.
形式はJSON.
以下のような学校のデータベースの例では,生徒一人のレコードがDocumentということである.

ID Name GPA Graduation yeaar
1 Jhon 3.2 2024

Index

Indexは一般的なデータベースにおけるテーブルを指す.

ID Name GPA Graduation yeaar
1 Jhon 3.2 2024
2 Albert 3.12 2023
3 2.9 2023

Field

データベースにおけるカラムの位置づけ
(ドキュメントの説明見つけられなかったので後日)

データの一貫性について

トランザクション処理をサポートしていない.
一貫性や整合性は担保されていない.
検索や分析に特化させているため.

OpenSearchでの検索

Term-level Query
https://opensearch.org/docs/latest/query-dsl/term/index/
以下ピックアップ

  • Exists : 特定のフィールドを含むドキュメントを検索できる
  • Fuzzy : あいまい検索,検索語と類似するものを検索できる.
  • Term : 特定のフィールドに対しての完全一致検索
  • Terms : 特定のフィールドに対して複数の値を完全一致で検索

Full-Text Query
https://opensearch.org/docs/latest/query-dsl/full-text/index/
以下ピックアップ

  • match : 特定のフィールドの全文検索し,文字列のいずれかに一致するものを検索

Compound Query
https://opensearch.org/docs/latest/query-dsl/compound/index/
AND・OR検索したい時に使う

  • must : ANDの意味
  • must_not : NOTの意味
  • should : ORの意味

おまけ

Fuzzy検索における類似度の計算にはDamerau–Levenshtein distanceが用いられているらしい.
2単語間のDamerau–Levenshtein distancは一方の単語を他の単語に変換するのに必要な操作の最小操作回数である.
操作は挿入,削除,置換,転置
ex.) php->pythonの場合

  1. 置換 : h->y (pyp)
  2. 挿入 : t (pytp)
  3. 挿入 : o (pytpo)
  4. 置換 : p->h (pytho)
  5. 挿入 : n (python)
    となるので距離は5になる

https://ja.wikipedia.org/wiki/ダメラウ・レーベンシュタイン距離

Discussion