文档章节

lucene 6.0 常用类与方法

AlanVision
 AlanVision
发布于 2016/07/12 17:00
字数 1184
阅读 213
收藏 4
点赞 0
评论 0

1.目录

org.apache.lucene.store.Directory

指定索引所在目录。

org.apache.lucene.store.RAMDirectory

 存放于内存中的目录。

org.apache.lucene.store.RAMDirectory.RAMDirectory(FSDirectory dir, IOContext context)
构造函数。把文件索引载入内存中。

org.apache.lucene.store.FSDirectory

抽象类,代表磁盘中的目录。有三个实现类:MMapDirectory、NIOFSDirectory与SimpleFSDirectory。

2.文档

org.apache.lucene.document.Document

文档是索引存储与搜索的基本单位。

org.apache.lucene.document.Document.Document()

默认构造函数。

void org.apache.lucene.document.Document.add(IndexableField field)

向文档中添加一个字段。

String org.apache.lucene.document.Document.get(String name)

根据field name拿内容。若不存在返回null。

String org.apache.lucene.document.Document.toString()

内容格式为:Document<字段1信息 字段2信息 ... 字段n信息>。

一个例子为:Document<stored,indexed,tokenized,omitNorms,indexOptions=DOCS<id:4> stored,indexed,tokenized<content:try everything>>

 

3.字段

org.apache.lucene.document.Field

基类。一般会使用它的多个子类。

org.apache.lucene.document.Field.Store
Field类的内部枚举类。有enum{YES,NO}两个值。

3.1 FieldType

org.apache.lucene.document.FieldType
描述一个Field的配置信息,包括是否分词、是否存储等。
org.apache.lucene.document.FieldType.FieldType()
默认构造函数。
void org.apache.lucene.document.FieldType.setStored(boolean value)
设置为true表示要在正向文件.fdx/.fdt中存储这个域。
void org.apache.lucene.document.FieldType.setTokenized(boolean value)
设置为true表示对内容按照预先配置的analyzer进行分词。

3.2 TextField

org.apache.lucene.document.TextField

Field的子类。

org.apache.lucene.document.TextField.TextField(String name, String value, Store store)

构造函数。内部调用setTokenized(true)实现分词。一般用于文档正文。

3.3 StringField

org.apache.lucene.document.StringField
Field的子类。
org.apache.lucene.document.StringField.StringField(String name, String value, Store stored)
构造函数。内部调用setTokenized(false)设置不分词。一般用于国家名、作者名、id等。

3.4数字类型

 org.apache.lucene.document.NumericDocValuesField

存储long类型。日期与时间也可以转换为数字类型存储与筛选。

org.apache.lucene.document.DoubleDocValuesField

存储double类型。

4.建索引

org.apache.lucene.index.IndexWriter

创建并维护索引的类。

org.apache.lucene.index.IndexWriter.IndexWriter(Directory d, IndexWriterConfig conf) 

构造函数。

org.apache.lucene.index.IndexWriterConfig

代表IndexWriter的配置。

org.apache.lucene.index.IndexWriterConfig.IndexWriterConfig(Analyzer analyzer)

构造函数。

4.1 增加文档

void org.apache.lucene.index.IndexWriter.addDocument(Iterable<? extends IndexableField> doc)

向索引中添加文档。

4.2 删除文档

void org.apache.lucene.index.IndexWriter.deleteDocuments(Term... terms)

删除指定的文档。如果只想删除单个文档,务必确保传入的域值只会匹配到单个文档,就像数据库中表的主键PrimaryKey那样。

void org.apache.lucene.index.IndexWriter.deleteDocuments(Query... queries) 

删除指定的文档。注意事项同上。

4.3 更新文档

void org.apache.lucene.index.IndexWriter.updateDocument(Term term, Iterable<? extends IndexableField> doc)

首先删除与term匹配的所有文档,然后添加新文档。这个方法是通过调用deleteDocuments()与addDocument()函数实现的。

4.4 其他操作

int org.apache.lucene.index.IndexWriter.maxDoc()

返回索引中未删除+已删除的文档数。

int org.apache.lucene.index.IndexWriter.numDocs()

返回索引中未删除的文档数。

4.5提交更改与关闭

void org.apache.lucene.index.IndexWriter.commit() 

一些更改会被缓存,如增删文档、添加索引。调用此方法立即向索引提交待定的更改。

void org.apache.lucene.index.IndexWriter.close() 
关闭相关的资源并释放索引的“write lock'”。关闭前会自动提交待定的更改。

5.读索引

org.apache.lucene.index.IndexReader

抽象类,读索引。

DirectoryReader org.apache.lucene.index.DirectoryReader.open(Directory directory)

在指定的目录上打开索引。如 IndexReader reader=DirectoryReader.open(directory);

