学习书籍:开发自己的搜索引擎 Lucene+Heritrix(第二版)
搜索引擎的总体思路:提供源文件(搜索目标) --> 对源文件分词 --> 新建Field --> Field写入Document --> 建立索引 --> 开始搜索(对索引进行搜索) --> 搜索结果
基本概念:
Document:逻辑文件。因为Lucene无法对物理文件建立索引,所以使用Document与物理文件进行对应,Lucene对Document进行处理。Document不等于物理文件,只是收集了物理文件的部分或全部数据源。
Field:数据源有Field类表示,或者理解为字段。Document类似于database中的row,Field类似于column。
IndexWriter:索引工具,用于建立索引,加入Document。
IndexReader:对索引的读取和维护工作。
Analyzer:分词器。
segment:Lucene对索引管理的最大单位,一个segment中可以包含多个Document。
.fnm文件:包含Document所有的field名称。
.fdt文件:存储具有Store.Yes属性的Field数据。
.fdx文件:存储Document在.fdt中的位置。
.tis文件:存储分词后的词条(term)。
.tii文件:term的所以文件,表明了term在.tis中的位置。
deletable文件:记录删除的Document,类似于回收站。
mergeFactor:合并因子。
Field属性:
1、是否储存(isStored)
2、是否索引(isIndexed)
3、是否分词(isTokenized)
IndexWriter属性:
1、maxFieldLength:Field的最大长度,默认10 000,可以使用setter更改。
IndexWriter方法:
1、optimize():对指定索引目录下的所有segment进行优化,合并。
IndexReader方法:
1、numDocs():返回索引中Document数量。
2、deleteDocument(int ID):删除指定ID的Document。
3、deleteDocument(Term term):批量删除匹配的Document。
4、undeleteAll():反删除。
Document常用构造函数:Document();
Field常用构造函数:Field(String name, String value, Store stroe, Index index);
IndexWriter常用构造函数:IndexWriter(String path, Analyzer a, boolean create); create参数表示是否删除原有索引重新建立索引。
IndexReader构造方法:IndexReader.open(String Path);
注意:
1、使用IndexWriter添加完Document后,一定要使用IndexWriter的close方法关闭索引器。
2、索引的修改:只允许一个线程操作。
3、索引的检索:允许多线程。