SolrSolrのコレクション名に日本語を使えるか先日、テーブル名やカラム名に日本語が使われているデータベースからデータをSolrにインポートする機会がありました。Solr側のコレクション名やフィールド名で日本語を使えるならインポートの手間が小さくて済むので、実際そういうことができるのか調べてみました。コレクションAPIで日本語名のコレクションを作ってみます。19(略)サーバエラーになってしまったのでURLエンコードしてパラメータ指定します。"code":400}}エラーメッセージによると、コレクション名に利用できるのは以下の文字種に限るようです。英数文字ピリオドアンダースコアハイフン(ハイフンは先頭文字としては使えない)ソースコードを調べると、コレクション名のチェックをしているのは以下のクラスでした。solr/solrj/src/java/org/apache/solr/client/solrj/util/SolrIdentifierValidator.javaチェックに使う正規表現は以下の通りです。Pattern.compile("^(?!\\-)[\\._A-Za-z0-9\\-]+$");SolrIdentifierValidatorではシャード、コレクション、コア、エイリアスの名前をチェックしています。チェックに使う正規表現は共通なので、シャード、コレクション、コア、エイリアスについては同じ仕様であることが分かりました。SolrSolrのコレクション名に日本語を使えるかにコメントSolrのフィールド名に日本語を使えるか前回の記事に引き続き、今回はフィールド名に日本語を使えるかどうかを調査しました。Properties”に記載があります。enforced.英数字(先頭文字として数字は使えない)アンダースコア「今は厳密には強制していません」というのが微妙なところです。Fields”にもう少し詳しい説明がありました。guaranteed.英数字とアンダースコア以外の文字も使えないことはないけど、全部のコンポーネントがサポートしているとは限らないよ、ということのようです。フィールド名に日本語を使うとどういうことが起こるか試してみました。testという名のコレクションを作成します。'http://localhost:8983/solr/admin/collections?action=CREATE&name=test&numShards=1&replicationFactor=1'「日付」というフィールドを追加します。http://localhost:8983/solr/test/schemaAPIで「日付」フィールドが存在することを確認できます。"stored":true}}「日付」フィールドに値を持つデータを投入してみます。j.json比較のため、”date”フィールドを追加してデータを投入します。e.jsonデータがどう保持されているか比較します。}}“date”の方は特に問題ありません。「日付」フィールドは無く”__”というフィールドに値が格納されています。値が配列になっていることから、「日付」フィールドの定義とは異なるフィールドとして扱われていることが分かります。何か別のダイナミックフィールドのルールにヒットしたようです。}}というわけで、割と基本的なところで躓いてしまいました。結論としては、フィールド名に日本語を使うのも実用としては無理ということになりそうです。8.1から追加された機能にRead-Onlyモードがあります。SolrCloudでの運用時に利用できるモードです。リファレンスマニュアルの該当部分を翻訳してみました。readOnly属性をtrueにセットするとコレクションはRead-Onlyモードに移行します。このモードではインデックスの更新リクエストは拒否されます。他のコレクションレベルのアクション(コレクションの追加/削除、レプリカの移動)はこのモードにおいても有効です。(デフォルトの)read-writeモードからread-onlyモードへは以下の手順で移行されます。FORBIDDENエラーで拒否される(継続中の長期実行リクエストは中止される)・実行中の更新が強制的にコミットされる(注意)大きなセグメントがバックグラウンドでマージされている最中であれば、この強制コミットは長時間に及ぶかもしれません。・コレクションのRELOADアクションが実行されるreadOnly属性が削除されるかfalseに設定されるかすると、更新リクエストが有効になりコレクションがリロードされます。https://lucene.apache.org/solr/guide/8_2/collection-management.html#readonlymode簡単な動作確認をしてみました。parameterテスト用のコレクション(test_readonly)を作成し、MODIFYCOLLECTIONアクションでreadOnlyをtrueに設定してからドキュメントをポストするとリファレンスの説明通り403エラーになりました。}}当然インデックスは空っぽのままです。0:00:01.420次にMODIFYCOLLECTIONアクションでreadOnlyをfalseに戻してからドキュメントをポストしたところ、今度はエラー無しでアップデートできました。}}クエリの結果からも、正しく更新できたことを確認できます。ReadOnlyモードを使えば内容固定のインデックスを運用中に誤って更新してしまうことを防ぐことができて便利ですが、このモードはSolrCloudでのみ利用可能なので、その点は注意が必要です。SolrSolrのReadOnlyモードにコメントWSL上でSolrが動くかどうか試してみたSolrはJavaで書かれているのでもちろんWindowsでも動くわけですが、ふとWSL上ではどうなのかが気になって試してみました。上でいつもの手順通りSolrを動かしてみます。130)エラー終了してしまいました。VMレベルでのエラーが発生していました。https://bugs.launchpad.net/ubuntu/+source/openjdk-lts#WSLのバグレポートによるとJavaのプロセスで似たようなエラーが出ることはあるようで順次修正はされているものの、今回のエラーと同じものは見つかりませんでした。VMの起動オプションを変更すれば起動するのではないかと考えて、まずはヒープサイズをいろいろ変えてみましたが駄目でした。次にJMX関連のオプションを外してみたところ問題なく起動するようになりました。具体的には起動用のSolrスクリプトを以下のように変更しました。then開発中の動作確認ではWSL側でSolrが動かせた方が都合が良い場合もあるので、謎のエラーを回避する方法を見つけることができて良かったです。使ってインデックスのバックアップを取る方法を説明しました。この記事ではバックアップからのリストアの方法を説明します。リストアの実行リストアは以下のように実行します。バックアップのときと同じものを指定します。レプリカの自動追加を許可するかどうかを変更バックアップ/リストアに備えた運用リストアが実行されると、バックアップ元とは異なるコレクション名で新しいコレクションが作成されます。リファレンスではエイリアスの利用を推奨しています。実体をそちらに切り替える、という形で運用します。usコンサルティング・Webサービス開発を得意とします。コミュニケーションのあたらしいカタチを創造します。