2016-04-05 4 views
0

Ich habe ein seltsames Problem. Sieht aus wie ein Fehler in der SolrJ-API:SolrJ 5.5.0 Abfrage codiert den qf-Wert (Query Fields) falsch oder gar nicht

Wenn ich versuche, eine Suchabfrage mit edismax auszuführen, wird das Feld "qf" nicht richtig codiert.

Ich versuche, dies als meine "qf" Wert zu verwenden:

Titel^40 + details_plain^20

SolrQuery.set() Methode fügt diese auf die Abfrage als Es funktioniert nicht, da es URL-codiert werden muss.

Wenn ich es selbst url kodieren, wird es:

QF = title% 5E40 + details_plain% 5E20

Jedoch, wenn ich, dass in der Abfrage festgelegt, die sich ergebende endgültige Abfrage automatisch wieder codiert und macht es:

QF = title% 255E40% 2Bdetails_plain% 255E20

Welche auch falsch ist und die Abfrage nicht sagen " undefinierter Feldtext "weil Solr nicht weiß, nach was ich suchen möchte, also versuchte es, auf dem Standard" Text "Feld zu suchen.

Hier ist ein Ausschnitt aus dem Code:

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); 

Warum es nicht die ursprüngliche Zeichenfolge kodieren, sondern kodiert sie wieder, wenn ich es als eine codierte Zeichenfolge senden?

Ich könnte etwas übersehen, also lassen Sie mich wissen, was Sie alle denken. Mache ich etwas falsch oder soll ich einfach den Solr-Quellcode bekommen und versuchen, das selbst zu beheben?

Antwort

0

Soweit ich mich erinnern kann, sollten Sie sich kein Feld codieren. Der Codier-/Decodierungsteil wird durch solrj transparent gehandhabt.

0

Gelöst. Ich schreibe hier die Lösung für jeden, der unglücklicherweise den gleichen dummen Fehler gemacht hat wie ich.

Das Problem war in dieser Zeile:

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

der Parametername mit einem Kapital sein "Deftype" sollte T anstelle eines kleinen t wie:

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

Im Idealfall in einem solchen Dienste Parameternamen sollte alles Kleinbuchstaben sein, um die Zeit der Leute in solchen Ausgaben nicht zu verschwenden, aber es ist, was es ist. Vielleicht werden sie in einer anderen SOLR-Version dazu führen, dass der Parameter name case ignoriert. Man kann hoffen!

+0

In Ihrer Frage handelt es sich um ein Codierungsproblem, die Antwort ist über einen falschen Parameter. Bist du sicher, dass dieses q/a Sinn macht? IMHO sollten Sie es entweder neu schreiben oder löschen. – freedev