lyyb2001

只是为方便自己找记录而已
posts - 57, comments - 27, trackbacks - 0, articles - 5
  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理

java搜索引擎: lucene学习笔记

Posted on 2007-03-05 08:36 skycity 阅读(310) 评论(0)  编辑  收藏 所属分类: APACHE开源项目
简介
Doug Cutting 于2000年开始的项目 2001年9月后加入apache, Lucene是Doug Cutting的middle name 。 目前Lucene已经是apache的top level的项目, 已经不在jakarta下面, 同时也有了python,perl,c++,.net, Ruby(进行中)多个版本 
Lucene 主要的两个任务:indexing and searching
Indexing主要使用的类
IndexWriterindex文件由它创建
Directory标志Index路径的类:FSDirectory(文件系统)和RAMDirectory(内存)
Analyzer分析器,处理分词,大小写,词根,消除stop words等,转换格式
document用于存储field对象
Field有4(5?)种类型的Field, 下面专门列出

stop words: 出现频率非常高的一些词汇,它们一般没有检索的意义, 比如英文中的(as a, an, the, in)
类型AnalyzedIndexedStored说明
Field.Keyword(String) YY储存直接检索的对象(身份证号,姓名,日期)
Field.UnIndexed(String,String)  Y不用于检索信息,显示文件类型、地址
Field.UnStored(String,String)Y  大段文本内容,会用来检索,但是不存储
Field.Text(String,String)YYY检索,获取都需要的内容,直接放index中,不过这样会增大index
Field.Text(String,Reader)YY 建议采用Unstored的策略.

Searching主要使用的类
IndexSearcher以只读的方式访问index(注意IndexReader不是只读的),需要传给他一个Query对象来搜索
TermTerm是一个搜索的基本单位,包含Field(目标)和value(条件),可以直接用new Term("field","value")构造
ueryuery有很多子类,比如BooleanQuery,PhraseQuery等,可以在Term基础上加上逻辑(是 否, 或)
TermQuery很基本的Query, 可以由term构造 new TermQuery(term);
Hits包含了搜索的结构,默认按照相关度排序,hits并不会把所有记录(可能很大)直接保存,而是有一个lazy loading机制


Lyyb2001

只有注册用户登录后才能发表评论。


网站导航: