Запросы в Solr - PullRequest
       32

Запросы в Solr

0 голосов
/ 09 сентября 2011

У меня есть следующий запрос, который я взял с моего URL

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

Я хочу запросить solr, используя этот запрос

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

Я проверил свой запрос в файле журналов tomcat, и онпереводится как

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

, и это дает мне 0 результатов, несмотря на наличие 500 документов.Я попытался декодировать свой запрос, используя

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

, но потом он начал жаловаться на знаки "[".

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

Как мне следует запрашивать сервер solr, используя этот запрос?Нужно ли анализировать запрос и принимать значение каждого фильтра, а затем использовать метод

 solrQuery.setFilterQueries()

.Может кто-нибудь, пожалуйста, помогите мне в этом

1 Ответ

3 голосов
/ 09 сентября 2011

Если вы сравните то, что вы взяли с URL-адреса в вашем ручном вызове Solr, и то, что передается в качестве параметров для вызова solr из Solrj согласно журналам tomcat, они не совпадают.

Похоже, вы передаете закодированные параметры url в своем вызове: solrQuery.setQuery(query) и затем Solrj применяет кодирование к этим уже закодированным параметрам.Вы можете видеть это, когда pen&mq=pen превращается в q=pen%26mq%3Dpen

На основе Solrj Wiki Page Я бы предложил установить все параметры вашего запроса, используя опцию query.setParam.Поэтому вам нужно будет сделать следующее:

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

Обновление: Добавлено полное преобразование в setParams.

...