lucene 简介

简介: lucene是一个java编写的开源的全文检索引擎,是一个框架,一套api,是一个核心模块,并不包括用户交互、高亮结果等外围模块。 gradle依赖: dependencies{ compile 'org.apache.lucene:lucene-core:6.0.0' compile 'org.apache.lucene:lucene-analyzers-common:6.

lucene是一个java编写的开源的全文检索引擎,是一个框架,一套api,是一个核心模块,并不包括用户交互、高亮结果等外围模块。

gradle依赖

dependencies{ 
	compile 'org.apache.lucene:lucene-core:6.0.0'
	compile 'org.apache.lucene:lucene-analyzers-common:6.0.0'
	compile 'org.apache.lucene:lucene-demo:6.0.0'
}

示例工程https://code.csdn.net/chuchus/lucenedemo/

1.关系型数据库的对比

lucene拥有倒排文档。
lucene以文档(document)为单位进行检索。与关系型数据库不同,文档不需要有固定的结构,每个文档可以有不同的字段。

2.索引

即倒排索引。简化版的索引可看作 <term,docIDList>这样一个map。

每个索引由若干个段(segment)组成。段的特性是写一次,读多次。段一旦建立便不可更改,直到下次合并。

2.1 文档的更新与删除

段不可更改,这样的设计简化了一些东西,但同时也引入了额外的工作,比如说删除。

被删除的文档信息存储在一个单独的文件中,但该段自身不被更新。那么底层的搜索就是这样的:第一次的搜索结果含有被删的文档,然后再读删除信息,把这个文档从返回结果中过滤掉。

对于更新操作也类似,底层实现是先删除再添加。

2.2 文档的添加


2.3 段合并

多个段在必要的时候会被lucene合并(merging)为一个大段。在合并时,不再需要的信息将被删除(例如被删除的文档)。

段合并的IO开销很大,所以需要控制合并操作的时机与频率。段的合并策略由MergePolicy类负责。

3.域处理

lucene可以对域进行三种操作。

  • 域值可以被索引或不被索引。如果需要搜索一个域,必须对它进行索引。被索引的域值必须是文本格式的,二进制格式的域值只能被存储而不能被索引。
  • 域被索引后,还可以选择性的存储项向量。
  • 域值可以被单独存储。

3.1多值域

向同一个域写多个值是合理的。如一本书有多个作者。此时的代码见下:

for(String author:authors)
	doc.add(new StringField("author",author,Field.Store.YES));

4.package概览

Lucene 软件包的发布形式是一个 JAR 文件,下面我们分析一下这个 JAR 文件里面的主要的 JAVA 包,使读者对之有个初步的了解。 
Package: org.apache.lucene.store
数据存储管理包,主要包括一些底层的IO操作。
Package: org.apache.lucene.codecs
编码管理包,用于方便地自定义索引的编码和结构。
Package: org.apache.lucene.queryParser
查询分析包,实现查询语法,支持关键词之间的运算,如 '或' '且' '非'。
Package: org.apache.lucene.util
lucene公用的算法类
Package: org.apache.lucene.document 
文档结构包,用于描述/索引存储时/的文档结构,类似于关系型数据库中/表/的结构。含有 Document, Field类。这样,每一个文档最终被封装成了一个 Document 对象。 
Package: org.apache.lucene.analysis 
语言分析包。这个包主要功能是对文档进行分词,因为文档在建立索引之前必须要进行分词,所以这个包的作用可以看成是为建立索引做准备工作。 
Package: org.apache.lucene.index 
索引管理包。这个包提供了一些类来协助创建索引以及对创建好的索引进行更新。这里面有两个基础的类:IndexWriter 和 IndexReader,其中 IndexWriter 是用来创建索引并添加文档到索引中的,IndexReader 是用来删除索引中的文档的。 
Package: org.apache.lucene.search 
检索管理包。这个包提供了对在建立好的索引上进行搜索所需要的类。比如 IndexSearcher 和 Hits, IndexSearcher 定义了在指定的索引上进行搜索的方法,Hits 用来保存搜索得到的结果。 

目录
相关文章
|
存储 自然语言处理 算法
Lucene学习总结
Lucene学习总结
75 0
Lucene学习总结
|
分布式计算 算法 Hadoop
什么是 lucene|学习笔记
快速学习 什么是 lucene
65 0
什么是 lucene|学习笔记
|
关系型数据库 MySQL 数据库
为什么要使用 Lucene|学习笔记
快速学习为什么要使用 Lucene
121 0
为什么要使用 Lucene|学习笔记
|
索引
lucene学习笔记
lucene学习笔记
123 0
|
开发框架 Java Apache
Lucene|学习笔记
快速学习 Lucene
|
存储 Java Apache
Lucene7.2.1系列(一)快速入门
Lucene是一套用于**全文检索和搜索**的开放源代码程序库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程序接口,能够做全文索引和搜索,在Java开发环境里Lucene是一个成熟的免费开放源代码工具;就其本身而论,**Lucene是现在并且是这几年,最受欢迎的免费Java信息检索程序库**。
2780 0
|
Java 索引 自然语言处理