2系から3系に上げたらかなり変更が入っていたようで全然動かなかった
対応した内容のメモを残していく
ドキュメント
Upgrade the Ruby API clients to v3 | Algolia docs
マイグレーション方法が書いてある
init_index
は削除された、その代わりすべてのクライアントのメソッド引数にインデックス名を入れるようになった
ほう…、そりゃ全然動かないな…ということで対応していく
モジュールの読み込み方法
client生成の方法が変わった
-client = Algolia::Search::Client.create(ENV['ALGOLIA_APP_ID'], ENV['ALGOLIA_ADMIN_API_KEY']) +client = Algolia::SearchClient.create(ENV['ALGOLIA_APP_ID'], ENV['ALGOLIA_ADMIN_API_KEY'])
list_indexのメソッド名
-puts client.list_indexes.to_json +puts client.list_indices.to_json
Ruby Clientで使えるメソッド
新たに使えるようになったメソッドなどもあるようなので一通り試してみる
この辺を見るのがよいのかな
これくらいしか参考になりそうなのが見つからない
レコードのSave
require 'algolia' require 'awesome_print' def main client = Algolia::SearchClient.create(ENV['ALGOLIA_APP_ID'], ENV['ALGOLIA_ADMIN_API_KEY']) record = [{ objectID: "object-1", name: "test record" }] index = 'sandbox' client.save_objects( index, record ) end main
全件洗いがえ
require 'algolia' require 'awesome_print' def main client = Algolia::SearchClient.create(ENV['ALGOLIA_APP_ID'], ENV['ALGOLIA_ADMIN_API_KEY']) record = [{ objectID: "object-1", name: "test record!" }, { objectID: "object-2", name: "test record2" }] index = 'sandbox' client.replace_all_objects( index, record, 1000, ) end main
以前はなかった気がする、前のコードはDeleteしてからSaveしてた
前回更新時からSave対象のレコードが削除された場合もしっかり対応してくれている(消えるべきレコードが消えている)
第3引数はバッチサイズとのことで、件数が多い場合は内部的にリクエストを分割してくれているということかな、使う側でハンドリングしなくてよいのは助かる
デフォルトが1000だった、自分のケースは500件もないので特に指定しなくても良いんだけど一応指定しておいた
実行自体はちょっと時間掛かったけど普通に完了した
set_settings
インデックスの設定更新も行っていたためこちらも変更が必要となった
ドキュメントには載っていなかったがset_settings
は残っていそう…
コード
マイグレーション内容を加味し、書いてみたが普通にハッシュ渡しただけだとエラーになった、リクエストがおかしいって内容だったのでIndexSettings
のインスタンスを生成すれば良さそう…?
サーッと色々コード読んでたらindex_settings.rb
にbuild_from_hash
というクラスメソッドを見つけたのでこれかな? ということで下記のコードになった
- indexSettingsの更新
require 'algolia' require 'awesome_print' def main client = Algolia::SearchClient.create(ENV['ALGOLIA_APP_ID'], ENV['ALGOLIA_ADMIN_API_KEY']) record = [{ objectID: "object-1", name: "test record!!" }, { objectID: "object-2", name: "test record2!!" }] index = 'sandbox' client.set_settings( index, Algolia::Search::IndexSettings.build_from_hash( { attributesToSnippet: ['text:50'], attributesForFaceting: ['tags'], attributeForDistinct: 'section', distinct: true, } ) ) end main
実行し、すべて管理画面上から反映されたことが確認できた
おわり
そんなに大したスクリプトを作っていたわけでもなかったけど結構変更があったのでほぼ書き直しって感じだった
これに限らずAlgoliaはどのライブラリも破壊的変更ガンガン入れてくるからつらいなーっていう気持ちがある…