2

solrj API を使用して、SOLR 3.6 インデックスをクエリしています。複数のテキスト フィールドがあり、異なる重み付けをしたいと考えています。私が読んだことから、dismax または edismax クエリ タイプを使用してこれを実行できるはずです。私は次のことを試しました:

SolrQuery query = new SolrQuery();
query.setQuery( "title:apples oranges content:apples oranges");
query.setQueryType("edismax");
query.set("qf", "title^10.0 content^1.0");
QueryResponse rsp = m_Server.query( query );

しかし、これはうまくいきません。クエリの種類を設定するために次のバリエーションを試しましたが、違いはないようです。

query.setQueryType("dismax");
query.set("qt","dismax");
query.set("type","edismax");
query.set("qt","edismax");
query.set("type","dismax");

完全な Lucene クエリ構文を保持したいので、DisMax より ExtendedDisMax を好みます。(以下に示すように) クエリ内の個々の用語をブーストすることは機能しますが、クエリは自動的に生成され、構文が任意に複雑になる可能性があるため、有効なソリューションではありません。

query.setQuery( "title:apples^10.0 oranges^10.0 content:apples oranges");

どんな助けでも大歓迎です。

4

2 に答える 2

7

最善の方法は、次のように solrconfig.xml でリクエスト ハンドラーを定義することです。

<requestHandler name="search" class="solr.SearchHandler" default="true">
 <lst name="defaults">
   <str name="echoParams">explicit</str>
   <str name="defType">dismax</str>
   <str name="qf">
      title^1 content^0.8
   </str>
   <str name="q.alt">*:*</str>
   <str name="rows">10</str>
   <str name="fl">*,score</str>
 </lst>
</requestHandler>

そして、qt パラメータを使用してリクエスト ハンドラを定義します -

query.set("qt","search");

solr config xml 構成を変更してコアをリロードするだけで、ブースト構成を微調整できます。

于 2012-04-26T06:03:32.217 に答える
3

プログラムでこれを行うことができるはずです。

ハンドラが定義されている場合:

<requestHandler name="dismax_nl" class="solr.SearchHandler"> <lst name="defaults"> <str name="defType">dismax</str> 

そして次のコード

solrQuery.put("defType", "dismax"); 
solrQuery.put("qf", "comments_nl^20 id^1 name_nl^1 description_nl^0.2 url_nl^0.5 text^0.1"); 

クエリは単純にしてください。qf は (加重) フィールドを定義します。上記の例では、deftype=dismax の代わりに qt=dismax_nl を設定することもできます (これはより良いかもしれませんが、私が示したものは私が知っているものです)

于 2012-05-04T12:40:53.303 に答える