lucene:lucene学习笔记a

  、环境

  需要导入lucene.jar包(在lucene.apache.org下载)

   2、基本概念

  1.Lucene工作流程:

  (1) 使用IndexWriter在指定目录建立索引文件

  (2) 将需要检索数据转换位DocumentFiled对象然后将Document用IndexWriter添加倒索引文件中

  (3) 处理索引信息关闭IndexWriter流

  (4) 创建搜索Query

  (5) 给IndexSearcher

  2.Lucene字段类型

  Lucene有 4种区别字段类型:KeywordUnIndexedUnStored和Text用于指定建立最佳索引

  ?     Keyword字段是指不需要分析器解析但需要被编入索引并保存到索引中部分JavaSourceCodeIndexer类使用该字段来保存导入类声明

  ?     UnIndexed字段是既不被分析也不被索引但是要被逐字逐句将其值保存到索引中由于我们般要存储文件位置但又很少用文件名作为关键字来搜索所以用该字段来索引Java文件名

  ?     UnStored字段和UnIndexed字段相反该类型Field要被分析并编入索引但其值不会被保存到索引中由于存储思路方法全部源代码需要大量空间所以用UnStored字段来存储被索引思路方法源代码可以直接从Java源文件中取出思路方法源代码这样作可以控制我们索引大小

  ?     Text字段在索引过程中是要被分析、索引并保存类名是作为Text字段来保存下表展示了JavaSourceCodeIndexer类使用Field字段般情况

  3.基本概念(和传统表对比):

Lucene 传统表 介绍说明
IndexWriter table
Document 条记录
Field 每个字段 分为可被索引可切分不可被切分不可被索引几种组合类型
Hits RecoreSet 结果集



  IndexWriter提供了些参数可供设置列表如下

属性 默认值 介绍说明
mergeFactor org.apache.lucene.mergeFactor 10 控制index大小和频率,两个作用

  1.个段有多少document

  2.多少个段合成个大段
maxMergeDocs org.apache.lucene.maxMergeDocs Integer.MAX_VALUE 限制个段中document数目
minMergeDocs org.apache.lucene.minMergeDocs 10 缓存Cache在内存中document数目超过他以后会写入到磁盘
maxFieldLength 1000 个Field中最大Term数目超过部分忽略不会index到field中所以自然也就搜索不到



  这些参数详细介绍说明比较复杂:mergeFactor有双重作用

  (1)设置每mergeFactor个document写入个段比如每10个document写入个段

  (2)设置每mergeFacotr个小段合并到个大段比如10个document时候合并为1小段以后有10个小段以后合并到个大段有10个大段以后再合并实际document数目会是mergeFactor指数

  简单来说mergeFactor 越大系统会用更多内存更少磁盘处理如果要打批量作index那么把mergeFactor设置大没错 mergeFactor 小了以后 index数目也会增多searhing效率会降低但是mergeFactor增大内存消耗会增大很多(指数关系),所以要留意不要”out of memory”

  把maxMergeDocs设置小可以强制让达到定数量document写为个段这样可以抵消部分mergeFactor作用.

  minMergeDocs相当于设置个小cache,第个这个数目document会留在内存里面不写入磁盘这些参数同样是没有最佳值必须根据实际情况点点调整

  maxFieldLength可以在任何时刻设置设置后接下来indexField会按照新length截取的前已经index部分不会改变可以设置为Integer.MAX_VALUE

  4.几种查询方式   

查询方式 介绍说明
TermQuery 条件查询

  例如:TermQuery tquery= TermQuery( Term("name","jerry"));

  name:字段名

  jerry:要搜索
MultiTermQuery 多个字段进行同关键字查询

  Query query= null;

  Query =MultiFieldQueryParser.parse("我", String ; i) {
       .out.prln(hits.doc(i).get("name"));
}

  5.为查询优化索引(index)

  Indexwriter.optimize思路方法可以为查询优化索引(index)的前提到参数调优是为indexing过程本身优化而这里是为查询优化优化主要是减少index文件数这样让查询时候少打开文件优化过程中lucene会拷贝旧index再合并合并完成以后删除旧index所以在此期间磁盘占用增加 IO符合也会增加在优化完成瞬间磁盘占用会是优化前2倍,在optimize过程中可以同时作search

Tags:  lucene教程 lucene.net luceneinaction lucene

延伸阅读

最新评论

发表评论