预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第页 Lucene索引的建立 一、预备知识 1、Document-Field的结构,与关系型数据库相似。表—索引;记录—Document;字段—Field。 2、索引文件:一个典型的segment通常包含以下几种后缀的文件,这几种文件共同构成了lucene索引的一个segment: .f:评分信息。 .frq:每个词条的频率信息。 .prx:每个词条的位置信息。 .fnm:包含了Document中的所有field。 .fdt:用于存储具有Store.YES属性的Field数据。和.fdx是综合使用的两个文件。 .fdx:是一个索引,用于存储Document在.fdt中的位置。 .tis:用于存储分词后的词条(Term)。 .tii:就是它的索引文件,它标明了每个.tis文件中的词条的位置。 .cfx:这个属性的含义为是否使用复合格式来保存索引。 segments:lucene对索引管理的最大单位就是segment。每个segment内的所有索引文件都具有相同的前缀。一个索引中可能有多个segment。在一个索引中,只有一个“segments”文件,这个文件没有后缀,它记录着当前的索引内有多少个segment。每个segment中,有多少个Document这样的信息。 deletable:lucene索引中,所有的文档被删除后,并不是立刻从索引中去除,而是留待下一次合并索引或是对索引进行优化时才真正删除。类似于Windows的回收站原理。这种功能是通过deletable文件实现的。所有的文档在被删除后,会首先在deletable文件中留一个记录,真正删除的时候才将索引删除。 3、索引的合并与索引的优化 publicIndexWriter(Directoryd,Analyzera,booleancreate) Lucene索引的存储路径有两种类型,FSDirectory和RAMDirectory。前者与文件系统的目录有关,写索引的时候直接写到磁盘上,后者与内存相关,添加过程与前者一样,但需将它写到磁盘中,否则当虚拟机推出后,里面的内容也会随之消失。需将RAMDirectory中的索引写到FSDirectory中。 使用IndexWriter来合并索引: (1)RAMDirectory中的索引写到FSDirectory中; (2)遇到大量的索引文件需要进行整理,但他们存在于不同的目录中,甚至是不同的物理空间中(将一个大型网络中的每一台主机上的索引文件合并,统一存储于一个具体的目录下)。 二、代码部分 1、Field的两个静态的内部类。通过Store和Index类的组合使用,可以表示Field的所有状态。 publicstaticfinalclassStoreextendsParameterimplementsSerializable { privateStore(Stringname) {super(name);} publicstaticfinalStoreCOMPRESS=newStore("COMPRESS");//压缩存储 publicstaticfinalStoreYES=newStore("YES");//被存储 publicstaticfinalStoreNO=newStore("NO");//不被存储 } publicstaticfinalclassIndexextendsParameterimplementsSerializable { privateIndex(Stringname) {super(name);} publicstaticfinalIndexNO=newIndex("NO");//不索引 publicstaticfinalIndexTOKENIZED=newIndex("TOKENIZED");//分词后索引 publicstaticfinalIndexUN_TOKENIZED=newIndex("UN_TOKENIZED");//不分词索引 publicstaticfinalIndexNO_NORMS=newIndex("NO_NORMS"); //对field进行索引,但不使用Analyzer,同时禁止它参加评分 } 2、演示了如何为每册图书创建Document和选择合适的Field,这样就构成了索引的前提。 Documentbookdoc=newDocument(); FieldbookNo= newField("bookNumber","FB309663004",Field.Store.YES,Field.Index.UN_TOKZNIZED); FieldbookName=newField("bookName","