EasyNet.Solr架构

在EasyNet.Solr中,有两个接口最重要,一个是编解码器接口ICodec,一个是Solr输出结果解析器接口ISolrResponseParser<ST, DT>。

ICode定义如下;

View Code
 1  ///   <summary>
 2       ///  编解码器
 3       ///   </summary>
 4       public   interface  ICodec
 5      {
 6           ///   <summary>
 7           ///  对对象进行编码,并输出到流
 8           ///   </summary>
 9           ///   <param name="obj"> 要进行编码的对象 </param>
10           ///   <param name="stream"> 输出流 </param>
11           void  Marshal( object  obj, Stream stream);
12 
13           ///   <summary>
14           ///  对流进行解码
15           ///   </summary>
16           ///   <param name="stream"> 要解码的流 </param>
17           ///   <returns> 解码后的对象 </returns>
18           object  Unmarshal(Stream stream);
19      }

 EasyNet.Solr内置了两个编解码器实现:JavaBinCodec,TextCodec。JavabinCodec对应Solr中基于javabin协议,TextCodec对应Solr中的xml、json等基于文本的协议。相应定义了BinaryCodecFactory,用于创建JavabinCodec,TextCodecFactory用于创建TextCodec。在SolrConnection中有个CodecFactory的属性,这是

ICodecFactory很简单的一个接口,定义如下:

 

View Code
 1       ///   <summary>
 2       ///  编解码工厂
 3       ///   </summary>
 4       public   interface  ICodecFactory
 5      {
 6           ///   <summary>
 7           ///  创建编解码器
 8           ///   </summary>
 9           ///   <returns></returns>
10          ICodec CreateCodec();
11      }

 为了更好的分离及扩展,我没有把SolrConnection设计的很复杂,它就是很简单的用ICodecFactory创建编解码器ICodec,然后把javabin协议对应的NamedList,或者基于xml、json等文本协议对应的字符串写入流,用于更新索引等操作,把输出流转换为javabin协议对应的NamedList,或者字符串文本,用于Solr返回结果处理。

 ISolrResponseParser<ST, DT>定义如下;

View Code
1       ///   <summary>
2       ///  Solr返回解析器泛型接口
3       ///   </summary>
4       ///   <typeparam name="ST"> ST类型返回数据 </typeparam>
5       ///   <typeparam name="DT"> DT类型要解析为的数据 </typeparam>
6       public   interface  ISolrResponseParser < ST, DT >
7      {
8          DT Parser(ST result);
9      }

针对javabin、xml、json,有以下类实现了ISolrResponseParser<ST, DT>接口:

 

BinaryHighlightingParser:用来解析基于javabin协议的高亮结果
BinaryQueryResultsParser:用来解析基于javabin协议的查询对象集合结果
BinaryResponseHeaderParser:用来解析基于javabin协议的输出头结果

 

 

JsonHighlightingParser:用来解析基于json协议的高亮结果
JsonQueryResultsParser:用来解析基于json协议的查询对象集合结果
JsonResponseHeaderParser:用来解析基于json协议的输出头结果

 

 

XmlHighlightingParser:用来解析基于xml协议的高亮结果
XmlQueryResultsParser:用来解析基于xml协议的查询对象集合结果
XmlResponseHeaderParser:用来解析基于xml协议的输出头结果
 

 

 当然将要发布的release版本中肯定会包含Facet查询解析器。

 

接口IUpdateOperationParametersConvert<T> ,用于更新所有操作参数转换,定义如下:

View Code
 1       ///   <summary>
 2       ///  Solr更新操作参数选项转换器泛型接口
 3       ///   </summary>
 4       ///   <typeparam name="T"> 转换为的数据类型 </typeparam>
 5       public   interface  IUpdateOperationParametersConvert < T >
 6      {
 7           ///   <summary>
 8           ///  转换提交参数
 9           ///   </summary>
10           ///   <param name="commitOptions"> 提交选项 </param>
11           ///   <returns> T类型数据 </returns>
12          T ConvertCommitParameters(CommitOptions ?  commitOptions);
13 
14           ///   <summary>
15           ///  转换优化参数
16           ///   </summary>
17           ///   <param name="optimizeOptions"> 优化选项 </param>
18           ///   <returns> T类型数据 </returns>
19          T ConvertOptimizeParamters(OptimizeOptions ?  optimizeOptions);
20 
21           ///   <summary>
22           ///  转换回退参数
23           ///   </summary>
24           ///   <returns> T类型数据 </returns>
25          T ConvertRollbackParameters();
26 
27           ///   <summary>
28           ///  转换添加操作参数
29           ///   </summary>
30           ///   <param name="docs"> Solr输入文档 </param>
31           ///   <param name="addOptions"> 添加选项 </param>
32           ///   <param name="commitOptions"> 提交选项 </param>
33           ///   <param name="optimizeOptions"> 优化选项 </param>
34           ///   <returns> T类型数据 </returns>
35          T ConvertAddParameters(IList < SolrInputDocument >  docs, AddOptions ?  addOptions, CommitOptions ?  commitOptions, OptimizeOptions ?  optimizeOptions);
36 
37           ///   <summary>
38           ///  转换删除参数
39           ///   </summary>
40           ///   <param name="ids"> 可迭代的键值 </param>
41           ///   <param name="queries"> 可迭代的查询 </param>
42           ///   <param name="commitOptions"> 提交选项 </param>
43           ///   <param name="optimizeOptions"> 优化选项 </param>
44           ///   <returns> T类型数据 </returns>
45          T ConvertDeleteParameters(IEnumerable < string >  ids, IEnumerable < ISolrQuery >  queries, CommitOptions ?  commitOptions, OptimizeOptions ?  optimizeOptions);
46      }

 

 

针对javabin、xml、json,有以下类实现了IUpdateOperationParametersConvert<T>接口:
BinaryUpdateOperationParametersConvert:对应基于javabin协议的索引更新、提交、优化、回退、删除等操作
JsonUpdateOperationParametersConvert:对应基于json协议的索引更新、提交、优化、回退、删除等操作
XmlUpdateOperationParametersConvert:对应基于xml协议的索引更新、提交、优化、回退、删除等操作

 

 

 对于Solr的更新、提交、优化、回退、删除索引操作,功能完全等同solrj,在索引更新时,可以同时添加提交、优化操作,进行一步处理。

本着简单的原则,对于Solr查询,我没有进行复杂的封装处理,查询接口ISolrQueryOperations<T> 非常简单,定义如下:

View Code
 1       ///   <summary>
 2       ///  Solr查询操作泛型接口
 3       ///   </summary>
 4       ///   <typeparam name="T"></typeparam>
 5       public   interface  ISolrQueryOperations < T >
 6      {
 7           ///   <summary>
 8           ///  查询
 9           ///   </summary>
10           ///   <param name="query"> Solr查询 </param>
11           ///   <param name="options"> 查询参数 </param>
12           ///   <returns> T类型数据 </returns>
13          T Query(ISolrQuery query, NameValueCollection options);
14      }

 可以参考Solr的wiki(http://wiki.apache.org/solr/),利用EasyNet.Solr.Commons.Params下定义的各种参数,构建查询字符串和查询选项。

 

下一篇将介绍EasyNet.Solr的具体使用和一些原则技巧。

 

 

 

 

 

你可能感兴趣的:(Solr)