博客
关于我
Lucene.Net的服务器封装+APi组件 (开源)
阅读量:428 次
发布时间:2019-03-06

本文共 1883 字,大约阅读时间需要 6 分钟。

为什么要封装

真不知道用什么标题合适,我这几天在研究Lucene.Net,觉得把Lucene.Net封装为一个独立的服务器,再提供一个给客户端调用的Api组件应该是一件很意思的事,主要优势有以下:

1、可以将索引和检索的压力放到网络的其它主机上,服务器不用再开发,直接运行就可以;

2、客户端完全可以脱离Lucene.Net,只要关心相关的几个Api就可以;

3、多个客户端也可以共用同一个索引,也可以不共用。

如上图,所有的客户端都只依赖于提供的Api组件,就可以操作Lucene服务器了。

APi组件

对于客户端而已,只需要关注APi组件,这个APi组件命名为LuceneLib,提供设置索引、删除索引、查询索引方法:

 

紧密结合C#语言的APi风格

因为客户端与Api是直接接触的,所以如何将APi设计为简单易用将面临下面的挑战:

1、APi在设置索引或查询索引时,Model为强类型;

2、查询索引时,有很多相关参数,比如关键字、查询的字段、排序字段、是否关键字高亮、如何高亮、分页功能。

 

LuceneLib给出紧密结合C#语言的APi风格,并完美地解决了上面两个难题:

使用泛型,强类型模型自动转换为通讯传输层的模型,反过来也是,所以服务器可以不用知道客户端的MODEL的类型。

///         /// Model为News索引名为Index_News        ///         private Lucene
client = new Lucene
("Index_News"); ///
/// 设置索引 /// ///
标题 ///
内容 ///
private async Task
SetIndex_Test(string title, string content) { var news = new News { Id = Guid.NewGuid(), OrderIndex = Environment.TickCount, CreateTime = DateTime.Now, Title = title, Content = content }; return await client.SetIndex(news); }

LINQ风格的索引查询Api,各项调用不按顺序或省略相关项都不影响结果,MatchField方法提供N种重载,可以实现个性化的搜索结果。

///         /// 索引查询        ///         ///         /// 
private async Task
> SearchIndex_Test(string keywords) { return await client .SearchIndex(keywords) .MatchField(item => item.Title, "high-light") .MatchField(item => item.Content, Color.Red, 100) .OrderByDescending(item => item.OrderIndex) .Skip(0) .Take(10) .ToList(); }

相关技术

1、讯功能依赖于NetworkSocket项目,,所有Api都是异步的,可以与async和await使用;

2、业务模型和通讯模型转换过程做了反射优化。

 

在相关项目工程在哪里

项目放在了github,

有什么建议可以在这里或github上提。

 

转载地址:http://ufdyz.baihongyu.com/

你可能感兴趣的文章
loadrunner 脚本优化-参数化方法
查看>>
Easyui datagrid combobox输入框非法输入判断与事件总结
查看>>
Vue 使用Use、prototype自定义全局插件
查看>>
安卓开发必须收藏的网站
查看>>
PopupWindow 以及拍照、裁剪
查看>>
用RabbitMQ了好几年之后,我总结出来5点RabbitMQ的使用心得
查看>>
我,管理100多人技术团队的二三事
查看>>
webpack 的 sourse-map 中 eval、cheap、inline 和 module 各是什么意思?
查看>>
设计模式点滴
查看>>
《天风文章》V1.0.0使用说明
查看>>
[转]Web service到底是什么?在什么情况下,你应该使用web service
查看>>
许久没来了...
查看>>
javascript 实现页面上禁止选择(复制)
查看>>
[转]Best practices for creating websites in IIS 6.0
查看>>
发布一款小软件:和讯博客助手-新闻采集测试版- 0.1.0
查看>>
Angular入门到精通系列教程(10)- 指令(Directive)
查看>>
2021 Top 100 C#/.NET Interview Questions And Answers
查看>>
通过VS2010性能分析来查找代码中那些地方最损耗资源
查看>>
数值压缩存储方法Varint
查看>>
.net socket在win2008下的吞吐性能报告
查看>>