全文检索lucene研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);