EasyNet.Solr 4.4.0发布及例子

EasyNet.Solr 4.4.0已经发布,可以直接从http://easynet.codeplex.com/ 下载试用并反馈。最新版本进行了以下改动:

1.根据Solr的变动,更新时依据ContentType来确定提交的数据类型(XML、Javabin、Json等等)。

2.ISolrUpdateOperations、ISolrQueryOperations接口添加了collection参数。

3.只维护基于Javabin协议的实现,其他基于XML、Json等等可以自行实现。

4.SolrQueryConnection采用POST方式,以支持长查询。

EasyNet.Solr简单易用,扩展性强,一般不会因为Solr的版本更新,变更业务代码。

以下是基于Solr 4.4.0发布版本中的例子:

初始化:

 1         static OptimizeOptions optimizeOptions = new OptimizeOptions();
 2         static ISolrResponseParser<NamedList, ResponseHeader> binaryResponseHeaderParser = new BinaryResponseHeaderParser();
 3         static IUpdateParametersConvert<NamedList> updateParametersConvert = new BinaryUpdateParametersConvert();
 4         static ISolrUpdateConnection<NamedList, NamedList> solrUpdateConnection = new SolrUpdateConnection<NamedList, NamedList>() { ServerUrl = "http://localhost:8983/solr/" };
 5         static ISolrUpdateOperations<NamedList> updateOperations = new SolrUpdateOperations<NamedList, NamedList>(solrUpdateConnection, updateParametersConvert) { ResponseWriter = "javabin" };
 6 
 7         static ISolrQueryConnection<NamedList> connection = new SolrQueryConnection<NamedList>() { ServerUrl = "http://localhost:8983/solr/" };
 8         static ISolrQueryOperations<NamedList> operations = new SolrQueryOperations<NamedList>(connection) { ResponseWriter = "javabin" };
 9 
10         static IObjectDeserializer<Example> exampleDeserializer = new ExampleDeserializer();
11         static ISolrResponseParser<NamedList, QueryResults<Example>> binaryQueryResultsParser = new BinaryQueryResultsParser<Example>(exampleDeserializer);

创建索引:

 1         /// <summary>
 2         /// 创建索引
 3         /// </summary>
 4         static void Index()
 5         {
 6             var docs = new List<SolrInputDocument>();
 7             var doc = new SolrInputDocument();
 8             doc.Add("id", new SolrInputField("id", "SOLR1000"));
 9             doc.Add("name", new SolrInputField("name", "Solr, the Enterprise Search Server"));
10             doc.Add("features", new SolrInputField("features", new String[] { "Advanced Full-Text Search Capabilities using Lucene", "Optimized for High Volume Web Traffic", "Standards Based Open Interfaces - XML and HTTP", "Comprehensive HTML Administration Interfaces", "Scalability - Efficient Replication to other Solr Search Servers", "Flexible and Adaptable with XML configuration and Schema", "Good unicode support: h&#xE9;llo (hello with an accent over the e)" }));
11             doc.Add("price", new SolrInputField("price", 0.0f));
12             doc.Add("popularity", new SolrInputField("popularity", 10));
13             doc.Add("inStock", new SolrInputField("inStock", true));
14             doc.Add("incubationdate_dt", new SolrInputField("incubationdate_dt", new DateTime(2006, 1, 17, 0, 0, 0, DateTimeKind.Utc)));
15 
16             docs.Add(doc);
17 
18             var result = updateOperations.Update("collection1", "/update", new UpdateOptions() { OptimizeOptions = optimizeOptions, Docs = docs });
19             var header = binaryResponseHeaderParser.Parse(result);
20 
21             System.Console.WriteLine(string.Format("Update Status:{0} QTime:{1}", header.Status, header.QTime));
22             System.Console.ReadLine();
23         }

