EasyNet.Solr 4.4.0发布及例子

EasyNet 团队发布了 Solr 4.4.0 版本,提供了简化 Solr 集成的工具包,包括更新数据类型识别、接口增强、协议优化等功能。通过实例展示了如何初始化连接、创建索引、执行原子操作、查询等关键操作。适用于希望快速集成 Solr 的开发者。

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个文件EasyNet95.4.zip,在文件中包含: Setup_Server.exe ----------服务器安装程序; Setup_Client.exe ----------客户端安装程序; Readme.txt ----------------说明文件(本文件); ------------------------------------------------------------------------- 运行环境 1、服务器程序 企业版:运行在Win2000/2003/XP Server环境下; 专业版:可运行在Win2000/2003/XP Server环境下,在2003/2000下系统稳定, Ghost版XP系统不稳定。 2、客户端程序可以运行在任何Windows环境下; 3、如果不安装客户端,只进行监控上网、截获邮件、流量监控和网络嗅探, 客户端可以是Linux、Unix等任何操作系统。 4、局域网内不能使用DHCP用动态分配IP,需要使用固定IP。 ------------------------------------------------------------------------- 安装 1.服务器程序 运行Setup_Server.exe,按照屏幕提示进行安装。 可以安装在局域网内任何1台机器上。 2.客户端程序 运行Setup_Client.exe,按照屏幕提示进行安装。 对于运行Win2k/NT/XP的客户机,不必到客户机计算机上安装, 可以通过服务器程序进行远程安装。具体安装在程序“系统设 置”窗口,用鼠标左键双击某个客户机,弹出编辑窗口,按 “远程安装客户端程序”按钮进行安装。 注意:在很多情况下不能进行远程安装,这是因为远程安装使用 RPC远过程调用,有很多病毒程序也利用RPC进行传播, Windows特别为此打过补丁,因此,很多情况下远程安装不 能正常进行。在这样情况下,你只能到客户机运行进行安装。 对于运行Win9x/ME客户机,必须到客户计算机上进行安装。 -------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值