zoukankan      html  css  js  c++  java
  • lucene.net 学习二——索引的文件结构分析

    用的lucene.net的版本为2.9.4,lucene.net提供的API很强大,建个索引很方便,但是如果能搞清楚索引的文件结构,会对深入理解有帮助。先写个简单的建索引的代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using System.IO;
    using Lucene.Net.Index;
    using Lucene.Net.Store;
    using Lucene.Net.Util;
    using Lucene.Net.Analysis.Standard;
    using Lucene.Net.Documents;

    namespace TestIndex
    {
    class Program
    {
    static void Main(string[] args)
    {
    //构造索引存放的路径
    Lucene.Net.Store.Directory indexDir = FSDirectory.Open(new DirectoryInfo(@"F:\lucene_index"));
    //构造一个索引写操作的类,第一个参数为索引存放的路径,第二个参数为对输入的数据源进行分词等处理类实例,
    //第三个参数为true表示会删掉原有的索引,从新建索引,第四个参数表示某个域对于不的数据源分词后最大的词条数目
    IndexWriter IW = new IndexWriter(indexDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), true,new IndexWriter.MaxFieldLength(10000));
    //设置为多文件索引的格式,默认情况下为true,会建立复合索引的文件结构,这里为了分析,先设置为false,生成多文件的索引结构
    IW.SetUseCompoundFile(false);
    //创建第一个文档
    Document doc1 = new Document();
    //构造一个域信息,第三个参数为存储该域,第四个参数的意思是域所对应的数据源分词并索引
    Field bookname1 = new Field("bookname1", "笑傲江湖", Field.Store.YES, Field.Index.ANALYZED);
    doc1.Add(bookname1);//向文档中添加域

    //创建第二个文档
    Document doc2 = new Document();
    Field bookname2 = new Field("bookname2", "天龙八部", Field.Store.YES, Field.Index.ANALYZED);
    doc1.Add(bookname2);

    //将文档写入索引中
    IW.AddDocument(doc1);
    IW.AddDocument(doc2);
    //关闭索引写入,一定要记得,否则会写不进去
    IW.Close();

    }
    }
    }

    编译运行后得到文件结构图如下:

    为了便于对索引的管理,lucene对索引按段(segment)来组织。一个索引可能由许多段(segment)组成,每个segment又包含一定数量的Docment,上面的这个例子中只有一个段,每个segment的前缀是相同的.

    _0.fnm文件包含了此segment中所有Document的所有Filed的名称。

    _0.fdt用于存储具有Store.YES属性的Field的数据。.fdx用于存储Document在.fdt中的位置。

    .tis文件用于存储分词后的词条(Term),.tii表明了每个.tis文件中的词条的位置。

    .frq表示词条在文档中的频率,.prx表示词条在文档中的位置。

    上面的多文件结构的索引,需要打开较多的文件句柄,消耗了跟多的计算机资源,因此建立一个复合结构的索引往往效率较高。建立复合结构的索引只需要将上面的代码中的

    IW.SetUseCompoundFile(false);注释掉即可,因为lucene.net本身默认是复合结构索引。修该后运行结果如下图所示:

     生成了一个.cfs的复合文件。

     倒排索引的结构图如下:

  • 相关阅读:
    C盘的可用空间忽大忽小
    安装软件时不能指定软件的安装目录
    MySQL安装排坑
    Butterfly主题目录生成不了问题
    apache+php安装配置的各种问题
    环境变量配置不成功
    http模块
    Node.js
    Spring Boot入门
    代码优化笔记
  • 原文地址:https://www.cnblogs.com/guoyuanwei/p/2425153.html
Copyright © 2011-2022 走看看