Document org.apache.lucene.search.IndexSearcher.doc(int docID)

根据id读doc。

6.搜索

6.1 search执行

org.apache.lucene.search.IndexSearcher

在单索引上搜索。

org.apache.lucene.search.IndexSearcher.IndexSearcher(IndexReader r)

构造函数。

TopDocs org.apache.lucene.search.IndexSearcher.search(Query query, int n)

搜索并返回top n 的文档。

void org.apache.lucene.search.IndexSearcher.search(Query query, Collector results)

search()的重载函数。

TopFieldDocs org.apache.lucene.search.IndexSearcher.search(Query query, int n,Sort sort) 

search()的重载函数。

6.2 读结果

6.2.1 TopDocs

org.apache.lucene.search.TopDocs

类,表示搜索的返回结果。

float org.apache.lucene.search.TopDocs.getMaxScore()

结果列表中文档的最大得分值。

ScoreDoc[] org.apache.lucene.search.TopDocs.scoreDocs

public 字段,它没有get()方法,直接用。

6.2.2  ScoreDoc

org.apache.lucene.search.ScoreDoc

类。TopDocs内的基本存储单位。有int doc 与float score两个字段。

int org.apache.lucene.search.ScoreDoc.doc

这个ScoreDoc的id。然后可根据IndexSearcher.doc(int docID)拿到原始doc。

6.2.3 TopFieldDocs

org.apache.lucene.search.TopFieldDocs

TopDocs的子类,代表IndexSearcher.search(Query, int, Sort).方法的返回结果。

SortField[] org.apache.lucene.search.TopFieldDocs.fields

字段。代表者若干排序依据。

ScoreDoc[] org.apache.lucene.search.TopDocs.scoreDocs

继承的父类的字段,盛放的实际是FieldDoc。

org.apache.lucene.search.FieldDoc

ScoreDoc的子类。

Object[] org.apache.lucene.search.FieldDoc.fields

字段。从前到后依次盛放着各项排序标准的分数,为int,float等。

6.1 搜索工作流

IndexSearcher.search()->TopDocs->topdocs.scoreDocs->ScoreDoc[]->docid=ScoreDoc.doc->Document=IndexSearcher.doc(id)

7. Term

org.apache.lucene.index.Term

与field概念类似,只不过field.value为完整的内容,term.value为感兴趣的切分后的词。

org.apache.lucene.index.Term.Term(String fld, String text)
构造函数。如Term term=new Term("field","content");
“this”、“,”之类的停用词一般会被收录进索引中,但在搜索的时候被过滤掉。

8.Analyzer 

对域值分析并生成token,可通俗地理解为分词器。

9.Query 

查询类,抽象类

9.1 TermQuery

TermQuery 最简单、最基本的Query,用来查询不切分的单词。依靠Term类初始化

如Query query=new TermQuery(term);

 

9.2 QueryParser

org.apache.lucene.queryparser.classic.QueryParser

 

此类用于将lucene查询表达式转换为内置的查询类型。

org.apache.lucene.queryparser.classic.QueryParser.QueryParser(String fieldName, Analyzer a)

构造函数。

Query org.apache.lucene.queryparser.classic.QueryParserBase.parse(String query)

得到Query对象。

10.Collector

编写自定义的Colletor,可以对搜索返回的文档实现更精确的控制。

本文转载自:http://blog.csdn.net/chuchus/article/details/40923939

共有 人打赏支持
AlanVision
粉丝 111
博文 47
码字总数 16858
作品 0
深圳
程序员
Lucene highlighter高亮显示

这个功能非常重要,先贴代码出来: 程序中,重要点都做了介绍,至于基础性的东西,很难讲全面,具体可以参看lucene in action第二版,上面说得相对详细点,虽然说是基于3.0版本的,但大多数东...

g_dragon
2016/05/08
572
0
Lucene4.7 索引和检索的常用API(二)

前面几篇笔者已经把Lucene的最基本的入门,介绍完了,本篇就对Lucene基本的知识做一个总结,以便于加深对Lucene基本API组件的理解。 为了方便对比学习,下面给出表格数据 索引期间使用的API...

一枚Sir
2014/04/10
0
0
lucene基础(1)

lucene使用步骤分为两步,一是建立索引,二是搜索索引文档; 一、建立索引 先了解必须的五个基础类; 1、Document:由过个Field组成。相当于数据库的一条记录,Field对象相当于记录的字段; ...

110hxl
2016/10/11
9
1
android_studio Lucene入门

最近想在android上弄个搜索应用,但入门就比较麻烦。首先现在都建议用 android studio这个工具,其次lucene更新实在太快,新版资料很难找。 一、android studio 这个版本目前已经更新到2.0了...

g_dragon
2016/05/07
243
0
我封装的全文检索之lucene篇

