Category Archives: lucene

Lucene文件结构

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被分析器过滤掉了。