最近,我在閱讀和學習Clucene的源代碼,在此記錄學習和使用心得。網上也有一些分析教程。但幾乎都是大同小異。
搜索是本身是一個偏重於算法和流程的東西。我感覺使用面向過程的編程模式反而更好理解一些,但Clucence使用C++的特性,高度面向對象化,到處是接口。反而加大了理解難度。
clucene的特點:
- 支持Ascii和unicode兩種字符集。
- 支持多線程並行查詢。
- 支持多種查詢方式。
- 代碼組織結構清晰簡潔。
- 幾乎不依賴第三方庫,部署配置簡單。
- 索引文件格式獨立於應用平臺,程序可以跨平臺編譯運行。
- 程序自帶有多種分析器,並且很容易擴展。
- Clucene提供的api,比較簡單易懂。
- 在代碼中,使用了較多的設計模式。設計模式主要有職責鏈模式,工廠模式,組合模式,迭代器模式等。
- 構建索引的過程。
- 索引合併的過程。
- 權重打分的算法。
- 模糊查詢的實現。
- Bool查詢的實現。
- 一些算法的實現(跳躍表的實現,邊界距離的實現)。
- 代碼量比較大,但也沒有日誌,跟蹤不到整個流程。
Clucence的幾個重要術語有:http://blog.csdn.net/smartfox80/article/details/52182689