Solrでの検索
Solrは、検索のための豊富で柔軟な機能セットを提供します。この柔軟性の程度を理解するために、Solr検索に関わるステップとコンポーネントの概要から始めるのが役立ちます。
ユーザーがSolrで検索を実行すると、検索クエリはリクエストハンドラによって処理されます。リクエストハンドラは、Solrがリクエストを処理する際に使用するロジックを定義するSolrプラグインです。Solrは、さまざまなリクエストハンドラをサポートしています。検索クエリの処理用に設計されたものもあれば、インデックスレプリケーションなどのタスクを管理するものもあります。
検索アプリケーションは、デフォルトで特定のリクエストハンドラを選択します。さらに、ユーザーが異なるリクエストハンドラを優先してデフォルトの選択をオーバーライドできるようにアプリケーションを構成できます。
検索クエリを処理するために、リクエストハンドラはクエリの用語とパラメータを解釈するクエリパーサーを呼び出します。異なるクエリパーサーは異なる構文をサポートします。Solrのデフォルトのクエリパーサーは、標準クエリパーサー、またはより一般的に「lucene」クエリパーサーとして知られています。Solrには、DisMaxクエリパーサーと拡張DisMax(eDisMax)クエリパーサーも含まれています。
標準クエリパーサーの構文は、検索の精度を高めることができますが、DisMaxクエリパーサーはエラーに対してより寛容です。DisMaxクエリパーサーは、ユーザーに構文エラーをほとんど表示しないGoogleなどの一般的な検索エンジンと同様のエクスペリエンスを提供するように設計されています。拡張DisMaxクエリパーサーは、構文エラーを許容しながら、完全なLuceneクエリ構文を処理するDisMaxの改良版です。また、いくつかの追加機能も含まれています。
さらに、すべてのクエリパーサーで受け入れられる共通クエリパラメータがあります。
クエリパーサーへの入力には、以下を含めることができます
-
検索文字列---つまり、インデックスで検索する用語
-
特定の文字列またはフィールドの重要度を高めたり、検索語句間でブール論理を適用したり、検索結果からコンテンツを除外したりすることにより、クエリを微調整するためのパラメータ
-
検索結果を提示する順序を指定したり、検索アプリケーションのスキーマの特定のフィールドにレスポンスを制限したりするなど、クエリレスポンスの表示を制御するためのパラメータ
検索パラメータは、フィルタークエリを指定することもできます。検索レスポンスの一部として、フィルタークエリはインデックス全体に対してクエリを実行し、結果をキャッシュします。Solrはフィルタークエリ用に個別のキャッシュを割り当てるため、フィルタークエリを戦略的に使用することで、検索パフォーマンスを向上させることができます。
名前は似ていますが、クエリフィルターは分析フィルターとは関係ありません。フィルタークエリは、インデックスにすでにあるデータに対して検索時にクエリを実行しますが、トクナイザなどの分析フィルターは、指定されたルールに従ってインデックス作成のためにコンテンツを解析します。
検索クエリは、検索レスポンスで特定の用語を強調表示するように要求できます。つまり、選択した用語が色の付いたボックスで表示され、検索結果の画面上で「飛び出す」ように表示されます。ハイライトにより、検索で返された長いドキュメント内の関連箇所を見つけやすくなります。Solrは、複数項目のハイライトをサポートしています。Solrには、用語の強調表示方法を制御するための豊富な検索パラメータセットが含まれています。
検索レスポンスは、ハイライトされたテキストを特徴とするスニペット(ドキュメント抜粋)を含めるように構成することもできます。
ユーザーが探しているコンテンツを絞り込むのに役立つように、Solrは、さらに探索を支援するための検索結果をグループ化する2つの特別な方法、ファセットとクラスタリングをサポートしています。
ファセットは、検索結果をカテゴリ(インデックス化された用語に基づく)に配置することです。各カテゴリ内で、Solrは、ファセット制約と呼ばれる関連用語のヒット数を報告します。ファセットを使用すると、多くのカテゴリとカテゴリ内の多くの項目がある映画サイトや製品レビューサイトなどのサイトで、ユーザーが検索結果を簡単に探索できます。
以下のスクリーンショットは、Solrを最初に利用したサイトであるCNET Webサイト(CBS Interactive Inc.)からのファセットの例を示しています。

ファセット処理は、検索アプリケーションのインデックス作成時に定義されたフィールドを利用します。上記の例では、これらのフィールドには、デジタルカメラを説明するのに役立つ情報のカテゴリ(メーカー、解像度、ズーム範囲など)が含まれています。
クラスタリングは、コンテンツがインデックス化された時ではなく、検索が実行されたときに発見された類似性によって検索結果をグループ化します。クラスタリングの結果は、ファセット検索結果に見られるようなきちんとした階層構造がないことが多いですが、それでもクラスタリングは役立つ可能性があります。検索結果間の予期しない共通点を明らかにしたり、ユーザーが実際に探しているものに関連しないコンテンツを除外するのに役立ちます。
Solrは、MoreLikeThisと呼ばれる機能もサポートしており、ユーザーは以前のクエリで返された特定の用語に焦点を当てた新しいクエリを送信できます。MoreLikeThisクエリは、ファセット処理またはクラスタリングを利用して、ユーザーに追加の支援を提供できます。
Solrのレスポンスライターと呼ばれるコンポーネントは、クエリレスポンスの最終的な表示を管理します。Solrには、XMLレスポンスライターやJSONレスポンスライターなど、さまざまなレスポンスライターが含まれています。
下の図は、検索プロセスのいくつかの主要な要素をまとめたものです。
