OpenSearchのドキュメントが更新されなかった
OpenSearchはOpenSearch Dashboards(旧Kibana)を使えばブラウザからインデックスやドキュメントに対してリクエストを送れます。
ちょっとしたデータの作成やドキュメントの検索をするときに毎回自前のシステムやAPIなどを使っていると時間がかかってしまうので、個人的にはこのダッシュボードを使えるようにしておくことを推奨します。
で、そのダッシュボードでタイトル通りの問題が発生したのでその原因と解決について書きました。
ちょっとした設定の見落としだったので短めの内容です。
あとおそらくElasticsearchでも同様の内容になると思います。
原因と解決方法
インデックスのrefresh_interval
が-1
(無効)になっており、その設定でリフレッシュのリクエストを行っていないことが原因でした。
なので手動でリフレッシュを行うことで解決しました。
ダッシュボードのDev Toolsを開き以下を実行します。
POST /sample-index/_refresh
これで手動リフレッシュされます。
ちなみにインデックスのリフレッシュポリシーの確認方法は以下が手っ取り早いです。
GET /sample-index/_settings
refresh_intervalとは
refresh_intervalは何秒後にリフレッシュを行うかの設定です。
リフレッシュというのは内部的に実行されたクエリの結果をこちらでも見れるように更新しているような処理です。
OpenSearchのインデックスはリクエストを受理してもその結果をこちらがすぐ確認することはできません。
このリフレッシュというのが行われると確認できます。
仮にダッシュボード(Dev Tools)からドキュメントを10秒ごとに1つずつ作成しても、設定が"refresh_interval":"60s"
だとしたら60秒後にドキュメントがまとめて作成されたように見えます。(厳密には最後のリフレッシュから60秒後)
ちなみにリフレッシュ前に同じ内容のリクエストを送ってもコンフリクトとして弾かれます。
何も設定してないのに勝手にrefresh_intervalが設定される場合
refresh_intervalの設定はクラスター全体の設定とインデックスごとの設定があります。
インデックス作成の際にrefresh_intervalを設定すればその設定が反映されます。
何も設定せずにインデックスを作成するとそのインデックスにはクラスター全体の設定が反映されます。
クラスター全体の設定をダッシュボードで確認する場合はDev Toolsで以下を実行すれば確認できます。
GET /_cluster/settings
もしこれでも出てこなければデフォルトの1s
が設定されているので1秒ごとに更新されます。
ちなみにインデックステンプレートの作成でも予め設定しておくことができます。
以上です。
気付いてみればなんてことない内容でしたが結構躓いてしまったので書いてみました。
ご参考になれば幸いです。
コメントを残す