设为首页 收藏本站
查看: 930|回复: 0

[经验分享] EasyNet.Solr 4.4.0发布及例子

[复制链接]

尚未签到

发表于 2015-7-18 11:54:50 | 显示全部楼层 |阅读模式
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发布版本中的例子:
  初始化:




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

  创建索引:





1         ///
2         /// 创建索引
3         ///
4         static void Index()
5         {
6             var docs = new List();
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         ///
2         /// Set原子操作
3         ///
4         static void AtomSet()
5         {
6             var docs = new List();
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         ///
2         /// Add原则操作
3         ///
4         static void AtomAdd()
5         {
6             var docs = new List();
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         ///
2         /// 查询
3         ///
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     ///
2     /// 实体类
3     ///
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     ///
22     /// 反序列化器
23     ///
24     class ExampleDeserializer : IObjectDeserializer
25     {
26         public IEnumerable 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     }

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-87963-1-1.html 上篇帖子: 一个Solr搜索实例,增删改查+高亮+分页 下篇帖子: solr的范围查询 TO
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表