zoukankan      html  css  js  c++  java
  • 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的具体使用和一些原则技巧。

     
  • 相关阅读:
    sharepoint2013搜索
    jquery文档
    jquery 修改样式
    文本区使用
    jquery重置
    jquery 获取某a标签的href地址 实现页面加载时跳转
    js学习
    《当裸辞的程序猿遇上最冷季九》——累觉不爱,暂时停更
    《当裸辞的程序猿遇上最冷季八》——第一次约女孩吃饭
    《当裸辞的程序猿遇上最冷季七》—国庆回家
  • 原文地址:https://www.cnblogs.com/TerryLiang/p/2034847.html
Copyright © 2011-2022 走看看