2011-09-09 3 views
0

J'ai la requête suivante que je pris de mon URLInterrogation dans solr

public static String query="pen&mq=pen&f=owners%5B%22abc%22%5D&f=application_type%5B%22cde%22%5D"; 

Je veux interroger solr en utilisant cette requête

CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8080/solr/");   
server.setParser(new XMLResponseParser());   
SolrQuery solrQuery = new SolrQuery(); 
solrQuery.setQuery(query); 
QueryResponse qr =server.query(solrQuery); 
SolrDocumentList sdl = qr.getResults(); 

System.out.println("Found: " + sdl.getNumFound()); 

J'ai vérifié ma requête dans le fichier logs tomcat et il est traduit comme

path=/select params={version=2&wt=javabin&q=pen%26mq%3Dpen%26f%3Downers%255B%2522abc%2522%255D%26f%3Dapplication_type%255B%2522cde%2522%255D` 

et il me donne 0 résultat malgré 500 docs. J'ai essayé de décoder ma requête en utilisant

URLDecoder.decode(query,"UTF-8"); 

mais il a commencé à se plaindre de « [ » signes.

org.apache.lucene.queryParser.ParseException: Encountered " "]" "] 

Comment dois-je interroger le serveur solr en utilisant cette requête? Est-il nécessaire d'analyser la requête et de prendre la valeur de chaque méthode filtre, puis utiliser

solrQuery.setFilterQueries() 

. Quelqu'un peut-il m'aider s'il vous plait

Répondre

3

Si vous comparez ce que vous avez pris de l'url dans votre appel manuel à Solr et ce qui est passé comme paramètres à l'appel solr de Solrj selon les logs tomcat, ils ne correspondent pas .

On dirait que vous passez des paramètres url encodés dans votre appel: solrQuery.setQuery(query) et que Solrj applique un codage à ces paramètres déjà codés. Vous pouvez voir ce où pen&mq=pen est tourné itnto q=pen%26mq%3Dpen

Basé sur le Solrj Wiki Page je suggère la mise en tous vos paramètres de requête en utilisant l'option query.setParam. Donc, vous devez faire ce qui suit:

SolrQuery solrQuery = new SolrQuery(); 
solrQuery.setQuery("pen"); 
solrQuery.setParam("mq","pen"); 
solrQuery.setParam("f","owners[\"abc\"]"); 
solrQuery.setParam("f","application_type[\"cde"\]"); 
QueryResponse qr = server.query(solrQuery); 
SolrDocumentList sdl = qr.getResults(); 

System.out.println("Found: " + sdl.getNumFound()); 

Mise à jour: conversion complète Ajouté à setParams.

+0

est donc nécessaire pour moi d'analyser la chaîne de requête que j'ai pris de l'url – sparkle

+1

Dans le cas de l'utilisation de la SolrJ, oui. Vous ne pouvez pas prendre une URL directe que vous avez construite à partir de (je suppose) la page Admin Solr et la coller dans SolrJ comme requête. Vous devez construire les mêmes paramètres en utilisant les méthodes SolrJ. Je vais répondre à tous vos paramètres dans la question. –