處理xml或者json格式返回資料之EasyNet.Solr

來源:互聯網
上載者:User

處理xml或者json格式返回資料之easynet.solr
在easynet.solr中,有兩個介面最重要,一個是轉碼器介面icodec,一個是solr輸出結果解析器介面isolrresponseparser<st, dt>。
easynet.solr內建了兩個轉碼器實現:javabincodec,textcodec。javabincodec對應solr中基於javabin協議,textcodec對應solr中的xml、json等基於文本的協議。相應定義了binarycodecfactory,用於建立javabincodec,textcodecfactory用於建立textcodec。在solrconnection中有個codecfactory的屬性,這是
public class example
2     {
3         public string id { get; set; }
4         public string name { get; set; }
5         public ilist<string> features { get; set; }
6         public datetime modifieddatetime { get; set; }
7     }
定義exampleobjectdeserialize用於還原序列化:

view code
 1   public class exampleobjectdeserialize : iobjectdeserialize<example>
 2     {
 3         public ienumerable<example> deserialize(solrdocumentlist result)
 4         {
 5             var examples = new list<example>();
 6
 7             foreach (solrdocument doc in result)
 8             {
 9                 examples.add(new example()
10                 {
11                     id = doc["id"].tostring(),
12                     name = doc["name"].tostring(),
13                     modifieddatetime = convert.todatetime(doc["last_modified"]),
14                     features = (ilist<string>)doc["features"]
15                 });
16             }
17
18             return examples;
19         }
20     }
 處理xml格式返回資料:

view code
 1             var codefactory = new textcodecfactory();
 2             var con = new solrconnection<string>("http://localhost:8088/solr") { codecfactory = codefactory };
 3             var objectdeserialize = new exampleobjectdeserialize();
 4             var qop = new solrqueryoperations<string>(con);
 5             var options = new namevaluecollection();
 6
 7             options.add(commonparams.start, "0");
 8             options.add(commonparams.rows, "10");
 9             options.add(highlightparams.highlight, "true");
10             options.add(highlightparams.fields, "name");
11             options.add(commonparams.wt, "xml");
12
13             var response = qop.query(new solrquery("name:terry"), options);
14
15             //解析返回頭資訊
16             var xmlresponseheaderparser = new xmlresponseheaderparser();
17
18             var responseheader = xmlresponseheaderparser.parser(response);
19
20             //解析高亮
21             var xmlhighlightingparser = new xmlhighlightingparser();
22
23             var highlighting = xmlhighlightingparser.parser(response);
24
25             //解析查詢結果
26             var xmlqueryresultsparser = new xmlqueryresultsparser<example>(objectdeserialize);
27
28             var examples = xmlqueryresultsparser.parser(response);
 處理json格式返回資料:

view code
 1             var codefactory = new textcodecfactory();
 2             var con = new solrconnection<string>("http://localhost:8088/solr") { codecfactory = codefactory };
 3             var objectdeserialize = new exampleobjectdeserialize();
 4             var qop = new solrqueryoperations<string>(con);
 5             var options = new namevaluecollection();
 6
 7             options.add(commonparams.start, "0");
 8             options.add(commonparams.rows, "10");
 9             options.add(highlightparams.highlight, "true");
10             options.add(highlightparams.fields, "name");
11             options.add(commonparams.wt, "json");
12
13             var response = qop.query(new solrquery("name:terry"), options);
14
15             //解析頭資訊
16             var jsonresponseheaderparser = new jsonresponseheaderparser();
17
18             var responseheader = jsonresponseheaderparser.parser(response);
19
20             //解析高亮
21             var jsonhighlightingparser = new jsonhighlightingparser();
22
23             var highlighting = jsonhighlightingparser.parser(response);
24
25             //解析查詢結果
26             var jsonqueryresultsparser = new jsonqueryresultsparser<example>(objectdeserialize);
27
28             var examples = jsonqueryresultsparser.parser(response);

上面的執行個體處理過程是

1.定義icodecfactory,由於xml、json都是基於文本的,所以我們使用textcodecfactory。

2.建立指定icodecfactory的solr串連isolrconnection。

3. 建立isolrqueryoperations<t>用於solr查詢,t為返回結構資料類型,此處應該為string類型。


4.預先定義好的iobjectdeserialize<t>,對象還原序列化介面實現。t為要還原序列化為的對象資料類型。

5.構造查詢字串及查詢選項。

6.進行查詢,返回結果。

7.對於查詢結果,可以用各種實現isolrresponseparser<st, dt>介面的解析器進行解析。st為原資料類型,此處為stirng類型,dt為解析結果的資料類型。 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.