Set原子操作:

 1         /// <summary>
 2         /// Set原子操作
 3         /// </summary>
 4         static void AtomSet()
 5         {
 6             var docs = new List<SolrInputDocument>();
 7             var doc = new SolrInputDocument();
 8             doc.Add("id", new SolrInputField("id", "SOLR1000"));
 9 
10             var setOper = new Hashtable();
11             setOper.Add("set", "Solr");
12 
13             doc.Add("name", new SolrInputField("name", setOper));
14 
15             docs.Add(doc);
16 
17             var result = updateOperations.Update("collection1", "/update", new UpdateOptions() { OptimizeOptions = optimizeOptions, Docs = docs });
18             var header = binaryResponseHeaderParser.Parse(result);
19 
20             System.Console.WriteLine(string.Format("Update Status:{0} QTime:{1}", header.Status, header.QTime));
21             System.Console.ReadLine();
22         }

Add原子操作:

 1         /// <summary>
 2         /// Add原则操作
 3         /// </summary>
 4         static void AtomAdd()
 5         {
 6             var docs = new List<SolrInputDocument>();
 7             var doc = new SolrInputDocument();
 8             doc.Add("id", new SolrInputField("id", "SOLR1000"));
 9 
10             var addOper = new Hashtable();
11             addOper.Add("add", "add a test feature ");
12 
13             doc.Add("features", new SolrInputField("features", addOper));
14 
15             docs.Add(doc);
16 
17             var result = updateOperations.Update("collection1", "/update", new UpdateOptions() { OptimizeOptions = optimizeOptions, Docs = docs });
18             var header = binaryResponseHeaderParser.Parse(result);
19 
20             System.Console.WriteLine(string.Format("Update Status:{0} QTime:{1}", header.Status, header.QTime));
21             System.Console.ReadLine();
22         }

根据id删除:

 1         /// <summary>
 2         /// 根据id删除
 3         /// </summary>
 4         static void Delete()
 5         {
 6             var result = updateOperations.Update("collection1", "/update", new UpdateOptions() { OptimizeOptions = optimizeOptions, DelById = new string[] { "SOLR1000" } });
 7             var header = binaryResponseHeaderParser.Parse(result);
 8 
 9             System.Console.WriteLine(string.Format("Update Status:{0} QTime:{1}", header.Status, header.QTime));
10             System.Console.ReadLine();
11         }

 

查询:

 1         /// <summary>
 2         /// 查询
 3         /// </summary>
 4         static void Query()
 5         {
 6             var result = operations.Query("collection1", "/select", SolrQuery.All, null);
 7             var header = binaryResponseHeaderParser.Parse(result);
 8 
 9             var examples = binaryQueryResultsParser.Parse(result);
10 
11             System.Console.WriteLine(string.Format("Query Status:{0} QTime:{1} Total:{2}", header.Status, header.QTime, examples.NumFound));
12             System.Console.ReadLine();
13         }

实体类及反序列器:

 1     /// <summary>
 2     /// 实体类
 3     /// </summary>
 4     class Example
 5     {
 6         public string Id { get; set; }
 7 
 8         public string Name { get; set; }
 9 
10         public string[] Features { get; set; }
11 
12         public float Price { get; set; }
13 
14         public int Popularity { get; set; }
15 
16         public bool InStock { get; set; }
17 
18         public DateTime IncubationDate { get; set; }
19     }
20 
21     /// <summary>
22     /// 反序列化器
23     /// </summary>
24     class ExampleDeserializer : IObjectDeserializer<Example>
25     {
26         public IEnumerable<Example> Deserialize(SolrDocumentList result)
27         {
28             foreach (SolrDocument doc in result)
29             {
30                 yield return new Example()
31                 {
32                     Id = doc["id"].ToString(),
33                     Name = doc["name"].ToString(),
34                     Features = (string[])((ArrayList)doc["features"]).ToArray(typeof(string)),
35                     Price = (float)doc["price"],
36                     Popularity = (int)doc["popularity"],
37                     InStock = (bool)doc["inStock"],
38                     IncubationDate = (DateTime)doc["incubationdate_dt"]
39                 };
40             }
41         }
42     }

 

转载于:https://www.cnblogs.com/TerryLiang/p/3288384.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、付费专栏及课程。

余额充值