私は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");
ご協力いただければ幸いです。
'query.setQueryType query.set( "qt"、 "search")の代わりに '' search ")'を実行します。 – javanna
ありがとうJayendra。私はあなたが示唆するように新しいリクエストハンドラを作成しようとしましたが、コードは常に既存のリクエストハンドラ(サンプルの設定ファイルにあったデフォルトの "/ select")を使用しているようです。既存のリクエストハンドラを変更することで、これを動作させることができました。しかし、それは私がクエリの種類の間で選択することはできませんを意味します。 – Joe
ああ、ついにこの作品を手に入れました。上記の解決策は多かれ少なかれ正しいです。ソースに潜入した後、私はrequestHandlerの名前を "/ search"とquery.set( "qt"、 "/ search")に設定する必要があることに気付きました。 QueryRequestは明示的に "/"を探します。それ以外の場合は "/ select"を使用します。 – Joe