我有以下代码,它只是搜索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}
我有什么问题吗?
由于
答案 0 :(得分:4)
SolrJ仅支持javabin
和xml
格式(可使用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());