全文検索インデックスを全削除して再構築する
全文検索システムの再構築
Scrapboxのテキストデータ
MongoDBにあるテキストデータから、検索に必要なものだけを転送して作られます
データ転送のタイミング
適切なタイミングで自動的にMongoDBからElasticsearchへ転送されます
用途
データ不整合を修正したい
MongoDBは「このデータは既にElasticsearchに投入されているはず」と思っているが
Elasticsearchは「データをもらってないです」
と、なっている状態がありえます(今のところ報告はされていません)
Elasticsearchそのものをメジャーバージョンアップする時など
いっそ全て捨てて、再投入するのも楽です。Scrapboxはそうできるように作っています
作業内容
準備
$ docker compose down
完全にオンプレ版Scrapbox全体を停止します
Elasticsearchのデータを全削除する
$ rm -rf elasticsearch/
このディレクトリのバックアップを取る必要はありません
元データは全てMongoDBに入っているので
ES index versionを初期化する
MongoDBだけを起動して
$ docker compose up mongo -d
mongo shellに入り
$ docker compose exec mongo mongosh
esIndexStateとesIndexStateChangedAtとesIndexVersionを削除する
code:mongo
use scrapbox
switched to db scrapbox
db.projects.count()
11
db.projects.updateMany({}, { $unset: { esIndexState: true, esIndexStateChangedAt: true, esIndexVersion: true } })
{ "acknowledged" : true, "matchedCount" : 11, "modifiedCount" : 3 }
>の中が入力したコマンド
11件のprojectのES index versionが初期化された
MongoDBを終了する
$ docker compose down
以上で完了ですshokai.icon
オンプレ版Scrapbox全体を起動し
$ docker compose up -d
ブラウザでScrapboxを表示すると
MongoDBからElasticsearchへの全文検索インデックスの投入が始まります
古いDocker環境を使っている場合
docker composeコマンドはdocker-composeと入力する必要があります