lucene使用
文章目录
一、lucene简介
lucene是一个全文检索工具包,用于对大量数据,进行基于关键字查询。通常经过分词、建立索引、基于索引查询的过程。
二、lucene知识点
2.1 Directory
Directory,索引库,如内存索引(RAMDirectory)、硬盘上索引(FSDirectory)。还包括索引库控制IndexWriterConfig,包括三种方式:
- IndexWriterConfig.OpenMode.CREATE,创建或覆盖已经存在的索引;
- IndexWriterConfig.OpenMode.APPEND,追加已经存在的索引;
- IndexWriterConfig.OpenMode.CREATE_OR_APPEND,创建或追加已经存在的索引;
2.2 Document
Document,文档的建立,在lucene中,索引的建立和索引的查询都是基于文档的,需要注意的是文档中Field属性,主要包括以下几项:
- tokenized,即Analyzer把输入的字符串流解析为单词序列,也就是token流,或者说tokenized;
- indexed,即加入到索引中;
- Field.Store ,是否将原始串存储。
2.3 Field
Field,文档域,下面相关模式:
- StringField,索引(indexed),不切词(no tokenized),也就是整个串就是一个token;
- TextField ,索引(indexed),切词(tokenized);
- StoredField ,不索引(no indexed),不切词(no tokenized),仅进行存储,便于在结果中查看;
- IntPoint ,索引,可用于范围查询;
- LongPoint,索引,可用于范围查询;
- FloatPoint,索引,可用于范围查询;
- DoublePoint,索引,可用于范围查询;
- SortedDocValuesField,索引,可用于排序查询;
- SortedSetDocValuesField,索引,可用于集合排序查询;
- NumericDocValuesField,指定文档分数。
2.4 Term
Term,切词,也就是把需要建立索引的句子切分,分解成一个一个的单词,
通常使用Analyzer进行切分,analyzer切分有多种具体的实现方式,下面列出部分:
- StandardAnalyzer,基于字的切分;
- CJKAnalyzer ,二元覆盖,即基于两个字的切分,这时会出现其中一个字重叠的情况;
- HanLPAnalyzer , 汉语言的一种分词方式,一会我们将使用这个做实例介绍。
2.5 IndexWriter
IndexWriter,索引建立,将之前建立的索引加入索引库中 ,需要注意的是,可以使用term对文档进行唯一定位。
索引库的操作有:
- addDocument ,添加索引;
- updateDocuments,修改索引;
- deleteDocuments,删除索引;
2.6 IndexSearcher
IndexSearcher, 索引查询,索引的查询方法有多种方式,即Query下面列出部分:
- QueryParser,查询分词列;
- RangeQuery,区间查询;
- PrefixQuery,前缀查询;
- TermQuery,基本词查询,查询不切分的字段;
- MultiTermQuery,多词查询;
- WildcardQuery,通配符查询,注意此查询很慢,且开头不能使用*;
- BooleanQuery,布尔查询;
- FieldScoreQuery,函数查询。
- FuzzyQuery, 模糊查询,也就是根据相似度查询,
三、lucene实例
3.1 添加maven依赖
<properties>
<lucene.version>6.5.0</lucene.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>${lucene.version}</version>