一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

处理xml或者json格式返回数据之EasyNet.Solr

时间:2011-05-05 编辑:简简单单 来源:一聚教程网

处理xml或者json格式返回数据之easynet.solr
在easynet.solr中,有两个接口最重要,一个是编解码器接口icodec,一个是solr输出结果解析器接口isolrresponseparser
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 features { get; set; }
6         public datetime modifieddatetime { get; set; }
7     }
定义exampleobjectdeserialize用于反序列化:

view code
 1   public class exampleobjectdeserialize : iobjectdeserialize
 2     {
 3         public ienumerable deserialize(solrdocumentlist result)
 4         {
 5             var examples = new list();
 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)doc["features"]
15                 });
16             }
17
18             return examples;
19         }
20     }
 处理xml格式返回数据:

view code
 1             var codefactory = new textcodecfactory();
 2             var con = new solrconnection("http://localhost:8088/solr") { codecfactory = codefactory };
 3             var objectdeserialize = new exampleobjectdeserialize();
 4             var qop = new solrqueryoperations(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(objectdeserialize);
27
28             var examples = xmlqueryresultsparser.parser(response);
 处理json格式返回数据:

view code
 1             var codefactory = new textcodecfactory();
 2             var con = new solrconnection("http://localhost:8088/solr") { codecfactory = codefactory };
 3             var objectdeserialize = new exampleobjectdeserialize();
 4             var qop = new solrqueryoperations(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(objectdeserialize);
27
28             var examples = jsonqueryresultsparser.parser(response);

上面的实例处理过程是

1.定义icodecfactory,由于xml、json都是基于文本的,所以我们使用textcodecfactory。

2.创建指定icodecfactory的solr连接isolrconnection。

3. 创建isolrqueryoperations用于solr查询,t为返回结构数据类型,此处应该为string类型。


4.预先定义好的iobjectdeserialize,对象反序列化接口实现。t为要反序列化为的对象数据类型。

5.构造查询字符串及查询选项。

6.进行查询,返回结果。

7.对于查询结果,可以用各种实现isolrresponseparser接口的解析器进行解析。st为原数据类型,此处为stirng类型,dt为解析结果的数据类型。 

 

热门栏目