最近利用晚上下班还有周末的时间自己捣腾的封装了一个我自己的全文检索引擎(基于lucene和solr).现在将大概的思路给写出来,分享下: 1.首先是索引对象,也可以说是查询的VO对象.封装了几个常用字...

Crazy_Coder
2013/05/19
0
32
Jcseg 1.9.8 发布,新增检索模式/细粒度切分

Jcseg是基于mmseg算法的一个轻量级开源中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了最新版本的lucene, solr, elasticsearch的分词接口。...

狮子的魂
2016/06/13
3.8K
25
Lucene4.3开发之第三步之温故知新(三)

本篇就对lucene的基本知识进行一个总结,以便于加深对lucene基本api组件的理解。 1、IndexWriter:是索引过程的核心类,主要负责创建索引或者打开已有索引,提供索引的增删改等操作。 2、Ind...

heroShane
2014/02/20
0
0
Elasitcsearch High Level Rest Client学习笔记(一)

文档地址:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.1/java-rest-high.html java doc地址: https://artifacts.elastic.co/javadoc/org/elasticsearch/client/el......

木子SMZ
07/12
0
0
Lucene-5.2.1学习:入门

1、Lucene的核心jar包 lucene-core-5.2.1.jar lucene-analyzers-common-5.2.1.jar lucene-queryparser-5.2.1.jar 2、主要开发包说明 org.apache.lucene.analysis:语言分析器,主要用于分词 ......

Harmel
2015/08/11
9.2K
3
Apache Lucene 6.0.0 发布,Java 搜索引擎

Apache Lucene 6.0.0 发布了,一些提升: Java 8 is the minimum Java version required. Dimensional points, replacing legacy numeric fields, provides fast and space-efficient suppor......

oschina
2016/04/10
5.5K
8

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CentOS “Destination Host Unreachable”问题解决办法

挑战极速安装CentOS时遇到局域网主机不能通信的情况: [root@zjd network-scripts]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=......

wffger
5分钟前
0
0
CentoOS6.6安装netcat

CentOS下安装netcat 使用zookeeper过程中,需要监控集群状态。在使用四字命令时(echo conf | nc localhost 2181),报出如下错误:-bash: netcat: command not found。 我的系统是CentOS 6....

ghou-靠墙哭
16分钟前
0
0
es6之解构赋值巧用

ES6 允许按照一定模式,从数组、对象等中提取值,对变量进行赋值,这被称为解构赋值。 如何进行解构赋值我这里就不赘述,本篇文章主要是将解构赋值的巧妙使用之处。 1、交互变量的值 常用交互...

秋季长青
21分钟前
0
0
Elasitcsearch High Level Rest Client学习笔记(三)批量api

Bulk Request BulkRequest可以在一起从请求执行批量添加、更新和删除,至少需要添加一个操作 BulkRequest request = new BulkRequest(); //创建BulkRequestrequest.add(new IndexRequest("...

木子SMZ
24分钟前
0
0
mybatis-dynamic sql

OGNL expressions if 判断是否存在值 <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{tit......

writeademo
32分钟前
0
0
社交系统ThinkSNS+ V1.8.3更新播报

     研发发布版本号:1.8.3   本次版本于2018年7月16日发布   本次发布类型:新增功能、细节调整与优化   社交系统ThinkSNSPlus更新体验:请于官网下载/安装最新版或联系QQ35159...

ThinkSNS账号
35分钟前
0
0
教育思考:选择编程是一场父母和孩子的和解[图]

教育思考:选择编程是一场父母和孩子的和解[图]: 之前有个很热的段子是这样讲的:深夜十点的时候,某小区一女子大声喊叫“什么关系?啊?!到底什么关系?你说!”最后发现原来是一位妈妈陪...

原创小博客
36分钟前
0
0
X64汇编之指令格式解析

最近由于项目组内要做特征码搜索的东西,便于去Hook一些未导出函数,你懂得...于是就闲着学习了一下x86/x64的汇编指令格式。x86的汇编指令格式请参照http://bbs.pediy.com/showthread.php?t...

simpower
39分钟前
0
0
rust 语法概要(只适合不熟悉时快速查阅使用,不适合理解其精髓。未完待续)

注意:本内容只适合快查,不适合理解精髓。精髓请研读 https://kaisery.github.io/trpl-zh-cn/foreword.html 基本数据类型 i8,i16,i32,i64,i128 u8,u16,u32,u64,u128 f32,f64 char bool:true...

捍卫机密
42分钟前
0
0
JS中严格模式和非严格模式

1,使用 严格模式的使用很简单,只有在代码首部加入字符串 "use strict"。必须在首部即首部指其前面没有任何有效js代码除注释,否则无效 2.注意事项 (1)不使用var声明变量严格模式中将不通...

AndyZhouX
42分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部