ドキュメント、フィールド、スキーマ設計

Solr の基本的な前提はシンプルです。多くの情報を提供し、後で質問して必要な情報を見つけることができます。

すべての情報をフィードする部分を *インデクシング* または *更新* と呼びます。質問をすることを *クエリ* と呼びます。

Solr の仕組みを理解する 1 つの方法は、レシピのルーズリーフブックを考えることです。ブックにレシピを追加するたびに、裏側のインデックスを更新します。各材料と、追加したばかりのレシピのページ番号をリストします。100 個のレシピを追加するとします。インデックスを使用すると、材料としてひよこ豆、アーティチョーク、コーヒーを使用するすべてのレシピを非常に迅速に見つけることができます。インデックスを使用する方が、各レシピを 1 つずつ調べるよりもはるかに高速です。1,000 個のレシピ、または 100 万個のレシピの本を想像してみてください。

Solr を使用すると、多くの異なるフィールド、またはエントリのタイプを持つインデックスを作成できます。上記の例は、 `ingredients` という 1 つのフィールドだけでインデックスを作成する方法を示しています。インデックスには、 `Asian`、 `Cajun`、 `vegan` などのレシピの調理スタイル用の他のフィールドを含めることができ、準備時間用のインデックスフィールドを含めることもできます。Solr は、「材料としてブラッドオレンジを使用し、30 分未満で準備できるケイジャンスタイルのレシピはありますか?」のような質問に答えることができます。

スキーマとは、入力ドキュメントからインデックスを作成する方法を Solr に指示する場所です。

Solr が世界をどのように見ているか

Solr の基本的な情報単位は *ドキュメント* で、これは何かを記述するデータのセットです。レシピドキュメントには、材料、手順、準備時間、調理時間、必要なツールなどが含まれます。たとえば、人物に関するドキュメントには、人物の名前、経歴、好きな色、靴のサイズなどが含まれる場合があります。書籍に関するドキュメントには、タイトル、著者、出版年、ページ数などが含まれる場合があります。

Solr の世界では、ドキュメントは *フィールド* で構成されており、これはより具体的な情報です。靴のサイズはフィールドになる可能性があります。名と姓はフィールドになる可能性があります。

フィールドには、さまざまな種類のデータを含めることができます。たとえば、名前フィールドはテキスト(文字データ)です。靴のサイズフィールドは、6 や 9.5 などの値を含めることができるように、浮動小数点数である場合があります。明らかに、フィールドの定義は柔軟ですが(たとえば、靴のサイズフィールドを浮動小数点数ではなくテキストフィールドとして定義できます)、フィールドを正しく定義すると、Solr はフィールドを正しく解釈でき、ユーザーはクエリを実行したときに、より良い結果を得ることができます。

*フィールドタイプ* を指定することで、フィールドに含まれるデータの種類を Solr に伝えることができます。フィールドタイプは、Solr にフィールドの解釈方法とクエリ方法を指示します。

ドキュメントを追加すると、Solr はドキュメントのフィールドの情報を取り、その情報をインデックスに追加します。クエリを実行すると、Solr はインデックスをすばやく参照して、一致するドキュメントを返すことができます。

フィールド分析

*フィールド分析* は、インデックスを作成するときに受信データで何をするかを Solr に指示します。このプロセスをより正確に表す名前は *処理* や *消化* ですが、公式名称は *分析* です。

例えば、人物ドキュメントの経歴フィールドを考えてみましょう。ケチャップ、トンボ、暗号など、人生に関係のある人物を素早く見つけることができるように、経歴のすべての単語にインデックスを付ける必要があります。

しかし、経歴には、"the"、"a"、"to" など、重要ではなく、インデックスを圧迫したくない単語がたくさん含まれている可能性があります。さらに、経歴に文頭に大文字で "Ketchup" という単語が含まれているとします。ユーザーが "ketchup" を検索した場合、経歴には大文字の単語が含まれていますが、Solr にはその人物について知らせてほしいと考えています。

これらの問題の両方の解決策は、フィールド分析です。経歴フィールドでは、Solr に経歴を単語に分割する方法を指示できます。すべての単語を小文字にすること、アクセント記号を削除することを Solr に指示できます。

フィールド分析は、フィールドタイプの重要な部分です。Solrにおけるドキュメント分析は、フィールド分析の詳細な説明です。

Solrのスキーマファイル

Solrは、理解する必要のあるフィールドタイプとフィールドに関する詳細をスキーマファイルに格納します。このファイルの名前は、managed-schema.xml または schema.xml です。違いは、Solr のスキーマをインストール環境でどのように管理するか(プログラムで管理するか、手動で編集するか)によって決まります。

スキーマに関する重要な事実は、それが Solr の概念であるということです。インデックス内の実際のデータは Lucene に格納され、Lucene にはスキーマの概念がありません。これは、スキーマファイルを変更しても、インデックスに既に格納されているデータには影響しないことを意味します。実際、データを再インデックスせずにスキーマを変更すると、インデックスに深刻な問題が発生し、データを完全に再インデックスする以外に解決策がない場合があります。

インデックスを作成する予定のデータについて検討することをお勧めします。どのような種類のデータですか?どのように検索できるようにしたいですか?ドキュメントのフィールドはユーザーにどのように表示されますか?

まだわからない場合は、テストインデックスを実行して、ドキュメント内のデータがデフォルト設定でどのようにインデックス付けされるかを確認してください。実装計画に反復処理のための時間を組み込み、小規模から始めましょう。すべてのドキュメントをインデックスする前にスキーマを定義できるほど、ユーザーにとって適切な検索アプリケーションを作成できる可能性が高くなります。

スキーマの詳細については、スキーマ要素のセクションを参照してください。