上文: 基於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數據,這樣就能用了。
各個項目可以有自己的實現。
結束:
呵呵,只是記錄當時開發這個的思路,以后可以溫故而知新,看看現在的自己寫的代碼,思路有啥不足,也高興下自己的成長。