2つの異なる単語を使用して2つのフィールドでSolrを検索し、両方を含む結果のみを取得することは可能ですか?
たとえば、フィールド "type"および "location"がある場合、type = 'furniture'およびlocation = 'office'を含む結果のみが必要です。
ブール演算子を使用して、個々のフィールドを検索できます。
q=type:furniture AND location:office
値が固定されている場合は、パフォーマンスのフィルタークエリを使用することをお勧めします。
fq=type:furniture AND location:office
推奨される解決策には、特殊文字のエスケープに注意する必要があるという欠点があります。ユーザーが「type:d'or AND location:coffee break」を検索すると、クエリは失敗します。
2つのedismaxハンドラーを組み合わせることをお勧めします。
<requestHandler name="/combine" class="solr.SearchHandler" default="false">
<lst name="invariants">
<str name="q">
(_query_:"{!edismax qf='type' v=$uq1}"
AND _query_:"{!edismax qf='location' v=$uq2}")
</str>
</lst>
</requestHandler>
次のようにリクエストハンドラを呼び出します。
http://localhost:8983/solr/collection1/combine?uq1=furniture&uq2=office
説明
Solr Docs
DismaxRequestハンドラーでboostQuery関数を次のように使用することもできます。
type=dismax&bq=type:furniture AND location:office
fq=type:furniture AND location:office
ANDを使用する代わりに、これは2つのフィルタークエリに分割することもできます。
fq=type:furniture
fq=location:office