如何在Solr中将ResponseWriter设置为非默认值

时间:2012-03-07 16:43:24

标签: java solr lucene solrj

我有以下代码,它只是搜索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 个答案:

答案 0 :(得分:4)

SolrJ仅支持javabinxml格式(可使用CommonHttpSolrServer.setParser配置)。

但是你为什么要使用JSON?到目前为止,Javabin是提供最佳解压缩速度的格式,其缺点是人类不可读,与JSON和XML相反(在这种情况下,这不是问题,因为SolrJ正在为您解析结果)。

答案 1 :(得分:0)

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