lucene 6.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。可通俗地理解为分词器。

工作原理及相关类见文章《【lucene】 field->term的分析过程》

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,能够对搜索返回的文档实现更精确的控制。

详见《lucene Collector 文档收集器》

时间: 2024-10-06 12:31:11

lucene 6.0 经常使用类与方法的相关文章

反射之获取类,方法(0)

1 反射之获取类      获取类有三种方法 public interface Person { public void sayHi(); }   public class Student  implements Person{ private String id; private String name; private int age; public int sex=1; //省去构造方法和get set方法 } Class c1 = Student.class; Class c2=Clas

使得CI在NetBeans 8.0中自动提示CI相关类和方法

把这两个文件放到项目文件根目录的nbproject文件夹下面,运行index.php如:http://localhost/你的CI目录/nbproject/index.php,之后重启netbeans.试试写$this->看后面出现什么!哈哈哈 index.php ===============================================  <?php$filearr = file('CI_Autocomplete_2.0.php');$startpos = array()

C#4.0语法糖之第五篇: 匿名类 &amp; 匿名方法

今天时间有点早,所以上来在写一篇文章吧,继续上一篇的文章,在我们平时编程过程中有没有遇到过这样的一个情景,你定义的类只是用来封装一些相关的数据,但并不需要相关联的方法.事件和其他自定义的功能.同时,这个类仅仅在当前的应用程序中使用,而不需要在项目间重用.你所需要的只是一个“临时的”类型,现在我们来看看这个传统类的定义: 1 internal class oneClass 2  3 { 4  5      //定义若干私有数据成员 6  7      //通过属性来封装每个数据成员 8  9   

创建一个接口Shape,其中有抽象方法area,类Circle 、Rectangle实现area方法计算其面积并返回。又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar;在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象;如是2,生成Rectangle对象;如是3,生成S

题目补充: 创建一个接口Shape,其中有抽象方法area,类Circle .Rectangle实现area方法计算其面积并返回. 又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar: 在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象: 如是2,生成Rectangle对象:如是3,生成Star对象).然后将Vector中元素依次取出,判断其是否为Star类.如是返回其

Lucene 6.0 提取新闻热词Top-N

一.需求 给出一篇新闻文档,统计出现频率最高的有哪些词语. 二.思路 关于文本关键词提取的算法有很多,开源工具也不止一种.这里只介绍如何从Lucene索引中提取词项频率的TopN.索引过程的本质是一个词条化的生存倒排索引的过程,词条化会从文本中去除标点符号.停用词等,最后生成词项.在代码中实现的思路是使用IndexReader的getTermVector获取文档的某一个字段的Terms,从terms中获取tf(term frequency).拿到词项的tf以后放到map中降序排序,取出Top-N

Lucene 3.0 输出相似度

http://www.cnblogs.com/ibook360/archive/2011/10/19/2217638.html Lucene3.0之结果排序(原理篇) 传统上,人们将信息检索系统返回结果的排序称为"相关排序" (relevance ranking) ,隐含其中各条目的顺序反映结果和查询的相关程度. 1. 基本排序原理 ①     向量空间模型 Gerald Salton 等在 30 多年前提出的"向量空间模型" (Vector Space Model

Lucene.Net3.0.3+盘古分词器学习使用

一.Lucene.Net介绍 Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎.开发人员可以基于Lucene.net实现全文检索的功能. Lucene.net是Apache软件基金会赞助的开源项目,基于Apache License协议. Lucene.net并不是一个爬行搜索引擎,也不会自动地索引内容.我们得先将要索引的文档中的文本抽取出来,然后再将其加到Lucene.

关于Lucene 3.0升级到Lucene 4.x 备忘

最近,需要对项目进行lucene版本升级.而原来项目时基于lucene 3.0的,很古老的一个版本的了.在老版本中中,我们主要用了几个lucene的东西: 1.查询lucene多目录索引. 2.构建RAMDirectory,把索引放到内存中,以提高检索效率. 3.构建Lucene自定义分词. 4.修改Lucene默认的打分算法.  下面,将代码改造前和改造后做一对比: 1. 搜索多索引目录 3.0 构建多索引目录: 1 // 初始化全国索引 2 private boolean InitGloba

Lucene 4.0 正式版发布,亮点特性中文解读[转]

http://blog.csdn.net/accesine960/article/details/8066877 2012年10月12日,Lucene 4.0正式发布了(点击这里下载最新版),这个版本因为诸多的新特性和大胆的架构调整一直备受期待.无论是索引结构,索引算法以及整体架构的包容性都发生了翻天覆地的变化.正如大家一直所说的Lucene是一个搜索工具包 ,而4.0的发布则让Lucene向搜索框架的方向迈出了一大步. 下面我们来逐一解读Lucene 4.0的新特性吧. Lucene 4.0