17. jerry 2
go 2
school 2
see 2
his 2
student 2
find 2
them 2
drink 2
allow 2
2. 对字典按字母顺序进行排序。
对字典按字母顺序进行排序。
Term Document ID
allow 1
allow 1
allow 2
beer 1
drink 1
drink 2
find 2
friend 1
friend 2
17
18. go 1
go 2
his 2
jerry 2
my 2
school 2
see 2
student 1
student 2
their 1
them 2
合并相同的词(Term)成为文档倒排
3. 合并相同的词 成为文档倒排(Posting List)链表。
成为文档倒排 链表。
链表
18
48. 中的标志,将这篇文档过滤掉。
如下的代码形成了上图的索引,可以看出索引了两篇文档形成了_0 段,然后
又删除了其中一篇,形成了_0_1.del,又索引了两篇文档形成_1 段,然后又删
除了其中一篇,形成_1_1.del。因而在两个段中,此值都是 2。
IndexWriter writer = new IndexWriter(FSDirectory.open(INDEX_DIR), new
StandardAnalyzer(Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED);
writer.setUseCompoundFile(false);
indexDocs(writer, docDir);//docDir 中只有两篇文档
//文档一为:Students should be allowed to go out with their friends, but not allowed to drink beer.
//文档二为:My friend Jerry went to school to see his students but found them drunk which is not
allowed.
writer.commit();//提交两篇文档,形成_0 段。
writer.deleteDocuments(new Term("contents", "school"));//删除文档二
writer.commit();//提交删除,形成_0_1.del
indexDocs(writer, docDir);//再次索引两篇文档,Lucene 不能判别文档与文档的不同,因而算两
篇新的文档。
writer.commit();//提交两篇文档,形成_1 段
writer.deleteDocuments(new Term("contents", "school"));//删除第二次添加的文档二
writer.close();//提交删除,形成_1_1.del
DelGen
.del 文件的版本号
Lucene 中,在 optimize 之前,删除的文档是保存在.del 文件中的。
在 Lucene 2.9 中,文档删除有以下几种方式:
IndexReader.deleteDocument(int docID)是用 IndexReader 按文档号删除。
IndexReader.deleteDocuments(Term term)是用 IndexReader 删除包含此词
(Term)的文档。
IndexWriter.deleteDocuments(Term term)是用 IndexWriter 删除包含此词
48