Lucene.Net的服务器封装+APi组件 (开源)
为什么要封装
真不知道用什么标题合适,我这几天在研究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的类型。
/// <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, )
.OrderByDescending(item => item.OrderIndex)
.Skip()
.Take()
.ToList();
}
相关技术
1、讯功能依赖于NetworkSocket项目,https://github.com/xljiulang/NetworkSocket,所有Api都是异步的,可以与async和await使用;
2、业务模型和通讯模型转换过程做了反射优化。
在相关项目工程在哪里
项目放在了github,https://github.com/xljiulang/LuceneServer
有什么建议可以在这里或github上提。
Lucene.Net的服务器封装+APi组件 (开源)的更多相关文章
- 封装Vue组件的一些技巧
封装Vue组件的一些技巧 本文同步在个人博客shymean.com上,欢迎关注 写Vue有很长一段时间了,除了常规的业务开发之外,也应该思考和反思一下封装组件的正确方式.以弹窗组件为例,一种实现是在需 ...
- 收集整理的openstack java封装 api的第三方实现的选择
Apache jclouds 地址:http://jclouds.apache.org/guides/openstack/ 一个开源库,java实现,支持cloudstack,openstack以及各 ...
- JS组件系列——自己动手封装bootstrap-treegrid组件
前言:最近产品需要设计一套相对完整的组织架构的解决方案,由于组织架构涉及到层级关系,在表格里面展示层级关系,自然就要用到所谓的treegrid.可惜的是,一些轻量级的表格组件本身并没有自带树形表格的功 ...
- 封装bootstrap-treegrid组件
封装bootstrap-treegrid组件 阅读目录 一.开源的treegrid 1.组件效果预览 2.组件开源地址 二.封装treegrid 1.组件封装的必要性 2.组件封装代码示例 3.封 ...
- 使用Vue CLI 3将基于element-ui二次封装的组件发布到npm
前言:之前在网上找的好多都是基于vue-cli 2.x的,而使用vue-cli 3的文章比较少,Vue CLI 3 中文文档,所以我在自己尝试的时候把几篇文章结合了一下,调出来了我想要的模式,也就是V ...
- vue项目,封装api并使用
封装api index.js let uploadBase = '' if(process.env.NODE_ENV === 'production'){ uploadBase = 'https:// ...
- SDK打开模拟器遇到SDK包里缺少API组件,附上我的解决历程,心累
背景描述:之前一直用真机做自动化,突然被要求用模拟器,就开始准备环境,发现模拟器里少很多配置,前提:配置了Android环境变量,且配置了代理如下:大连东软信息学院镜像服务器地址:http://mir ...
- ReactNative: 自定义ReactNative API组件
一.简介 在前面介绍了很多ReactNative中UI组件和API组件,这些都是Facebook团队封装好的基础组件,开发者可以直接使用.然而,在实际的开发过程中,面对复杂的需求,此时原生的Nativ ...
- jQuery MiniUI 开发指南+API组件参考手册
jQuery MiniUI 开发指南 本文档将逐步的讲解jQuery MiniUI的方方面面,从此您将踏上jQuery MiniUI的深入探索之旅. 1.Hello M ...
随机推荐
- Zookeeper 服务注册和发现
Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...
- SQL Server:“数据收缩”详解
1. 数据库的相关属性 在MS中创建数据库时会为数据库分配初始的大小(如下图:数据库和日志两个文件),随着数据库的使用文件会逐渐增大.数据库文件大小的增加有两种方式: 自动增长:在自动增长中可以设置每 ...
- 《CLR via C#》读书笔记--基元类型、引用类型和值类型
编程语言的基元类型 编译器直接支持的数据类型称为基元类型.基元类型直接映射到Framework类库中存在的类型.例如:C#中的int直接映射到System.Int32类型.下表给出了C#基元类型与对应 ...
- 烂泥:高负载均衡学习haproxy之关键词介绍
本文由ilanniweb提供友情赞助,首发于烂泥行天下 上一篇文章我们简单讲解了有关haproxy的安装与搭建,在这篇文章我们把haproxy配置文件中使用到的关键词一一介绍下. 关注我微信ilann ...
- ARM体系结构
工作模式_ufisaus USR(User) :正常程序的执行状态 FIQ(Fast interrupt) :用于高速数据传输和通道处理 IRQ(Interrupt) :通常的中断处理 SVC(Sup ...
- AI (Adobe Illustrator)详细用法(四)
本节主要是介绍和形状相关的操作. 一.外观面板的使用 熟悉外观面板的使用很重要. 1.新增描边 外观面板可以让我们增加多个描边. 点击“新增描边”,系统自动添加一个描边. 选中文字,新增描边,可以修改 ...
- MyBatis使用总结+整合Spring
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .20 ...
- java使用IO读写文件总结
每次用到IO的读写文件都老忘记写法,都要翻过往笔记,今天总结下,省的以后老忘.java读写文件的IO流分两大类,字节流和字符流,基类分别是字符:Reader和Writer:字节:InputStream ...
- BNUOJ 52325 Increasing or Decreasing 数位dp
传送门:BNUOJ 52325 Increasing or Decreasing题意:求[l,r]非递增和非递减序列的个数思路:数位dp,dp[pos][pre][status] pos:处理到第几位 ...
- apache poi导出excel报表
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.POI为"P ...