OpenSearchについて色々実験してきて、最低限日本語での検索が行えそうなので、そろそろアプリ開発に挑戦してみたいと思います。
作るものは「dAnimeサーチ」のリメイクを行おうと思います
dAnimeサーチとは?
元々はkotlin + elasticsearchの練習と、R-15指定のアニメで絞り込みが行えないことに対する不満を改善するために作成したものです。
OpenSearchで作り直すに当たり、以下の技術スタックで行こうと思います。
・データ取得、登録ともにGo言語で行う(オリジナルはPythonで作りました)
・検索エンジンはもちろんOpenSearch
・フロントエンドはReact + NextJSで行う
dAnimeデータ取得処理について
スクレイピング処理もGo言語で記載します。と言っても、dAnimeの取扱情報はAPIで提供されておりJSON形式で取得できるので、スクレイピングというよりはAPI問い合わせ & 取得情報のDB登録という処理になります。
dAnimeの規約をざっと見てみましたがプログラムを利用した作品情報の取得には触れられていないようなので、サーバー負荷がかからないように取得するようにしています。

dAnimeのスキーマ設計について
DB設計をもとにスキーマを作成し、OpenSearchのダッシュボードからインデックスを作成します。
作品タイトルのみ、kuromojiを利用した日本語アナライザを設定し、それ以外はintegerやkewordを利用したシンプルなものとしました

BulkInsertバッチの作成
DBから値を取得し、OpenSearchへバルクインサートを行うためのバッチを作成します。
バルクインサートの気をつける点として
・オペレーション、データ行それぞれで明示的に改行を入れる
・データの終端には改行を入れる
というのが挙げられます。

上記例ではbulkInsertStr変数がバルクインサート用の文字列となっており、オペレーション、データ行ごとに明示的に\nの改行文字列を入れています

バッチを実行すると5577行のデータがインサートされたため、もれなくOpenSearchへの登録は行えたようです。
以上
ということで、dAnimeサーチリメイクをめざして、ひとまずOpenSearchへのデータ登録までざっくりと説明させていただきました。
次からは実際にOpenSearchに検索をかけるためのサーバーサイド処理を考えていきたいと思います