最近试用了一下Lucene这个搜索框架,发觉还是蛮不错的。许多现在比较火的搜索服务器(如Elasticsearch)的内核用的就是Lucene。目前手头有一个小的JavaEE项目程序,想着再给它装一个Elasticsearch服务器似乎太浪费资源,所需要的搜索功能其实很简单,不需要太复杂。于是,何不趁机学学它的内核框架Lucene如何使用呢?
使用Lucene有很多种模式,本文就拿最简单的模式讲起,其基本流程如下:
1、用Lucene的包读取所需的数据 --> 创建索引 --> 保存索引文件
2、用Lucene的包读取索引文件 --> 使用搜索服务
了解这两个流程以后,基本上对Lucene的使用就能大体了解,剩下的无非是怎么读要检索的数据源(从数据库、文件、还是其它网络服务器),怎么建立索引(哪个域需要分词和索引、哪些数据不需要分词只需要单独的存储、使用什么分词器、中文还是其它什么语言)
目前项目的需求是为项目内的静态网页提供搜索服务,而网页的内容都是中文,因此还需要经过加工和分词的过程。最终的目标,是做一个类似简单的百度的功能。以下是获取到数据后的索引建立部分代码(INDEXDIR为存储索引的目录):
private static void index(List<String[]> webAndContentList) throws IOException{
Directory dir = FSDirectory.open(Paths.get(INDEXDIR));
Analyzer analyzer;
analyzer = g