欢迎光临
我们一直在努力

Lucene.Net的服务器封装+APi组件(开源)

为什么要封装

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

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

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

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

Lucene.Net的服务器封装+APi组件(开源)

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

APi组件

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

 

Lucene.Net的服务器封装+APi组件(开源)

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

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

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

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

 

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

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

 /// <summary> /// Model为news索引名为Index_News /// </summary> private Lucene<News> client = new Lucene<News>("Index_News"); /// <summary> /// 设置索引 /// </summary> /// <param name="title">标题</param> /// <param name="content">内容</param> /// <returns></returns> private async Task<bool> 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种重载,可以实现个性化的搜索结果。

 /// <summary> /// 索引查询 /// </summary> /// <param name="keywords"></param> /// <returns></returns> private async Task<List<News>> 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项目,https://github.com/xljiulang/NetworkSocket,所有Api都是异步的,可以与async和await使用;

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

 

在相关项目工程在哪里

项目放在了github,https://github.com/xljiulang/LuceneServer

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

 

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《Lucene.Net的服务器封装+APi组件(开源)》
文章链接:https://www.456zj.com/683.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址