上文: 基于lucene的搜索服务器 写的是创建索引端。
今天写一下搜索端的实现思路。
Restful Service的搜索服务:
搜索服务接受URL请求,通过Config解析一下url中的参数,得到有用的参数。如(关键字,搜索目标项目名,项目dll名,索引文件夹路径,xml配置文件路径,搜索关系,等等。)
再通过PraseDLL类和PraseModel类,结合具体的DLL文件和XML配置文件,解析出更具体的搜索条件(如哪个字段是哪个关键字,各个字段搜索时是或还是且等逻辑信息)。用QueryPrase得到Lucene的搜索条件Query,传给Lucene,搜出符合条件的具体结果集。
因为搜索时,需求可能并不是对一个类的索引文件进行搜索,可能是搜索多个类的索引文件,然后让结果混在一起,按照Lucene的评分排序,所以最后输出的结果是一个List<object>。实体类属性中如果有评分属性,则保存了Lucene的打分情况(哪个属性是评分属性,哪个是搜索字段属性,这些都是XML配置的或者是C#特性),然后用HighLight对其中搜出的内容加入关键字高亮,都根据配置来决定是怎么个高亮法,显示摘要多少字。
最后再把List<object>装换成一个Json格式的String输出。
消费服务的项目客户端:(用RestSharp消费RestFul服务)
这个貌似也没啥可写的。。。
我是用RestSharp写的,构造需要的url,然后get请求,得到结果(json格式的string类型)后,再在前台把结果转换成Json数据,这样就能用了。
各个项目可以有自己的实现。
结束:
呵呵,只是记录当时开发这个的思路,以后可以温故而知新,看看现在的自己写的代码,思路有啥不足,也高兴下自己的成长。