lucene基础

来源:互联网 发布:成都家电维修软件 编辑:程序博客网 时间:2024/05/16 19:21

lucene基础知识

一.Lucene简介和核心原理

1.Lucene是什么

lucene是全文检索引擎的工具包,并不是一个完整的全文检索引擎,而是一个全文检索引擎的框架。开发人员可以以此为基础实现完整的全文检索的功能,或者以此为基础建立的完整全文检索引擎,比如:单机solr、分布式elasticsearch

2.倒排索引

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)

二.Lucene  API

1.Analyzer

Analyzer 是分析器,它的作用是把一个字符串按某种规则划分成一个个词语,并去除其中的无效词语,这里说的无效词语是指英文中的“of”、 “the”,中文中的 “的”、“地”等词语,这些词语在文章中大量出现,但是本身不包含什么关键信息,去掉有利于缩小索引文件、提高效率、提高命中率。
分词的规则千变万化,但目的只有一个:按语义划分。这点在英文中比较容易实现,因为英文本身就是以单词为单位的,已经用空格分开;而中文则必须以某种方法将连成一片的句子划分成一个个词语。具体划分方法下面再详细介绍,这里只需了解分析器的概念即可。

 

2.Docuement

索引的数据结构单元,对应建立索引目标的一条条记录,可以是单个文件、一行字符串或者数据库表的一条记录,同时也是field的集合列表;用户进行搜索的结果也是以Document列表的形式返回。

注:类似数据库中的每一条记录

 

3.Field(域)

一个Document可以包含多个信息域,例如一篇文章可以包含“标题”、“正文”、“最后修改时间”等信息域,这些信息域就是通过Field在Document中存储的。

 

Field有三个属性:是否分词、是否存储、是否索引;一般是否分词要和索引结合使用,比如对文章全文检索为例:

        

文章有Id、title(标题)、author(作者)、sumary(摘要)、内容(content);

 

Analyzed

Index

Store

说明

Id

N

N

Y

一般不会根据Id查询,所以不需分词索引,但可能拼接url需要Id

title

Y

Y

Y

关键字查询,需分词;

根据标题查询需索引;

可能根据整个标题查询需存储

sumary

Y

Y

Y

关键字查询,需分词;

根据摘要查询需索引;

可能根据整个摘要查询需存储

author

N

Y

Y

只允许根据作者完整名称的情况下查询;

根据作者查询需索引;

 

content

Y

Y

N

根据文章内容的关键字查询,需对文章内容进行分词建立所以,但文章整体内容太大一般不存储

 

 

 

 

4.Term

Term是搜索的最小单位,它表示文档的一个词语,由词语和词语所要查询的field组成。比如想查询作者名称为“张三”的文章

:author=张三                         是一个term

 

Term term = new Term(fieldname,str);

 

注:类似于关系型数据库中查询条件中的keyvalueselect * from tableid=1

5.Token

tocken是term的一次出现,它包含trem文本和相应的起止偏移,以及一个类型字符串。一句话中可以出现多次相同的词语,它们都用同一个term表示,但是用不同的tocken,每个tocken标记该词语出现的地方。

 

6.Segment

添加索引时并不是每个document都马上添加到同一个索引文件,它们首先被写入到不同的小文件,然后再合并成一个大索引文件,这里每个小文件都是一个segment。

 

 

三.创建索引和查询

         Lucene不同的版本实现方式略微有些差别,比如IndexWriter低版本的实现

:IndexWriter writer = new IndexWriter(indexPath,StandAnlyzer,true);

高版本的实现

:IndexWriter writer = new IndexWriter(directory,indexWriterConfig);

 

lucene6.0版本以上需要jdk1.8版本,  创建索引和查询demo参照官网6.0版本,如果jdk为1.7要降用lucene5.0版本,代码稍微有差异,需根据jdk版本修改

官网地址为:

https://lucene.apache.org/core/6_0_0/demo/index.html