2012-07-05 2 views
2

응답을 HttpSolrServer에서 json 형식으로 변환하려고하는 검색 작업을하고 있습니다. 응답은 SolrDocumentList입니다. 내가 지금 가지고있는 코드는 다음과 같습니다 자신의 예제 데이터를 사용하여 canon에 검색solr 응답 (solrdocumentlist)을 json (또는 xml)으로 변환

{numFound=2,start=0,docs=[SolrDocument{cat=[electronics, camera], features=[3x zoop, 7.1 megapixel Digital ELPH, movie clips up to 640x480 @30 fps, 2.0" TFT LCD, 118,000 pixels, built in flash, red-eye reduction], id=9885A004, inStock=true, includes=32MB SD card, USB cable, AV cable, battery, manu=Canon Inc., manufacturedate_dt=Mon Feb 13 10:26:37 EST 2006, name=Canon PowerShot SD500, popularity=7, price=329.95, store=45.17614,-93.87341, weight=6.4}, SolrDocument{cat=[electronics, multifunction printer, printer, scanner, copier], features=[Multifunction ink-jet color photo printer, Flatbed scanner, optical scan resolution of 1,200 x 2,400 dpi, 2.5" color LCD preview screen, Duplex Copying, Printing speed up to 29ppm black, 19ppm color, Hi-Speed USB, memory card: CompactFlash, Micro Drive, SmartMedia, Memory Stick, Memory Stick Pro, SD Card, and MultiMediaCard], id=0579B002, inStock=true, manu=Canon Inc., name=Canon PIXMA MP500 All-In-One Photo Printer, popularity=6, price=179.99, store=45.17614,-93.87341, weight=352.0}]}} 

:

SolrQuery solrQuery = new SolrQuery(query); 
solrQuery.setParam("wt", "json"); //doesn't affect the return format 

QueryResponse rsp = solrServer.query(solrQuery); 
SolrDocumentList docs = rsp.getResults(); 

return docs.toString(); 

내가 반환을 인쇄 할 때, 그것은 다시로 제공됩니다. 내가 대신 return rsp.toString();을 할 경우

나는대로와 헤더 정보를 다시 얻을 :

{responseHeader={status=0,QTime=1,params={indent=true,q=canon\*,wt=xml,version=2.2}},response={numFound=2,start=0,docs=[SolrDocument{cat=[electronics, camera], features=[3x zoop, 7.1 megapixel Digital ELPH, movie clips up to 640x480 @30 fps, 2.0" TFT LCD, 118,000 pixels, built in flash, red-eye reduction], id=9885A004, inStock=true, includes=32MB SD card, USB cable, AV cable, battery, manu=Canon Inc., manufacturedate_dt=Mon Feb 13 10:26:37 EST 2006, name=Canon PowerShot SD500, popularity=7, price=329.95, store=45.17614,-93.87341, weight=6.4}, SolrDocument{cat=[electronics, multifunction printer, printer, scanner, copier], features=[Multifunction ink-jet color photo printer, Flatbed scanner, optical scan resolution of 1,200 x 2,400 dpi, 2.5" color LCD preview screen, Duplex Copying, Printing speed up to 29ppm black, 19ppm color, Hi-Speed USB, memory card: CompactFlash, Micro Drive, SmartMedia, Memory Stick, Memory Stick Pro, SD Card, and MultiMediaCard], id=0579B002, inStock=true, manu=Canon Inc., name=Canon PIXMA MP500 All-In-One Photo Printer, popularity=6, price=179.99, store=45.17614,-93.87341, weight=352.0}]}} 

내가 HttpSolrServer로 응답 형식은 현재 (I XML로 설정) XML 또는 javabin이 될 수 있다는 사실을 알고 . 이것은 실제 결과와 형식에 영향을주지 않는 것으로 보입니다.

응답을 json으로 변환하는 방법을 찾지 못했습니다. 어떤 아이디어?

답변

3

음, 이전 질문이지만 필자는 유사한 문제를 제기하고 코드를 파헤 쳐서 json으로 응답을 변환 할 수 있었지만 아직 코드의 속도와 성능에 회의적입니다. 경우 너무 많은 REQS가 내가 쓴 코드의 조각이 너무 아래

..이되어오고있다 (I는 투하에서 JSON lib 디렉토리를 사용 for 루프의 바보 같은 구조를 무시) :

QueryResponse qp = server.query(solrQuery); 
SolrDocumentList docList= qp.getResults(); 
JSONObject returnResults = new JSONObject(); 
Map<Integer, Object> solrDocMap = new HashMap<Integer, Object>(); 
int counter = 1; 
for(Map singleDoc : docList) 
{ 
    solrDocMap.put(counter, new JSONObject(singleDoc)); 
    counter++; 
} 
returnResults.put("docs", solrDocMap); 

을 기본적으로 json에서 결과를 얻을 수 있습니다 ... solrj doesnt는 javabin 이외의 다른 종류를 사용할 수 있습니다. 쿼리에 설정된 중량은 명시 적으로

4

당신이하려고하는 것에 대해 solrj 라이브러리를 사용할 필요가 없습니다. CommonsHTTPClient를 사용하여 HTTP를 통해 쿼리 매개 변수를 직접 전송하고 'wt = json'을 설정하여 JSON에서 응답을 검색 할 수 있습니다.

2

하는 데 도움이 다음 코드는

SolrDocumentList list = new SolrDocumentList(); 
JSONArray jArray =new JSONArray(); 
QueryResponse result = solr.query(parameters);   
list=result.getResults(); 

for (int i = 0; i < list.size(); i++) { 
    JSONObject json = new JSONObject(list.get(i)); 
    jArray.put(json);   
} 

는 또한 매개 변수 json.nl=map를 추가 작동 바랍니다.

출처 : http://wiki.apache.org/solr/SolJSON

-1

가져 오기 GSON 및 유틸리티 방법을 사용합니다.

+0

자세히 알려주십시오. 나는 이것이 갈 길이라고 생각하지 않는다. –