Solr と SolrNet を使い始めたばかりです。現在のプロジェクトをやりすぎる前に、正しい方向に進んでいることを確認したいと思います。これが私が達成しようとしていることです:
基本要件:
- 複数のエンティティ (車、船、飛行機、自転車など) を検索する検索ソリューションを提供します。ここでこれらを作成しました。各エンティティは、非対称データを含む可変数のフィールドを持つことができます。
- 各エンティティにファセットを提供します。
- 各エンティティにフィルターを提供します。
ワークフロー:
- ユーザーが用語で検索します。
- 各エンティティに 1 つずつ、合計 4 つのリンクが表示され、その横にエンティティごとのヒット数を示す数値が表示されます。
- ユーザーがリンクをクリックすると、そのエンティティのファセットと検索結果を含むページが表示されます。
その要件を考慮して、これまでに行ったことは次のとおりです。
- 単一のインデックスを作成しましたが、car_name、car_model、car_company、ship_name、ship_model、ship_company、ship_age、ship_size などのエンティティごとに特定のフィールドがありました。
- インデックスにエンティティの 1 つに設定されているフィールド entity_type があります。
- ID はすべてのエンティティで一意です。
- DisMax 検索ハンドラー solrconfig.xml があり、そこに (すべてのエンティティから) 検索する必要があるすべてのフィールドを配置します。
私の DisMax 検索ハンドラーは次のようになります。
<requestHandler name="DisMax" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="defType">edismax</str>
<str name="qf">
car_name car_company car_model ship_name ship_company ship_model ship_sailing_route plane_name plane_company plane_model bicycle_name bicycle_company bicycle_model
</str>
<str name="q.alt">*:*</str>
<str name="rows">10</str>
<str name="fl">*,score</str>
<str name="facet">on</str>
<str name="facet.field">car_comapny</str>
<str name="facet.field">car_model</str>
<str name="facet.field">ship_name</str>
<str name="facet.field">ship_company</str>
<str name="facet.field">ship_sailing_route</str>
...
</lst>
</requestHandler>
そして最後に、ここに私の質問があります:
- この単一のインデックス ルートは正しいアプローチですか、それともエンティティごとに個別のインデックスを作成する必要がありますか? 説明してください。
- それらが別々のインデックスである必要がある場合、特定の用語を検索するにはどうすればよいですか? そして重要なことに、SolrNet を使用してそれを行うにはどうすればよいでしょうか?
- SolrNet を使用してすべてのエンティティを検索し、結果を取得する方法はありますか? または、同じ検索語を使用して、各エンティティのクエリを個別に (並行して) 実行する必要がありますか?
- ご覧のとおり、DisMax ハンドラーでファセットとして使用できるすべてのフィールドのリストがありますが、これは正しいアプローチですか? そうでない場合、何ですか?
プロジェクトを進めていくうちに、さらに多くの質問が出てくると思いますが、今のところはこれで十分です。