演習3:独自のデータのインデックス作成

演習3:独自のデータのインデックス作成

最後の演習では、任意のデータセットを使用します。これは、ローカルハードドライブ上のファイル、以前に使用したデータセット、または本番アプリケーションでSolrにインデックスを作成する予定のデータのサンプルなどです。

この演習は、アプリケーションに必要なことを考えさせることを目的としています。

  • どのような種類のデータをインデックス化する必要がありますか?

  • データ用にSolrを準備するために何を行う必要がありますか(特定のフィールドの作成、コピーフィールドの設定、分析ルールの決定など)?

  • ユーザーに提供したい検索オプションの種類は?

  • 期待どおりに動作することを確認するために、どの程度のテストを行う必要がありますか?

独自の コレクションを作成する

開始する前に、任意の名前の新しいコレクションを作成します。この例では、コレクションの名前は「localDocs」です。必要に応じて、この名前を好きな名前に置き換えてください。

$ bin/solr create -c localDocs -s 2 -rf 2

上記の方法2と同様に、これは`_default` configsetとそれが提供するすべてのスキーマレス機能を使用します。前述のように、これはデータのインデックス作成時に問題を引き起こす可能性があります。スキーマを正しく設定するまで、インデックス作成を数回繰り返す必要があるかもしれません。

インデックス作成のアイデア

Solrには、データをインデックス作成するための多くの方法があります。以下のアプローチのいずれかを選択し、システムで試してみてください。

`bin/solr post`を使用したローカルファイル

ローカルのファイルディレクトリがある場合、Postツール(`bin/solr post`)を使用してファイルディレクトリにインデックスを作成できます。これは最初の演習で実際に使用しました。

演習ではJSON、XML、CSVのみを使用しましたが、PostツールはHTML、PDF、Microsoft Office形式(MS Wordなど)、プレーンテキストなども処理できます。

この例では、ローカルに「Documents」という名前のディレクトリがあると仮定します。インデックスを作成するには、次のようなコマンドを実行します(必要に応じて`-c`パラメータの後のコレクション名を修正してください)。

$ bin/solr post -c localDocs ~/Documents

ドキュメントを処理している間にエラーが発生する可能性があります。これは、フィールドの推測が原因である場合もあれば、ファイルタイプがサポートされていない場合もあります。このようなコンテンツのインデックス作成は、データに合わせてSolrを計画する必要があることを示しています。これには、データの理解と試行錯誤が必要になる場合があります。

SolrJ

SolrJは、Solrとのやり取りを行うためのJavaベースのクライアントです。JVMベースの言語にはSolrJを、その他の場合はクライアントAPIを使用して、Solrに送信するドキュメントをプログラムで作成します。

ドキュメント画面

インデックス対象のドキュメントを貼り付けたり、ドキュメントをフィールドごとに作成するには、管理UIのドキュメント画面https://127.0.0.1:8983/solr/#/localDocs/documents)を使用するか、「ドキュメントタイプ」ドロップダウンからDocument Builderを選択します。フォームの下にあるドキュメントを送信ボタンをクリックして、ドキュメントをインデックスします。

データの更新

このチュートリアルでコンテンツを複数回インデックスしても、結果が重複しないことに気付くかもしれません。これは、例として使用しているSolrスキーマ(managed-schema.xmlまたはschema.xmlという名前のファイル)で、idというuniqueKeyフィールドが指定されているためです。同じuniqueKey値を持つドキュメントを追加するPOSTコマンドをSolrに送信すると、既存のドキュメントが自動的に置き換えられます。

Solr管理UIのコア固有の概要セクションにあるnumDocsmaxDocの値を確認することで、それが発生したことを確認できます。

numDocsはインデックス内の検索可能なドキュメント数を表します(一部のファイルには複数のドキュメントが含まれているため、XML、JSON、またはCSVファイルの数よりも大きくなります)。maxDocの値はさらに大きくなる可能性があります。これは、maxDocのカウントには、インデックスから物理的に削除されていない論理的に削除されたドキュメントが含まれるためです。サンプルファイルを何度でも繰り返し投稿できますが、新しいドキュメントは常に古いドキュメントを置き換えるため、numDocsは増加しません。

既存のサンプルデータファイルのいずれかを編集し、データの一部を変更して、PostTool(bin/solr post)を再実行してください。変更内容は後続の検索に反映されます。

データの削除

スキーマを正しく設定するために数回繰り返す必要がある場合は、ドキュメントを削除してコレクションをクリアし、やり直すことができます。ただし、ドキュメントを削除するだけでは、基礎となるフィールド定義は変更されません。基本的に、これは必要に応じてフィールドを変更した後、データを再インデックスすることを可能にします。

データは、更新URLに削除コマンドをPOSTし、ドキュメントの一意キーフィールドの値、または複数のドキュメントに一致するクエリを指定することで削除できます(後者には注意が必要です)。リクエストを適切に構成すれば、bin/solr postを使用してドキュメントを削除することもできます。

特定のドキュメントを削除するには、次のコマンドを実行します。

$ bin/solr post -c localDocs -d "<delete><id>SP2514N</id></delete>"

すべてのドキュメントを削除するには、「delete-by-query」コマンドを使用します。

$ bin/solr post -c localDocs -d "<delete><query>*:*</query></delete>"

上記を修正して、特定のクエリに一致するドキュメントのみを削除することもできます。

演習3 まとめ

この時点で、独自に取り組む準備ができました。

Solrを停止し、使用したすべての例を削除して、最初からやり直す準備ができたら、全体のまとめに進んでください。