Как установить ResponseWriter не по умолчанию в Solr - PullRequest
1 голос
/ 07 марта 2012

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

SolrServer server = new CommonsHttpSolrServer(url);
SolrQuery searchquery = new SolrQuery("company profile");
QueryResponse response = server.query(searchquery)

Я хочу получить ответ в формате json, отличный от значения по умолчанию - xml.Поэтому я вошел в файл solrconfig.xml и включил следующую строку:

<queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter" />

Однако из консоли я все еще получаю кодировку wt = javabin в запросе поискового запроса.

Кроме того, я изменил приведенный выше код следующим образом:

SolrServer server = new CommonsHttpSolrServer(url);
SolrQuery searchquery = new SolrQuery("company profile");
searchquery.setParam("wt", "json");
QueryResponse response = server.query(searchquery)

Но я все еще получаю кодированный wt=javabin и добавленный wt=json, так что запрос теперь выглядит следующим образом:

webapp/solr path=/select params={wt=javabin&wt=json}

Есть что-то, что я делаю не так?

Спасибо

Ответы [ 2 ]

4 голосов
/ 07 марта 2012

SolrJ поддерживает только форматы javabin и xml (настраивается с помощью CommonHttpSolrServer.setParser ).

Но почему вы хотите использовать JSON?Javabin - безусловно, формат, который обеспечивает лучшую скорость распаковки, его недостатком является то, что он не читается человеком, в отличие от JSON и XML (что не является проблемой в этом случае, так как SolrJ анализирует результат для вас).

0 голосов
/ 08 марта 2012

С SolrJ и json-lib я смог получить ответ json, например:

SolrServer server = new CommonsHttpSolrServer(url);
SolrQuery searchquery = new SolrQuery("company profile");
QueryResponse response = server.query(searchquery)

JSONArray jsonObject = JSONArray.fromObject( response.getResults() );
log.log(Level.INFO, "received jsonObject is {0}", jsonObject.toString());
Iterator data = jsonObject.iterator();

SolrResultBean bean = new SolrResultBean();
List output = new ArrayList();
while(data.hasNext()) {
  output.add(data.next());
}
log.log(Level.INFO, "json items in the List are {0}", output);
bean.setObject(output);

// wicket page redirect
setResponsePage(SearchPage.class, new PageParameters());
...