2016-04-05 12 views
0

私は奇妙な問題に直面しています。 SolrJ APIのバグのようです:edismaxで検索クエリを実行しようとすると、「qf」フィールドが正しくエンコードされません。SolrJ 5.5.0 qf値(クエリフィールド)が正しく照会されない、または全く照会されない

私は "QF" の値としてこれを使用しようとしています:

タイトル^ 40 + details_plain^20

SolrQuery.set()メソッドはクエリとしてこれを追加それはエンコードされる必要があるので動作しません。私はそれを自分でエンコードするURLとき

が、それは次のようになります。

QF =タイトル%5E20

しかし5E40 + details_plain%Iは、クエリで、その結果、最終的なクエリが自動的に再びそれをコードしていることを設定しますそしてそれを作る:

QF =タイトルも間違っていると、クエリが言って失敗%255E40%2Bdetails_plain%255E20

」未定義のフィールドテキスト "である。なぜなら、Solrは何を検索したいのか分かっていないので、デフォルトの" text "フィールドで検索しようとしたからだ。ここで

は、コードからの抜粋です:

SolrClient solr=null; 
SolrQuery query = new SolrQuery(); 

solr = new CloudSolrClient(zookeepers, "/"); 
query.set("deftype", searchConfig.getDeftype()); 
    //query.set("df", "details_plain"); //unless i uncomment it the query fails as qf is not correct 
query.set("fl", searchConfig.getFl()); 
query.set("mm", searchConfig.getMm()); 
query.set("qf", searchConfig.getQf()); 
query.set("rows", searchConfig.getRows()); 
query.set("q", searchPhrase); 
query.set("collection", searchConfig.getCollection_name()); 
query.set("indent", "on"); 
query.set("omitHeader", "true"); 
query.set("wt", "json"); 
QueryResponse response = solr.query(query); 

は、なぜそれが元の文字列をエンコードしませんが、私はエンコードされた文字列として送信する場合は、再度それをコードしていますか?

私は何かを見落としている可能性がありますので、あなたのすべてが何を考えているか教えてください。私は何か間違っているのですか?それとも、Solrのソースコードを入手して、これを自分で修正しようとしていますか?

答えて

0

私が覚えている限り、あなたはフィールドをエンコードしてはいけません。エンコード/デコード部分は、solrjによって透過的に処理されます。

0

解決済み。私がやったのと同じ愚かな間違いをするのに十分不幸な人のために、ここにソリューションを投稿する。

問題は、このラインにあった:

このようなサービスのパラメータ名で理想的
query.set("defType", searchConfig.getDeftype()); 

query.set("deftype", searchConfig.getDeftype()); 

パラメータ名は、資本Tの代わりのような小さなトンと「DEFTYPE」でなければなりませんこのような問題で人々の時間を無駄にしないようにすべて小文字でなければならないが、それはそれである。たぶん別のSOLRバージョンでは、パラメータの名前を大文字と小文字を区別しないようにします。誰もが望むことができます!

+0

あなたの質問では、エンコーディングの問題について話していますが、答えは間違ったパラメータに関するものです。このq/aが意味をなさないと確信していますか? IMHOあなたはそれをまっすぐに書き直すか、それを削除する必要があります。 – freedev