web-dev-qa-db-ja.com

複数のフィールドにわたるSolr検索クエリ

2つの異なる単語を使用して2つのフィールドでSolrを検索し、両方を含む結果のみを取得することは可能ですか?

たとえば、フィールド "type"および "location"がある場合、type = 'furniture'およびlocation = 'office'を含む結果のみが必要です。

41
jay

ブール演算子を使用して、個々のフィールドを検索できます。

q=type:furniture AND location:office

値が固定されている場合は、パフォーマンスのフィルタークエリを使用することをお勧めします。

fq=type:furniture AND location:office
61
Jayendra

推奨される解決策には、特殊文字のエスケープに注意する必要があるという欠点があります。ユーザーが「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

説明

  • 変数$ uq1および$ uq2は、要求パラメーターuq1およびuq2に置き換えられます。
  • 最初のedismaxクエリ(uq1)の結果は、論理ANDによって2番目のedismaxクエリ(uq2)と結合されます

Solr Docs

https://wiki.Apache.org/solr/LocalParams

5
Matthias M

DismaxRequestハンドラーでboostQuery関数を次のように使用することもできます。

type=dismax&bq=type:furniture AND location:office
4
A Null Pointer
fq=type:furniture AND location:office

ANDを使用する代わりに、これは2つのフィルタークエリに分割することもできます。

fq=type:furniture
fq=location:office
1