全文检索lucene研究

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文由美白面膜排行榜整理

全文检索lucene研究

1 Lucene简介

Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。Lucene以其方便使用、快速实施以及灵活性受到广泛的关注。它可以方便地嵌入到各种应用中实现针对应用的全文索引、检索功能,本总结使用lucene3.0.0

2 Lucene 的包结构

1、analysis对需要建立索引的文本进行分词、过滤等操作

2、standard是标准分析器

3、document提供对Document和Field的各种操作的支持。

4、index是最重要的包,用于向Lucene提供建立索引时各种操作的支持

5、queryParser提供检索时的分析支持

6、search负责检索

7、store提供对索引存储的支持

8、util提供一些常用工具类和常量类的支持

Lucene中的类主要组成如下:

1)org.apache.1ucene.analysis语言分析器,主要用于的切词Analyzer是

一个抽象类,管理对文本内容的切分词规则。

2)org.apache.1uceene.document索引存储时的文档结构管理,类似于关系

型数据库的表结构。

3)document包相对而言比较简单,document相对于关系型数据库的记录对

象,Field主要负责字段的管理。

4)org.apache.1ucene.index索引管理,包括索引建立、删除等。索引包是

整个系统核心,全文检索的根本就是为每个切出来的词建索引,查询时就只需要遍历索引,而不需要去正文中遍历,从而极大的提高检索效率。

5)org.apache.1ucene.queryParser查询分析器,实现查询关键词间的运算,

如与、或、非等。

6)org.apache.1ucene.search检索管理,根据查询条件,检索得到结果。

7)org.apache.1ucene.store数据存储管理,主要包括一些底层的I/0操作。

8)org.apache.1ucene.util一些公用类。

3 Document文档

1)void add(Field field) 往Document对象中添加字段

2)void removeField(String name)删除字段。若多个字段以同一个字段

名存在,则删除首先添加的字段;若不存在,则Document保持不变

3)void removeFields(String name)删除所有字段。若字段不存在,则

Document保持不变

4)Field getField(String name)若多个字段以同一个字段名存在,则

返回首先添加的字段;若字段不存在,则Document保持不变

5)Enumeration fields()返回Document对象的所有字段,以枚举类型返

6)Field [] getFields(String name)根据名称得到一个Field的数组

7)String [] getValues(String name)根据名称得到一个Field的值的数

Document doc1 = new Document();

doc1.add(new Field("name", "word1 word2

word3",Field.Store.NO,Field.Index.TOKENIZED));

Document doc2 = new Document();

doc2.add(new Field("name", "word1 word2

word3",Field.Store.NO,Field.Index.TOKENIZED));

4 Field字段

以new Field("name", "word1 word2

word3",Field.Store.YES,Field.Index.TOKENIZED);为例

4.1 Field类的构造方法

public Field(String name,String value,Store store,Index index);//直接的字符串方式

public Field(String name,String value,Store store,Index

index,TermVector termVector);

public Field(String name,String value,Reader reader);//使用Reader 从外部传入

public Field(String name,String value,Reader reader,TermVector termVector);

public Field(String name,byte[] value,Store store)//使用直接的二进制byte传入

当Field值为二进制时,可以使用Lucene的压缩功能将其值进行压缩。4.2 store类

Store.NO:表示该Field不需要存储

Store.YES:表示该Field需要存储

PRESS:表示用压缩方式来保存这个Field的值

4.3 ind ex类

Index.NO:不需要索引

Index. ANALYZED: 分词索引:会对Field的内容进行分词,只要部分词匹配该Field会被选中;

Index. NOT_ANALYZED: 不分词索引:不会对Field的内容进行分词,只有全词匹配该Field才会被选中;

5 IndexWriter类

5.1 Ind exWriter类的构造方法

public IndexWriter(Directory d,Analyzer a,Boolean create,

MaxFieldLength length)

public IndexWriter(Directory d,Analyzer a, MaxFieldLength mfl)

IndexWriter writer=new IndexWriter(new SimpleFSDirectory(new

File(path)),new StandardAnalyzer(),true,

IndexWriter.MaxFieldLength.LIMITED);

第一个参数:索引存放在什么地方

第二个参数:文本分析器,继承自org.apache.lucene.analysis.Analyzer 类

第三个参数:是否创建新索引,为true时,IndexWriter不管目录内是否已经有索引了,一律清空,重新建立;当为false时,则IndexWriter会在原有基础上增量添加索引。所以在更新的过程中,需要设置该值为false。

第四个参数:最大field数量

5.2 添加文档

public void addDocument(Document doc)

public void addDocument(Document doc,Analyzer analyzer)//使用一个开发者自定义的,而非事先在构建IndexWriter时声明的Analyzer来进行分析

writer.addDocument(doc1);

writer.addDocument(doc2);

相关文档
最新文档