0

特定の条件に基づいてSolrでクエリフィールドを定義することは可能ですか? たとえば、テキスト、タイトル、製品の 3 つのフィールドがあります。solr 構成定義:

<str name="qf">text^0.5 title^10.0 Product</str>

ここで探しているのは、特定の条件が満たされた場合にのみ、検索可能なフィールドとして「製品」を含めることです。たとえば、作成者が「Tom」の場合は、製品も検索します。

edismax を使用してクエリ時にそれを行う方法はありますか?

別の方法として、インデックス時に製品情報をドキュメントのテキストまたはタイトル (著者=Tom) に追加して、検索できるようにすることもできます。しかし、私は可能であればこれを避けようとしています。

任意のポインタをいただければ幸いです。

-ありがとう

4

3 に答える 3

5

異なる条件で異なるフィールドを検索するには、まずその特定の条件を検索する必要があるため、複数のクエリを発行することとほぼ同じです。


つまり、1 回限りのクエリとして実行する必要がある場合 (たとえば、すぐに使える並べ替え/グループ化/その他の solr 機能など)、ネストされたクエリを使用できます。

2 つの異なる条件を定義する場合 (元の質問のように、OR 句を追加して簡単に拡張できます)、qパラメーターは次の値を受け取ることができます。

_query_:"{!edismax fq=$fq1 qf=$qf1 v=$condQuery}"
OR
_query_:"{!edismax fq=$fq2 qf=$qf2 v=$condQuery}"

クエリはParameter Dereferencingを使用するため、パラメーターを solr に渡す前に特殊文字を手動でエスケープする必要はありません。

  • fq1 - 最初の特別な条件
  • qf1 - 最初の特別な条件を検索するフィールドのリスト ( fq1 )
  • fq2 - 2 番目の特別な条件
  • qf2 - 最初の特別な条件を検索するフィールドのリスト ( fq2 )
  • condQuery - 実際の検索語/クエリ

fq1は、ベースラインを定義するために空にすることができます (この特定のケースでは、 と で検索しますがtextでは検索しtitleませんproduct)。

生のパラメーター自体は次のようになります。

fq1=&qf1=text^0.5 title^10.0&fq2=author:"Tom"&qf2=text^0.5 title^10.0 Product&condQuery=5

最終クエリは次のようになります。

http://localhost:8983/solr/collection1/select?q=_query_%3A%22%7B!edismax+fq%3D%24fq1+qf%3D%24qf1+v%3D%24condQuery%7D%22+OR+_query_%3A%22%7B!edismax+fq%3D%24fq2+qf%3D%24qf2+v%3D%24condQuery%7D%22&fl=*%2Cscore&wt=xml&indent=true&fq1=&qf1=text^0.5%20title^10.0&fq2=author:%22Tom%22&qf2=text^0.5%20title^10.0%20Product&condQuery=5

.. または solr 応答で solr によって返される同じクエリ (構造化された方法で表示するためだけに提供されます):

<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">1</int>
        <lst name="params">
            <str name="q">_query_:"{!edismax fq=$fq1 qf=$qf1 v=$condQuery}" OR _query_:"{!edismax fq=$fq2 qf=$qf2 v=$condQuery}"</str>
            <str name="condQuery">5</str>
            <str name="indent">true</str>
            <str name="fl">*,score</str>
            <str name="fq1"/>
            <str name="qf1">text^0.5 title^10.0</str>
            <str name="fq2">author:"Tom"</str>
            <str name="qf2">text^0.5 title^10.0 Product</str>
            <str name="wt">xml</str>
        </lst>
    </lst>
    <result name="response" numFound="..." start="..." maxScore="...">
        ...
    </result>
</response>

機能しますが、クエリ時間に与える影響を考慮し (各条件には個別の内部検索クエリがあるため)、特定のケースにどのように影響するかを測定することをお勧めします。

于 2014-09-30T20:34:50.330 に答える
0

自分で試したわけではありませんが、http://wiki.apache.org/solr/FunctionQuery#Boolean_Functionsを使用してこれを達成できるようです

于 2014-09-30T06:59:48.413 に答える