こんにちは、Solr wiki を読んでここを検索しましたが、私のユースケースの解決策が見つかりませんでした:
さまざまな種類の契約を持つ顧客データを 1 つのドキュメントにインデックス化しています。したがって、各顧客は、1 つ以上の異なる契約を含む Solr ドキュメントになります。
各契約のフィールドは、インポートによって動的に追加されます (例: contract_type_1_s、contract_type_2_s、...; contract_change_date_1_dt、contract_change_date_2_dt、...)。したがって、' 2 ' のフィールドはすべて契約番号 2 に関連しています。これにより、ユーザーはタイプ 1 の契約を持ち、タイプ 2 の契約を持たない顧客などを検索できます。
私のユースケースは、クエリに一致したコントラクトのフィールドのみを返すことです。
次に例を示します。
<doc>
<field name="id">100</field>
<field name="customer_name">paul</field>
<field name="contract_type_1_s">inhouse</field>
<field name="contract_change_date_1_dt">2012-09-01T00:00:00Z</field>
</doc>
<doc>
<field name="id">101</field>
<field name="customer_name">fred</field>
<field name="contract_type_1_s">inhouse</field>
<field name="contract_change_date_1_dt">2012-09-01T00:00:00Z</field>
<field name="contract_type_2_s">external</field>
<field name="contract_change_date_2_dt">2012-09-01T00:00:00Z</field>
</doc>
<doc>
<field name="id">102</field>
<field name="customer_name">karl</field>
<field name="contract_type_1_s">external</field>
<field name="contract_change_date_1_dt">2012-09-01T00:00:00Z</field>
<field name="contract_type_2_s">inhouse</field>
<field name="contract_change_date_2_dt">2012-09-01T00:00:00Z</field>
</doc>
ここでユーザーが契約タイプが「外部」の顧客を検索すると、IDが101と102のドキュメントが結果に含まれます。ここで、クエリに一致した契約のさまざまなフィールドを返したいと思います。
この例では、ドキュメント102の場合はcontract_change_date_1_dt、ドキュメント101の場合はcontract_change_date_2_dtである必要があります。これは、契約番号 1 がドキュメント 102 の外部であり、契約番号 2 がドキュメント 101 の外部であるためです。
組み込みコンポーネントでこの動作を達成する方法はありますか?
ハイライトコンポーネントを使用してクエリに一致したフィールドを見つけることができることを知っています。
私は次の解決策に行き着きましたが、Solr を拡張する必要があります。
- 必要なフィールドを識別するために QParser を記述し、それらを fl-param に追加します。
- 結果をクライアントに返す前にハイライトクエリを実行する
- 結果のすべてのドキュメントを繰り返し処理し、ドキュメントごとのクエリに一致したフィールドを結果リストに追加します
問題が明確になったことを願っています。これをアーカイブするための良い方法である提案は、本当に感謝しています。
挨拶ルネ