💽

OpenSearhDashbordを触ってみた話

2025/01/14に公開

仕事で、OpenSearchDashbordを触る機会が増えたので、基本的な使い方などを調べてみた備忘録

調べる前の私の知識はざっくばらんにこの4つ

  • OpenSearchはElasticsearchをフォークして開発されたもの
  • DSL書く時に分からなければElasticsearchでググれば情報いっぱい出てくる
  • documentを格納しているのがindex(documentはレコード、indexはテーブルみたいなイメージ)
  • 障害に備えてレプリカがあるとか

OpenSearchの基本

こちらの記事が非常にわかりやすかったのでオススメ
https://zenn.dev/kouichi_itagaki/articles/d77360a5577e7a
曖昧になっていた用語の意味などを理解できた

因みに、OpenSearchの公式ドキュメントを読んでいて初めて気づいたのだが、
indexの複数形は「indices」らしい(indexesじゃない、、、!)

Discover

indexを指定して、条件に合ったdocumentを検索することが可能

operatorの「is one of」

フィルター条件の「is one of」で複数値を設定した場合、OR検索になる
例)nameフィールドに対して「小木」「山田」「佐藤」を設定した場合
name = 小木 あるいは、name = 山田 あるいは、name = 佐藤であるドキュメントが検索結果に出る

keywordの有無

keywordあり:完全一致
keywordなし:部分一致
例)name.keyword = 「小木」が検索条件なら、
name = 小木であるドキュメントが結果に表示される
name = 「小」が検索条件なら、name = 小木 や、 name = 小峠、name = 小堺 などのドキュメントも結果に表示される

検索結果のアイコン

検索結果一覧にて+アイコン、-アイコンなどが表示されているがホバーすると簡易説明文が出てくる

  • Filter for value:絞り込み条件に、そのフィールドがその値であるという条件を追加する
    • 例)name=佐藤のドキュメントでFilter for valueのアイコンをタップすると、検索条件にname=佐藤で絞り込みを追加する
  • Filter out value:絞り込み条件に、そのフィールドがその値でないという条件を追加する
    • 例)name=佐藤のドキュメントでFilter out valueのアイコンをタップすると、検索条件にname!=佐藤で絞り込みを追加する
  • Filter for field present:絞り込み条件に、そのフィールドが存在するという条件を追加する
    • 例)name=佐藤のドキュメントでFilter for field presentのアイコンをタップすると、検索条件にname existsで絞り込みを追加する
  • Toggle Column in Table:検索結果に表示されるフィールドとして選択する
    • 例)name=佐藤のドキュメントでToggle Columnのアイコンをタップすると、検索結果のフィールドがnameのみが表示される

DSLでの書き方を取得可能

Inspect > Request:リクエストDSLをコピーできる
Inspect > Response:レスポンスをコピーできる

Dev Tools

DSL

必ずJSON形式

  • キー(key)とバリュー(value)は必ずセット
  • キーは必ずダブルクォーテーションで囲む(シングルはダメ🙅‍♀️)
  • {"key1": "value1", "key2": "value2"}

レスポンスについて(一部)

  • took:結果を返すまでにかかった時間(ミリ秒)
  • hits.total.value:結果の数
    デフォルトは10000までだが、リクエストに"track_total_hits": trueを追加すると全数返却してくれる
  • hits.hits:結果(ドキュメント)
    デフォルトは10個までだが、リクエスに"size": 数字を追加すると設定した個数分だけ返却してくれる
    from+size > 10000の場合、illegal_argument_exceptionエラーとなるため、指定不可
    10000件を超えるデータが欲しい場合は、ScrollAPIや、search_afterパラメータを使うのが推奨されている

ショートカット

DevTools画面のエディターペインにて、地味に役立ったものを紹介(対象OS:Mac)

  • Command + I:クエリ文を自動で整形してくれる
  • Command + Enter:カーソルがある位置(もしくは、選択している箇所)のリクエストを送信してくれる

Helpタブを開くと、他にも使えそうなショートカットが書かれているので
一読オススメですぞ

複数のindexで検索したい時

Index Management > Indices > 該当のインデックス > Alias
より、エイリアスを設定することが可能
DSLで複数のindexに対して、検索したい場合はエイリアスを設定するのがオススメ
例)

  1. 日本の東京都民の住民データが格納されているtokyoインデックス
  2. 日本の神奈川県民の住民データが格納されているkanagawaインデックス
  3. 日本の千葉県民の住民データが格納されているchibaインデックス
  4. アメリカのロサンゼルスの住民データが格納されているLos Angelesインデックス
    があった場合、
    日本国内で年齢が20歳のデータを抜き出したい時は
    1〜3はjapanエイリアスを設定
GET japan/_search
{
  "size": 10000,
  "query": {
    "term": {
      "age": {
        "value": "20"
      }
    }
  }
}

全index内で検索したい時

インデックス名を書かなければOK
GET /_searchでindex指定なしで検索可能

返却して欲しいフィールドを指定可能

_sourceパラメータを使用する

GET japan/_search
{
  "_source": ["name","age"],
  "query": {
    "term": {
      "age": {
        "value": "20"
      }
    }
  }
}
株式会社find | 落とし物クラウド

Discussion