2012-04-25 15 views
1

私はSOLR 3.6のインデックスを照会するためにsolrj APIを使用しています。私は複数のテキストフィールドを持っていますが、これは異なる重み付けをしたいのです。私が読んだことから、dismaxまたはedismaxのクエリー・タイプを使用してこれを実行できるはずです。私は以下を試しました:Solrjを使用してSOLRのフィールドをブースト

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クエリ構文を保持したいので、私はExtendedDisMaxからDisMaxを選ぶことをお勧めします。 クエリ内の個々の用語を強調することは有効ですが、有効な解決法ではありません。クエリは自動的に生成され、任意の複雑な構文を得ることができるからです。

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

ご協力いただければ幸いです。

答えて

6

ベストな方法のようなあなたのsolrconfig.xmlで要求ハンドラを定義することです -

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

あなたはブーストを微調整することができます - 要求ハンドラを定義するために

<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パラメータを使用します構成はsolr config xmlの設定を変更し、コアをリロードするだけです。

+0

'query.setQueryType query.set( "qt"、 "search")の代わりに '' search ")'を実行します。 – javanna

+0

ありがとうJayendra。私はあなたが示唆するように新しいリクエストハンドラを作成しようとしましたが、コードは常に既存のリクエストハンドラ(サンプルの設定ファイルにあったデフォルトの "/ select")を使用しているようです。既存のリクエストハンドラを変更することで、これを動作させることができました。しかし、それは私がクエリの種類の間で選択することはできませんを意味します。 – Joe

+0

ああ、ついにこの作品を手に入れました。上記の解決策は多かれ少なかれ正しいです。ソースに潜入した後、私はrequestHandlerの名前を "/ search"とquery.set( "qt"、 "/ search")に設定する必要があることに気付きました。 QueryRequestは明示的に "/"を探します。それ以外の場合は "/ select"を使用します。 – Joe

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を設定することもできます(より良いかもしれませんが、私が知っているものは私が知っているものです)

関連する問題