在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>定义如下;

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     }

相关文章:

  • 2021-10-15
  • 2021-07-26
  • 2021-11-30
  • 2021-07-18
  • 2021-09-29
  • 2022-12-23
  • 2022-12-23
  • 2021-05-14
猜你喜欢
  • 2021-10-01
  • 2021-10-08
  • 2022-03-01
  • 2021-11-28
  • 2021-11-30
  • 2021-12-28
  • 2022-01-08
相关资源
相似解决方案