リモート開発メインのソフトウェア開発企業のエンジニアブログです

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秒ごとに更新されます。

ちなみにインデックステンプレートの作成でも予め設定しておくことができます。


以上です。

気付いてみればなんてことない内容でしたが結構躓いてしまったので書いてみました。

ご参考になれば幸いです。

← 前の投稿

Flutter でリフレッシュ可能な無限スクロールを実装する

次の投稿 →

Google Chromeの拡張機能が存外簡単に作れた話

コメントを残す