2017-11-10 7 views
0

Hier gibt ist mein Code: -solrj das gleiche Ergebnis für verschiedene Abfragen

SolrClient client = new HttpSolrClient.Builder("http://arlmsendeavour01:8983/solr/ImageMatch").build(); 

    SolrQuery query = new SolrQuery(); 
    query.setRequestHandler("/select"); 
    //System.currentTimeMillis(); 
    String q = "{!cache=false}*:*&debugQuery=true&sort=lirefunc(eh,\"opKg0dKEtZOSsaSBkfPChsTEopGykqHExYTEw5GylbKx8KKXkqHRww==\")+asc"; 
    query.setQuery("q"); 

    QueryResponse response = null; 
    try { 
     response = client.query(query); 
    } catch (SolrServerException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    SolrDocumentList results = response.getResults(); 
    for (int i = 0; i < results.size(); ++i) { 
     System.out.println(results.get(i)/*.getFieldValue("id")*/); 
    } 

Ich verwende eine Funktion Abfrage lirefunc, wo der erste Parameter definiert, ob es sich um eine Farbe oder Kante oder Textur und der zweite Parameter ist das extrahierte Feature aus dem Bild. Jedes Mal, wenn ich den Code ausführe, der sogar für verschiedene Bilder und verschiedene Funktionen verwendet wird, erhalte ich die gleiche Ausgabe, als wenn er aus dem Solr-XML extrahiert würde. Die Ausgabe bleibt für alle Arten von Abfragen gleich. Wo gehe ich falsch?

+0

'query.setQuery ("q");' - meinen Sie 'query.setQuery (q);' (ohne Anführungszeichen qround * * q **)? – Maciek

Antwort

0

query.setQuery("q"); - dies setzt die Abfrage auf die Zeichenfolge "q". Ich bin sicher, das ist nicht das, was du vorhattest.

Die Methode setQuery wird auch nicht verwendet, um eine Abfragezeichenfolge festzulegen - sie wird verwendet, um den Wert q (die Abfrage) auf Solr festzulegen.

Es gibt separate methods for each part of the request to Solr in SolrJ.

die sort= Parameter einzustellen, verwenden addSort:

query.addSort(SortClause.desc("lirefunc(eh,\"opKg0dKEtZOSsaSBkfPChsTEopGykqHExYTEw5GylbKx8KKXkqHRww==\")"));

+0

Es hat einmal funktioniert. Aber das nächste Mal wurde die Ausgabe aus dem Solr-Cache ausgewählt. Was soll ich verwenden, um den Cache auf false zu setzen? Veröffentlichen meines aktualisierten Codeausschnitts hier. Zeichenfolge q = "{! Cache = false} *: *"; query.setQuery ("q"); query.addSort (SortClause.asc ("lirefunc (cl, \" FQYiEB4aDxYQDxAODBAPEBQQDxAQEAoYDxMSEBA0EAUIDw4 = \ ")")); – Manali

+0

Sie setzen die Abfrage immer noch auf '" q "'. Wahrscheinlich möchtest du 'query.setQuery (q)'. – MatsLindh

+0

Danke @MatsLindh es hat gut funktioniert :) – Manali

Verwandte Themen