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 }
 
 
分类: .NetLucene
标签: solrluceneEasyNet

EasyNet.Solr 4.4.0发布及例子的更多相关文章

  1. CoreWCF 1.0.0 发布,微软正式支持WCF

    2022年4月28日,我们达到了一个重要的里程碑,并发布了CoreWCF的1.0.0版本.对Matt Connew (微软WCF团队成员)来说,这是5年前即 2017年1月开始的漫长旅程的结束.Mat ...

  2. Visual Studio Code 1.0发布,支持中文在内9种语言

    Visual Studio Code 1.0发布,支持中文在内的9种语言:Simplified Chinese, Traditional Chinese, French, German, Italia ...

  3. Apache Flume 1.7.0 发布,日志服务器

    Apache Flume 1.7.0 发布了,Flume 是一个分布式.可靠和高可用的服务,用于收集.聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型.这是一个可靠.容错的服务. 本次更 ...

  4. Percona Server 5.6.33-79.0 发布

    Percona Server 5.6.33-79.0 发布了,该版本基于 MySQL 5.6.33,包含了所有的 bug 修复,是Percona Server 5.6 系列中的正式版本.该版本主要是修 ...

  5. solr&lucene3.6.0源码解析(四)

    本文要描述的是solr的查询插件,该查询插件目的用于生成Lucene的查询Query,类似于查询条件表达式,与solr查询插件相关UML类图如下: 如果我们强行将上面的类图纳入某种设计模式语言的话,本 ...

  6. solr&lucene3.6.0源码解析(三)

    solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式 ...

  7. Rubinius 2.0 发布,Ruby 虚拟机

    Rubinius 2.0 发布了,官方发行说明请看这里. Rubinius是一个运行Ruby程序的虚拟机,其带有Ruby的核心库. Rubinius的设计决定了其调试功能的强大,使得在运行时常规的Ru ...

  8. Restful.Data v2.0发布,谢谢你们的支持和鼓励

    v1.0发布后,承蒙各位博友们的热心关注,也给我不少意见和建议,在此我真诚的感谢 @冰麟轻武 等朋友,你们的支持和鼓励,是这个开源项目最大的推动力. v2.0在除了细枝末节外,在功能上主要做了一下更新 ...

  9. 网页动物园2.0发布,经过几个月的努力,采用JAVA编写!

    网页动物园2.0发布,经过几个月的努力,采用JAVA编写! 网页动物园2.0 正式发布!游戏发布 游戏名称: 网页动物园插件 游戏来源: 原创插件 适用版本: Discuz! X1.5 - X3.5 ...

随机推荐

  1. 随想录(从apple的swift语言说起)

    [ 声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 喜欢apple的程序猿朋友对wwdc肯定不会陌生.本次wwdc上最大的一个亮点之中的一个就是s ...

  2. Hibernat之关系的处理多对多

    第一步:编写两个pojo,比如一个学生表一个课程表  这里使用注解. 需要 课程表: package com.qcf.pox; import java.util.HashSet; import jav ...

  3. MonkeyImage API 实践全记录

    1.    背景 鉴于网上使用MonkeyImage的实例除了方法sameAs外很难找到,所以本人把实践各个API的过程记录下来然自己有更感性的认识,也为往后的工作打下更好的基础.同时也和上一篇文章& ...

  4. 快速构建Windows 8风格应用4-FlipView数据控件

    原文:快速构建Windows 8风格应用4-FlipView数据控件 本篇博文主要介绍为什么使用FlipView控件.什么是FlipView控件.如何使用FlipView控件和FlipView控件最佳 ...

  5. Java 类的成员初始化顺序

    做个简单笔录,就当是重温下基础知识. 1.先看代码: package com.test; public class Test { public static void main(String[] ar ...

  6. .Net Framework基础知识

    .net常识 .net framework是微软为开发应用程序而创建的一个富有革命性的新平台:   .net可以用来开发windows应用程序,web应用程序,web服务和其它各种类型的程序.   . ...

  7. js获取当前指定的前几天的日期(如当前时间的前七天的日期)

    这里就不多说了,直接贴上代码: <html> <head> <meta http-equiv="Content-Type" content=" ...

  8. 解决:错误的语法:”XXXX“必须是批处理中仅有的语句

    原文:解决:错误的语法:”XXXX“必须是批处理中仅有的语句   SQL Server 数据库提示“错误的语法:”XXXX“必须是批处理中仅有的语句”报错的原因分析 解析:批处理必须以 CREATE ...

  9. [转] 关于 Eclipse 导出 Android项目 JavaDoc 详细过程

    关于Eclipse 导出JavaDoc过程中,遇到的问题 ,google 了一下 ,网友们 总说不一 ,最终 还是 搞定了 现在分享给大家 希望对大家有所帮助 用Eclipse默认的 JavaDoc需 ...

  10. Protocol Buffer和JSON性能比较

      JSON PB 数据结构支持 简单结构 较复杂结构 数据格式 文本 二进制 数据大小 一般 小,json大小的1/3左右 解析效率 一般 快,是json解析速度的3-10倍 可读性 好,自描述的 ...