Lucene文件的组织结构
| Lucene文件结构组件 | 索引 | 段 | 文档 | 域 | 词 |
|---|---|---|---|---|---|
| 具体信息 | 整个存储索引的文件夹,solr中即/opt/solr/spu/data | 新添加文档时生成段,在索引目录下_0.*,-1.*表示两个段 | 对应schema中的一条记录 | 文档中包括的域 | 分词后生成的term |
简短的lucene创建索引的代码
public void createIndex() {
String title = "solr apache ";
Document document = new Document();
Field field = new Field("title", new StringReader(title));
document.add(field);
try {
SimpleFSDirectory directory = new SimpleFSDirectory(new File("/home/lucene"));
IndexWriterConfig writerConfig = new IndexWriterConfig(Version.LUCENE_34,
new StandardAnalyzer(Version.LUCENE_34));
IndexWriter writer = new IndexWriter(directory,writerConfig);
writer.addDocument(document);
writer.commit();
writer.close();
}catch (IOException e) {
}
}
执行两次后,生成的索引结构如下图。 第一次title是”lucene index doc”,第二次title如上代码所示。

索引包含正向信息的文件有:
| segments_2 | 保存了此索引包含多少个段,每个段包含多少篇文档。 |
|---|---|
| _0.fnm | 保存了此段包含了多少个域,每个域的名称及索引方式。 |
| _0.fdx,_0.fdt | 保存了此段包含的所有文档,每篇文档包含了多少域,每个域保存了那些信息。 |
| _0.tvx,_0.tvd,_0.tvf | 保存了此段包含多少文档,每篇文档包含了多少域,每个域包含了多少词,每个词的字符串,位置等信息。 |
所谓反向信息保存了词典到倒排表的映射:词(Term) –> 文档(Document)
包含反向信息的文件有:
| _0.tis,_0.tii | 保存了词典(Term Dictionary),也即此段包含的所有的词按字典顺序的排序。 |
|---|---|
| _0.frq | 保存了倒排表,也即包含每个词的文档 ID 列表。 |
| _0.prx | 保存了倒排表中每个词在包含此词的文档中的位置。 |
我们用Linux下的strings命令分别看一下每下文档具体包含的信息。
strings 可以打印出对象中所有可读取的字符
star@star:lucene$ strings _0.fnm title
上面的命令,显示可以通过strings,获取当前索引中包含的域的名称。
star@star:lucene$ strings _0.tis index lucene
上面的输出可以看出,”lucene index doc” 实际上只索引了”index,lucene”两个词,而doc被分析器过滤掉了。