EasyNet.Solr 4.4.0发布及例子
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é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 }
查询:
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 }
EasyNet.Solr 4.4.0发布及例子的更多相关文章
- CoreWCF 1.0.0 发布,微软正式支持WCF
2022年4月28日,我们达到了一个重要的里程碑,并发布了CoreWCF的1.0.0版本.对Matt Connew (微软WCF团队成员)来说,这是5年前即 2017年1月开始的漫长旅程的结束.Mat ...
- Visual Studio Code 1.0发布,支持中文在内9种语言
Visual Studio Code 1.0发布,支持中文在内的9种语言:Simplified Chinese, Traditional Chinese, French, German, Italia ...
- Apache Flume 1.7.0 发布,日志服务器
Apache Flume 1.7.0 发布了,Flume 是一个分布式.可靠和高可用的服务,用于收集.聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型.这是一个可靠.容错的服务. 本次更 ...
- Percona Server 5.6.33-79.0 发布
Percona Server 5.6.33-79.0 发布了,该版本基于 MySQL 5.6.33,包含了所有的 bug 修复,是Percona Server 5.6 系列中的正式版本.该版本主要是修 ...
- solr&lucene3.6.0源码解析(四)
本文要描述的是solr的查询插件,该查询插件目的用于生成Lucene的查询Query,类似于查询条件表达式,与solr查询插件相关UML类图如下: 如果我们强行将上面的类图纳入某种设计模式语言的话,本 ...
- solr&lucene3.6.0源码解析(三)
solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式 ...
- Rubinius 2.0 发布,Ruby 虚拟机
Rubinius 2.0 发布了,官方发行说明请看这里. Rubinius是一个运行Ruby程序的虚拟机,其带有Ruby的核心库. Rubinius的设计决定了其调试功能的强大,使得在运行时常规的Ru ...
- Restful.Data v2.0发布,谢谢你们的支持和鼓励
v1.0发布后,承蒙各位博友们的热心关注,也给我不少意见和建议,在此我真诚的感谢 @冰麟轻武 等朋友,你们的支持和鼓励,是这个开源项目最大的推动力. v2.0在除了细枝末节外,在功能上主要做了一下更新 ...
- 网页动物园2.0发布,经过几个月的努力,采用JAVA编写!
网页动物园2.0发布,经过几个月的努力,采用JAVA编写! 网页动物园2.0 正式发布!游戏发布 游戏名称: 网页动物园插件 游戏来源: 原创插件 适用版本: Discuz! X1.5 - X3.5 ...
随机推荐
- CocoaPods 建立私有仓库
CocoaPods是iOS,Mac下优秀的第三方包管理工具,类似于java的maven,给我们项目管理带来了极大的方便. [个人或公司在开发过程中,会积累很多可以复用的代码包,有些我们不想开源,又想像 ...
- 在Mac电脑上为Dash制作docSet文档
Dash是mac上的一款查看API的工具,里面能够直接下载大部分的API文档,可是有时候我们假设想把自己手里已有的文档也集成到Dash中,就须要我们自己动手了,事实上Dash官方也有教程怎样制作doc ...
- bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (三) 图片裁剪
官方的例子 是 长方形的. 我这里 用于 正方形的头像 所以 做如下 修改 #preview-pane .preview-container { width: 73px; height: 73px ...
- 什么时候需要使用Double? double、float、decimal的区别
原文:什么时候需要使用Double? double.float.decimal的区别 float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位) double: ...
- 【Eclipse提高开发速度-插件篇】Eclipse插件安装慢得几个原因
1.改动"Available Softeware Site" ,降低关联,详细做法 Install New Software >> Available Softewar ...
- apache启动报错:the requested operation has failed解决办法
原因一:80端口占用 例如IIS,另外就是迅雷.我的apache服务器就是被迅雷害得无法启用! 原因二:软件冲突 装了某些软件会使apache无法启动如Dr.com 你打开网络连接->TcpIp ...
- 苹果iOS苹果公司的手机用户都有权索赔
大家知道.手机中的操作系统(基础软件)存储在手机固(firm,ware)之中,一般而言,手机用户自己是不能修改的. 苹果iOS手机的系统后门(服务程序)也存储在手机固件之中.手机用户自己是无法删除的. ...
- selenium2入门 用selenium安装、加载、启用插件(一)
一:下载 下载地址是:http://docs.seleniumhq.org/download/
- less 命令
每天一个linux命令(13):less 命令 less 工 具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有 ...
- ofbiz学习笔记01--多表关联查询
不管做什么项目,肯定会用到多表关联查询数据,从网络查询得知ofbiz有三种多表关联查询方法 实现一:Screem.xml 中的 section 里,加 <action>, 加 get-re ...