索引创建和搜索过程所一个总结,如图:
1. 索引过程:
- 1) 有一系列被索引文件
- 2) 被索引文件经过语法分析和语言处理形成一系列词(Term) 。
- 3) 经过索引创建形成词典和反向索引表。
- 4) 通过索引存储将索引写入硬盘。
2. 搜索过程:
- a) 用户输入查询语句。
- b) 对查询语句经过语法分析和语言分析得到一系列词(Term) 。
- c) 通过语法分析得到一个查询树。
- d) 通过索引存储将索引读入到内存。
- e) 利用查询树搜索索引,从而得到每个词(Term) 的文档链表,对文档链表进行交,差,并得到结果文档。
- f) 将搜索到的结果文档对查询的相关性进行排序。
- g) 返回查询结果给用户。
代码参见::LuceneTest
- D:\BaiduNetdiskDownload\code\activemq-producer\src\main\java\lucene\LuceneTest.java
在lucene索引库的创建的时候,我们有两种不同的索引库创建方式
-
文件索引库
-
final Path docDir = Paths.get("index");
Directory directory=FSDirectory.open(Paths.get("index"));
-
这样创建的索引库是在本地磁盘上创建一个index文件夹,
-
并且将索引放在index中,也称为文件索引库
-
优点:将索引持久化到磁盘上,能长久保存。
-
缺点:相比较内存索引库,读取慢
-
-
-
-
内存索引
- Directory directory= new RAMDirectory();
-
只需要一句代码,就创建了一个内存索引库
-
优点:读取快
-
缺点:不具备持久化能力,结束时候内存索引库便会删除
-
-
两种索引库的结合
- 根据两种索引库的特点我们可以将两种索引库结合起来,
- 设计的思路是在程序启动时,
- 将文件索引库中的索引拷贝到内存索引库中,
- 然后让程序与内存索引库交互,
- 当交互完毕后再将内存索引库的索引持久化到文件索引库。
- 代码详见::
- public static void multiIndex() throws IOException
- 根据两种索引库的特点我们可以将两种索引库结合起来,