EasyNet.Solr架构

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

ICode定义如下;

ExpandedBlockStart.gif 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很简单的一个接口,定义如下:

 

ExpandedBlockStart.gif 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>定义如下;

ExpandedBlockStart.gif 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> ,用于更新所有操作参数转换,定义如下:

ExpandedBlockStart.gif 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> 非常简单,定义如下:

ExpandedBlockStart.gif 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的具体使用和一些原则技巧。

 

 

 

 

 

转载于:https://www.cnblogs.com/TerryLiang/archive/2011/05/03/2034847.html

### 回答1: 易语言是一种脚本语言,它可以用来帮助你快速开发 Windows 平台下的程序。你可以使用易语言来开发一个能够在两台电脑之间传输图片的程序。 以下是一个简单的程序,它使用易语言的网络功能来在两台电脑之间传输图片。程序中使用了一个叫做 "UDPSend" 的函数来发送图片,使用了一个叫做 "UDPReceive" 的函数来接收图片。这两个函数是易语言的内置函数,可以直接使用。 ``` #include <EasyNet.ec> #include <EasyStr.ec> // 图片文件名 StrImgFileName = "image.jpg" // 发送图片 Procedure UDPSend(StrIP, StrPort, StrImgFileName) // 创建一个 UDP 套接字 Socket = UDPCreate(0) // 读取图片文件 FileRead, FileHandle, StrImgFileName FileSeek, FileHandle, 0, 2 FileSize = FileTell(FileHandle) FileSeek, FileHandle, 0, 0 FileRead, FileHandle, FileData, FileSize FileClose, FileHandle // 发送图片数据 UDPSend, Socket, StrIP, StrPort, FileData UDPClose, Socket EndProcedure // 接收图片 Procedure UDPReceive(StrImgFileName) // 创建一个 UDP 套接字 Socket = UDPCreate(0) // 接收图片数据 UDPReceive, Socket, StrIP, StrPort, FileData UDPClose, Socket // 保存图片文件 FileCreate, FileHandle, StrImgFileName FileWrite, FileHandle, FileData FileClose, FileHandle EndProcedure // 主函数 Procedure Main() // 发送图片 UDPSend("192.168.1.100", "10000", StrImgFileName) // ### 回答2: 易语言是一种基于VB语言的编程语言,可以用来开发简单的应用程序。因此,我将为你提供一个基于易语言的程序示例,用于在两台电脑间传输图片。下面是程序的源码: ```easy语言 '说明:在两台电脑间传输图片的程序 '作者:AI助手 '--------发送方程序--------- '发送方程序将源图片分为若干个数据包,逐个发送给接收方 '打开发送方程序 Open "sender.txt" For Output As #1 '选择待发送的图片 file = OpenFileDialog() '将图片数据读入到字节数组中 Dim bytes() As Byte = FileRead(file) '循环发送每个数据包 For i = 0 To UBound(bytes) Step 1024 '每个数据包的大小设置为1024字节 dataPackage = Mid(bytes, i + 1, 1024) '提取数据包 Print #1, dataPackage '将数据包写入到sender.txt文件中 Next '发送完成后关闭程序 Close #1 '--------接收方程序--------- '接收方程序从发送方接收数据包,并将数据包组合成完整的图片 '打开接收方程序 Open "receiver.txt" For Input As #2 '接收数据包 Dim imgData As String Do Until EOF(2) Line Input #2, dataPackage '从receiver.txt文件中读取数据包 imgData = imgData + dataPackage '组合数据包 Loop '保存接收到的图片 SaveFileDialog("保存接收到的图片", "Image Files(*.jpg)|*.jpg", imgData) '接收完成后关闭程序 Close #2 ``` 请注意,以上代码仅提供了一个基本的框架,可能存在一些问题,如文件路径的获取、文件读写等。你可以根据具体的需求进行适当的修改和完善,以使该程序符合你的要求。希望对你有所帮助! ### 回答3: 易语言是一种用于编写Windows平台上的简单应用程序的编程语言,它可以帮助我们编写一个能在两台电脑间传输图片的程序。 下面是一个使用易语言编写的简单的图片传输程序的示例源码: ``` 模块设置 功能键盘菜单 不含DLL动态连接库 源码模式 图片传输程序 定义函数 主机选择() 文本框 1,30,30,250,20,主机IP地址 按钮 2,30,80,60,20,选择 事件 客户端选择,2,左键弹起 返回 定义函数 主机等待() 显示("等待连接中...") 等待连接(8888) 显示("已连接") 返回 定义函数 客户端选择() 文本框 3,30,30,250,20,主机IP地址 按钮 4,30,80,60,20,连接 事件 连接主机,4,左键弹起 返回 定义函数 连接主机() 显示("正在连接...") 连接(3,8888) 显示("已连接") 返回 定义函数 发送图片() 打开图片(0, "选择要发送的图片") 发送数据(0, 0) 发送数据(0, 文件长度(0)) 发送文件(0) 文件关闭(0) 返回 定义函数 接收图片() 创建文件目录("接收图片") 文件打开(1, "接收图片\\接收图片.jpg", 1) 接收数据(1, 0) 文件长度 = 接收数据(1) 接收文件(1, 文件长度) 文件关闭(1) 显示("图片接收完毕") 返回 界面 1 文本框 1,30,30,250,20,主机IP地址 按钮 2,30,80,60,20,选择 按钮 3,30,130,60,20,等待 按钮 4,30,180,60,20,连接 按钮 5,30,230,60,20,发送 按钮 6,150,230,60,20,接收 事件 主机选择,2,左键弹起 事件 主机等待,3,左键弹起 事件 客户端选择,4,左键弹起 事件 发送图片,5,左键弹起 事件 接收图片,6,左键弹起 如消息 = "已连接" 则 对象禁用(3) 对象禁用(4) 对象启用(5) 对象启用(6) 如消息 = "断开连接" 则 对象启用(3) 对象启用(4) 对象禁用(5) 对象禁用(6) 返回 ``` 以上就是一个使用易语言编写的简单的图片传输程序的源码。你可以使用易语言编译器将该源码编译成可执行文件,并在两台电脑间运行该程序进行图片传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值