`

lucene学习笔记 1

阅读更多
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主要使用的类
IndexWriter 较核心的类,index文件由它创建
Directory 一个抽象的标示index文件地址的类,有两个实现:FSDirectory和RAMDirectory, 前者是基于文件系统,后者使用内存
Analyzer 文件的分析器(听起来别扭,还是叫Analyzer好了)的抽象,这个类用来处理分词(对中文尤其重要,转换大小写(Computer->computer,实现查询大小写无关),转换词根(computers->computer),消除stop words等,还负责把其他格式文档转换为纯文本等
Document 一个Document对应一个文档记录,他有很多Field,用来处理不同的信息,和检索相关
Field 有4(5?)种类型的Field, 下面专门列出

stop words: 出现频率非常高的一些词汇,它们一般没有检索的意义, 比如英文中的(as a, an, the, in)

 

类型 Analyzed Indexed Stored 说明
Field.Keyword(String,String/Date)   Y Y 这个Field用来储存会直接用来检索的比如(身份证号,姓名,日期等)
Field.UnIndexed(String,String)     Y 不会用来检索的信息,但是检索后需要显示的,比如,硬件序列号,文档的url地址
Field.UnStored(String,String) Y Y   大段文本内容,会用来检索,但是检索后不需要从index中取内容,可以根据url去load真实的内容
Field.Text(String,String) Y Y Y 检索,获取都需要的内容,直接放index中,不过这样会增大index
Field.Text(String,Reader) Y Y   如果是一个Reader, lucene猜测内容比较多,会采用Unstored的策略.

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

tips

  • Lucene允许一个index中的多个Document可以为Heterogeneous(异类) 也就是说,一个Document 有Field (name,price), 下一个Document可以有Field(name,age),两个Document可以代表完全不同的记录,不过这点我还没有想到有什么特别的用处
  • 如果需要对Field增加内容的, 可以使用doc.add(Field.Text("word",newword));如果doc中已经有word这个Field, newword会被自动加入进去,原来的会继续存在, 相当于一个"word"实际上对应一个数组,相当于append
  • Document的编号是不固定的, 如果对index做了修改, document编号会重新计算
  • 如果要删除删除index中的记录,使用IndexReader类完成, IndexReader会先标记删除,真实的删除行为在indexReader关闭时执行.也就是说IndexReader也会修改index
  • 通过indexReader.undeleteAll()方法只能恢复同一个indexreader实例标记删除的记录
  • 没有update方法,要更新记录, 只能通过delete以后再add来进行, 如果要批量进行, 一次性delete完毕以后关闭Reader再打开Writer来add的效率较高

来源:http://www.blogjava.net/cap/archive/2005/07/17/7849.html

分享到:
评论

相关推荐

    Lucene 学习笔记 1

    **Lucene 学习笔记 1** Lucene 是一个全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够在其应用程序中集成高级的搜索功能。本篇学习笔记将深入探讨 Lucene 的...

    【大搜集:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子...

    lucene学习笔记

    标题:Lucene学习笔记 描述:Lucene学习笔记,Lucene入门必备材料 知识点: 一、Lucene概述与文档管理策略 Lucene是一款高性能、全功能的文本搜索引擎库,广泛应用于文档检索、全文搜索等场景。为了提升搜索效率...

    Lucene 3.6 学习笔记

    【Lucene 3.6 学习笔记】 Lucene 是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发。本文将深入探讨Lucene 3.6版本中的关键概念、功能以及实现方法。 ### 第一章 Lucene 基础 #### 1.1 索引部分的核心...

    Lucene学习笔记(一)Lucene入门实例

    NULL 博文链接:https://kylinsoong.iteye.com/blog/719415

    Lucene学习笔记

    【Lucene学习笔记】 Lucene 是一款开源的全文检索框架,由Apache软件基金会维护,它提供了高效的、可扩展的搜索引擎功能。不同于一个完整的应用程序,Lucene 提供的是一个基础组件,开发者可以将其集成到自己的应用...

    lucene3.5学习笔记

    ### Lucene 3.5 学习笔记 #### 一、Lucene 3.5 基本概念 ##### 1.1 Lucene 概述 **1.1.1 IndexWriter** `IndexWriter` 是 Lucene 中的核心类之一,用于创建或更新索引。它提供了添加文档、删除文档、优化索引等...

    lucene 3.5学习笔记

    《Lucene 3.5 学习笔记》 在信息技术高速发展的今天,搜索引擎技术成为了信息检索的核心工具。Apache Lucene,作为一个开源全文检索库,为开发者提供了强大的文本搜索功能。本文将深入探讨Lucene 3.5版本的相关知识...

    lucene3.0学习笔记(三)与paoding整合

    《Lucene 3.0 学习笔记(三)与Paoding整合》 在深入了解Lucene 3.0的过程中,我们经常会遇到如何将其与第三方工具进行整合的问题,以提升搜索性能和用户体验。这篇学习笔记主要关注的是将Lucene 3.0与Paoding搜索...

    lucene基础学习笔记&源码

    **Lucene 基础学习笔记与源码分析** **一、Lucene 概述** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它是一个 Java 开发的开源项目,被广泛应用于各种搜索引擎的构建,支持多种编程...

    本人的Lucene2.9学习笔记

    《深入理解Lucene 2.9.1:构建与搜索的全方位解析》 Lucene,作为一款开源的全文搜索引擎库,被广泛应用于各种信息检索场景。本文将详细讲解Lucene 2.9.1版本的核心概念、架构以及索引创建与搜索的流程。 一、...

Global site tag (gtag.js) - Google Analytics