2

HttpSolrServer応答を json 形式に変換しようとしている検索に取り組んでいます。応答はSolrDocumentList. 私が今持っているコードは次のとおりです。

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

返品を印刷すると、次のように返されます。

{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}]}}

canon彼らのサンプルデータを使用して検索します。

代わりに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現在、応答形式は xml または javabin (xml に設定しています) のみであることがわかっています。これは、実際に返される結果とその形式には影響を与えないようです。

応答をjsonに変換することについて何も見つけられないようです。何か案は?

4

4 に答える 4

5

あなたがやろうとしていることに、solrj ライブラリを使用する必要はありません。CommonsHTTPClient を使用して、HTTP 経由でクエリ パラメータを直接送信し、'wt=json' を設定して、JSON で応答を取得できます。

于 2012-07-05T21:03:54.633 に答える
3

古い質問ですが、同様の問題が発生し、コードを掘り下げた後、応答をjsonに変換できましたが、コードの速度とパフォーマンスについてはまだ懐疑的です.多くの要求が来ています..

以下は私が書いたコードです(JettisonのJSONライブラリを使用し、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では、クエリでwtを明示的に設定できますが、javabin以外の種類を使用できません

それが役に立てば幸い

于 2012-11-08T03:24:40.217 に答える
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

于 2013-03-22T06:31:26.430 に答える