lucene 3.5入门(包含例子Demo)

合集下载

Lucene_入门简介

Lucene_入门简介
Lucene中的倒排索引
索引相关类
Document Field(URL) Field(Title )
• • •
Analyzer Field(Body )
IndexWriter


通过IndexWriter来写索引,通过IndexReader读索引。 一段有意义的文字需要通过Analyzer分割成一个个词语后才能按关键词搜索。 Analyzer就是分析器,StandardAnalyzer是Lucene中最常用的分析器。 TokenStream实例保存着当前的Attribute状态。 Attribute 是一个接口,实 现中包含一个代表词本身含义的字符串和该词在文章中相应的起止偏移位置, Attribute还可以用来存储词类型或语义信息。 一个Document代表索引库中的一条记录。要搜索的信息封装成Document 后通过IndexWriter写入索引库。调用Searcher接口按关键词搜索后,返回的也是 一个封装后的Document的列表。 一个Document可以包含多个列,叫做field。例如一篇文章可以包含“标 题”、“正文”、“修改时间”等field,创建这些列对象以后,可以通过 Document的add方法增加这些列。
搜索
// read-only=true IndexSearcher isearcher = new IndexSearcher(directory, true); // Parse a simple query that searches for "text": QueryParser parser = new QueryParser(Version.LUCENE_CURRENT,"fieldname", analyzer); Query query = parser.parse("text"); //返回前1000条搜索结果 ScoreDoc[] hits = isearcher.search(query, 1000).scoreDocs; //遍历结果 for (int i = 0; i < hits.length; i++) { Document hitDoc = isearcher.doc(hits[i].doc); System.out.println(hitDoc.get("fieldname")); } isearcher.close(); directory.close();

lucene学习

lucene学习

lucene学习1.基本概念信息检索(IR)是指文档搜索、文档内信息搜索或者文档相关的元数据搜索等操作。

文档:用于搜索的内容部件。

词汇单元:即分词。

词干提取器,如Snowball。

搜索质量主要由查准率(Preciion)和查全率(Recall)来衡量。

[1]P13语法检查器:Lucene的contrib目录提供了两个模块完成此功能。

查询对象:Lucene提供了一个称之为查询解析器(QueryParer),用它可以根据通用查询语法将用户输入的文本处理成查询对象。

查询搜索:査询检索索引并返回与査询语句匹配的文档,结果返回时按照査询请求来排序。

搜索查询组件涵盖了搜索引擎内部复杂的工作机制,Lucene正是如此,它为你完成这一切。

倒排索引:invertedinde某常见的搜索理论模型有如下3种。

■纯布尔模型(PureBooleanmodel)文档不管是否匹配查询请求,都不会被评分.在该模型下,匹配文档与评分不相关,也是无序的;一条查询仅获取所有匹配文档集合的一个子集。

■向量空间模型(Vectorpacemodel)查询语句和文档都是高维空间的向量模型,这里每一个独立的项都是一个维度。

查询语句和文档之间的相关性或相似性由各自向量之间的距离计算得到.■概率模型(Probabiliticmodel)在该模型中,采用全概率方法来计算文档和查询语句的匹配概率。

Lucene在实现上采用向量空间模型和纯布尔模型,并能针对具体搜索让你决定采用哪种模型。

最后,Lucene返回的文档结果必须用比较经济的方式展现给用户。

搜索范围:涉及分布式搜索,ApacheLucene项目下的Solr和Nutch 项目提供了对索引拆分和复制的支持,另Katta和Elaticearch。

1.1Lucene核心类概貌执行简单的索引过程需要用到以下几个类:■Inde某Writer■Directory■Analyzer■Document■FieldInde某Writer(写索引)是索引过程的核心组件。

Lucene初级教程

Lucene初级教程

Lucene初级教程2007-12-26 15:24 点击次数:0 次1 lucene简介1.1 什么是luceneLucene是一个全文搜索框架,而不是应用产品。

因此它并不像 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。

2 lucene的工作方式lucene提供的服务实际包含两部分:一入一出。

所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除;所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源。

2.1写入流程源字符串首先经过analyzer处理,包括:分词,分成一个个单词;去除stopword(可选)。

将源中需要的信息加入Document的各个Field中,并把需要索引的Field索引起来,把需要存储的Field存储起来。

将索引写入存储器,存储器可以是内存或磁盘。

2.2读出流程用户提供搜索关键词,经过analyzer处理。

对处理后的关键词搜索索引找出对应的Document。

用户根据需要从找到的Document中提取需要的Field。

3 一些需要知道的概念3.1 analyzerAnalyzer是分析器,它的作用是把一个字符串按某种规则划分成一个个词语,并去除其中的无效词语,这里说的无效词语是指英文中的“of”、“the”,中文中的“的”、“地”等词语,这些词语在文章中大量出现,但是本身不包含什么关键信息,去掉有利于缩小索引文件、提高效率、提高命中率。

分词的规则千变万化,但目的只有一个:按语义划分。

这点在英文中比较容易实现,因为英文本身就是以单词为单位的,已经用空格分开;而中文则必须以某种方法将连成一片的句子划分成一个个词语。

具体划分方法下面再详细介绍,这里只需了解分析器的概念即可。

3.2 document用户提供的源是一条条记录,它们可以是文本文件、字符串或者数据库表的一条记录等等。

一条记录经过索引之后,就是以一个Document的形式存储在索引文件中的。

Lucene入门+实现

Lucene入门+实现

Lucene⼊门+实现Lucene简介详情见:()lucene实现原理其实⽹上很多资料表明了,lucene底层实现原理就是倒排索引(invertedindex)。

那么究竟什么是倒排索引呢?经过Lucene分词之后,它会维护⼀个类似于“词条--⽂档ID”的对应关系,当我们进⾏搜索某个词条的时候,就会得到相应的⽂档ID。

不同于传统的顺排索引根据⼀个词,知道有哪⼏篇⽂章有这个词。

图解:Lucene在搜索前⾃⾏⽣成倒排索引,相⽐数据库中like的模糊搜索效率更⾼!Lucene 核⼼API索引过程中的核⼼类1. Document⽂档:他是承载数据的实体(他可以集合信息域Field),是⼀个抽象的概念,⼀条记录经过索引之后,就是以⼀个Document的形式存储在索引⽂件中的。

2. Field:Field 索引中的每⼀个Document对象都包含⼀个或者多个不同的域(Field),域是由域名(name)和域值(value)对组成,每⼀个域都包含⼀段相应的数据信息。

3. IndexWriter:索引过程的核⼼组件。

这个类⽤于创建⼀个新的索引并且把⽂档加到已有的索引中去,也就是写⼊操作。

4. Directroy:是索引的存放位置,是个抽象类。

具体的⼦类提供特定的存储索引的地址。

(FSDirectory 将索引存放在指定的磁盘中,RAMDirectory ·将索引存放在内存中。

)5. Analyzer:分词器,在⽂本被索引之前,需要经过分词器处理,他负责从将被索引的⽂档中提取词汇单元,并剔除剩下的⽆⽤信息(停⽌词汇),分词器⼗分关键,因为不同的分词器,解析相同的⽂档结果会有很⼤的不同。

Analyzer是⼀个抽象类,是所有分词器的基类。

搜索过程中的核⼼类1. IndexSearcher :IndexSearcher 调⽤它的search⽅法,⽤于搜索IndexWriter 所创建的索引。

2. Term :Term 使⽤于搜索的⼀个基本单元。

es lucene查询语法

es lucene查询语法

es lucene查询语法(原创实用版)目录1.介绍 Lucene2.Lucene 查询语法的基本概念3.Lucene 查询语法的具体语法规则4.Lucene 查询语法的应用实例5.总结正文Lucene 是一个开源的全文搜索库,它提供了高度可定制和可扩展的全文搜索功能。

Lucene 查询语法是 Lucene 的核心功能之一,它允许用户通过特定的语法规则来构建搜索查询。

一、介绍 LuceneLucene 是一个全文搜索库,它可以快速地搜索和索引大量数据。

Lucene 支持多种数据类型,包括文本、数字、日期等,并且提供了高度可定制和可扩展的搜索功能。

Lucene 查询语法是 Lucene 的核心功能之一,它允许用户通过特定的语法规则来构建搜索查询。

二、Lucene 查询语法的基本概念Lucene 查询语法的基本概念包括以下几个方面:1.查询语句:查询语句是 Lucene 查询的核心,它定义了搜索的范围和搜索的条件。

2.查询词:查询词是用户输入的关键词,它是查询语句的核心部分。

3.布尔操作符:布尔操作符包括 AND、OR、NOT 等,它们用于组合查询词,以满足用户的搜索需求。

4.修饰词:修饰词是用于修饰查询词的词语,它可以改变查询词的搜索范围和搜索条件。

三、Lucene 查询语法的具体语法规则Lucene 查询语法的具体语法规则包括以下几个方面:1.查询语句的基本格式:查询语句的基本格式为“查询词 1AND/OR/NOT 查询词 2”,其中“查询词 1”和“查询词 2”可以是多个查询词和修饰词的组合。

2.布尔操作符的使用:布尔操作符包括 AND、OR、NOT 等,它们用于组合查询词,以满足用户的搜索需求。

3.修饰词的使用:修饰词包括普通修饰词和特殊修饰词,普通修饰词包括“+”和“-”,它们用于改变查询词的搜索范围和搜索条件;特殊修饰词包括“*”、“@”、“#”等,它们用于指定查询词的位置和数量。

4.查询语句的特殊格式:Lucene 查询语法还支持特殊格式的查询语句,包括短语查询、范围查询、通配符查询等。

lucene query 语法

lucene query 语法

lucene query 语法Lucene Query语法是Lucene搜索引擎中使用的一种搜索语法,由一系列的搜索参数和限制条件组成,用于为用户查询所需的结果。

虽然Lucene Query语法功能十分强大,但对于初学者来说可能有些复杂。

本文将为了帮助初学者更好地理解Lucene Query语法,介绍其特点、组成结构和使用方法等。

一、Lucene Query语法的特点1. 灵活性Lucene Query语法非常灵活,可以处理多种匹配和搜索需求,例如对单个词语、短语、模糊搜索以及实现排除性搜索等。

2. 分词器支持Lucene Query语法支持各种分词器,这样用户可以通过选择不同的分词器进行搜索结果的匹配。

3. 易于理解虽然Lucene Query语法具有很高的灵活性,但一旦熟悉了其语法结构,用户就很容易理解和应用查询条件。

二、Lucene Query语法的组成结构Lucene Query语法的查询结构由多个组成部分组成,每一个组件表示一个查询条件,可以是一个单独搜索条件,也可以是多个条件的组合形成的复合搜索条件连接。

1. 查询语法启动符:用于表示Lucene Query语法的开始,通常为“+”或“-”符号,用于表示是否搜索一个特定的项目或者排除一个项目2. 字段名:指定需要搜索的字段名称,可以是一个或多个,使用“:”符号将字段名和搜索参数或值隔开。

3. 搜索参数或值:需要搜索的参数或值,也可以使用布尔运算符(AND/OR)进行多个查询条件的组合。

例如:name:john AND age:254. 通配符:用于单个字符或多个字符的模糊匹配,例如:name:j* 可以匹配 john 或者 jacob5. 范围查找:指定需要查找的数据范围,使用“[ ]”表示查询范围6. 模糊搜索:使用“~”号后跟一个数字(0~1)表示模糊搜索的程度,数字越小表示模糊匹配程度越高7. 布尔运算符:用于将多个查询条件组合成一个复合查询条件。

lucene简介原理及实践(共48张)

lucene简介原理及实践(共48张)
第17页,共48页。
Analyzer
在一个文档被索引之前,首先需要对文档内容进行分词处理, 并且而剔除一些冗余的词句(例如:a,the,they等),这部分工作
就是由 Analyzer 来做的。
Analyzer 类是一个抽象类,它有多个实现。
BrazilianAnalyzer, ChineseAnalyzer, CJKAnalyzer, CzechAnalyzer, DutchAnalyzer, FrenchAnalyzer, GermanAnalyzer, GreekAnalyzer, KeywordAnalyzer, PatternAnalyzer, PerFieldAnalyzerWrapper, RussianAnalyzer, SimpleAnalyzer, SnowballAnalyzer, StandardAnalyzer, StopAnalyzer, ThaiAnalyzer, WhitespaceAnalyzer
通过实现特定API,完成文档建立索引的工 作
第7页,共48页。
Lucene搜索机制-B 基于(jīyú)索引搜索
Lucene通过特定的类,可以对索引进行操 作
通过特定的类,封装搜索结果,供应用程 序处理
第8页,共48页。
Lucene系统结构
第9页,共48页。
Lucene包结构(jiégòu)功能表
第19页,共48页。
Field
Field 对象(duìxiàng)是用来描述一个文档的某个属性的,比如一封电子邮件的标 题和内容可以用两个 Field 对象分别描述。
Field(String name, byte[] value, Field.Store store) Create a stored field with binary value.

lucene入门实战

lucene入门实战
Field.Index.TOKENIZED, Field.TermVector.YES);
doc.add(fieldId);
doc.add(fieldPath);
doc.add(fieldCategory);
doc.add(fieldTime);
doc.add(fieldAuthor);
Field fieldContents = new Field("content", htmlContent,
PRESS, Field.Index.TOKENIZED,Field.TermVector.YES);
Field fieldTime = new Field("time", article.getUpdateTime().toString(), Field.Store.YES, Field.Index.TOKENIZED,
}
searcher.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
return fileList;
<bean class="java.io.File">
<constructor-arg value="E:/Projects/netSchool/indexDatas" />
</bean>
</constructor-arg>
<constructor-arg index="1" >

Lucene搜索入门教程

Lucene搜索入门教程

Lucene搜索入门教程1.了解搜索技术1.1搜索引擎搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。

搜索引擎包括全文索引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。

搜索引擎的原理可以看到搜索引擎的功能主要是三部分:●爬行和抓取数据(爬虫多用python来编写、但是java也能实现)●对数据对预处理(提取文字、中文分词、建立倒排索引)提供搜索功能(用户输入关键词后、去索引库搜索数据)在上述三个步骤中,java要解决的往往是后两个步骤:数据处理和搜索。

那么,我们之前学习的mysql知识也能实现数据的存储和搜索,为什么还要学新的东西呢?1.2传统数据库搜索的问题要实现类似百度的复杂搜索,或者京东的商品搜索,如果使用传统的数据库存储数据,那么会存在一系列的问题:●数据库数据单表存储能力有限,无法存储海量数据●解决大数据,可以进行分库分表。

但是分库分表会增加业务复杂度●搜索只能通过模糊匹配,效率极低●模糊搜索可能导致全表扫描,效率非常差在这里,比较棘手的其实是第二个问题:查询效率低,类似百度和京东这样的网站,对性能要求极高。

如果用户点击搜索需要很久才能拿到数据,没人愿意一直等待下去。

那么问题来了:如何才能提高模糊搜索时的效率呢?答案是:倒排索引技术1.3什么是倒排索引倒排索引是一种存储数据的方式,与传统查找有很大区别:●传统查找:采用数据按行存储,查找时逐行扫描,或者根据索引查找,然后匹配搜索条件,效率较差.概括来讲是先找到文档,然后看是否匹配.传统线性查找一个10MB的word文件,查找关键字如果在文档最后,大约3秒钟●倒排索引:首先对文档数据按照id进行索引存储,然后对文档中的数据分词,记录对词条进行索引,并记录词条在文档中出现的位置。

这样查找时只要找到了词条,就找到了对应的文档。

关于Lucene3.5的学习

关于Lucene3.5的学习

Lucene 3.5最新版在2011-11-26日发布了。

下载地址:/apache-mirror/lucene/java/3.5.0/Lucene进行了大量优化、改进和Bug的修复,包括:1.大大降低了控制开放的IndexReader上的协议索引的RAM占用(3~5倍)。

2.新增IndexSearcher.searchAfter,可在指定ScoreDoc后返回结果(例如之前页面的最后一个文档),以支持deep页用例。

3.新增SearcherManager,以管理共享和重新开始跨多个搜索线程的IndexSearchers。

基本的IndexReader实例如果不再进行引用,则会被安全关闭。

4.新增SearcherLifetimeManager,为跨多个请求(例如:paging/drilldown)的索引安全地提供了一个一致的视图。

5.将IndexWriter.optimize重命名为forceMerge,以便去阻止使用这种方法,因为它的使用代价较高,且也不需要使用。

6.新增NGramPhraseQuery,当使用n-gram分析时,可提升30%-50%的短语查询速度。

7.重新开放了一个API(IndexReader.openIfChanged),如果索引没有变化,则返回空值,而不是旧的reader。

8.Vector改进:支持更多查询,如通配符和用于产生摘要的边界分析。

9.修复了若干Bug。

针对做出一个简单的搜索引擎,笔者针对遇到的问题进行探讨:1.关于查询关键字的问题:String queryStr =”中国”;QueryParser queryParser = newMultiFieldQueryParser(Version.LUCENE_35, fields, luceneAnalyzer);Query query = queryParser.parse(queryString);Lucene对这个查询是不分大小写的,当搜索关键字为英文加数字或汉字或其他字符的时候,例如:“swing12”、“swing我sd”等,Lucene会先对这个关键字进行分词,即分成英文+数字或汉字的形式,然后去索引,这样docment中含有”swing”和”12”的Field都被索引出来了。

Lucene入门与使用

Lucene入门与使用

中国Lucene入门与使用本文主要面向具体使用,适用于已熟悉java编程的lucene初学者。

1. Lucene的简介1.1 Lucene 历史org.apache.lucene包是纯java语言的全文索引检索工具包。

Lucene的作者是资深的全文索引/检索专家,最开始发布在他本人的主页上,2001年10月贡献给APACHE,成为APACHE基金jakarta的一个子项目。

目前,lucene广泛用于全文索引/检索的项目中。

lucene也被翻译成C#版本,目前发展为(不过最近好象有流产的消息)。

1.2 Lucene 原理lucene的检索算法属于索引检索,即用空间来换取时间,对需要检索的文件、字符流进行全文索引,在检索的时候对索引进行快速的检索,得到检索位置,这个位置记录检索词出现的文件路径或者某个关键词。

在使用数据库的项目中,不使用数据库进行检索的原因主要是:数据库在非精确查询的时候使用查询语言“like %keyword%”,对数据库进行查询是对所有记录遍历,并对字段进行“%keyword%”匹配,在数据库的数据庞大以及某个字段存储的数据量庞大的时候,这种遍历是致命的,它需要对所有的记录进行匹配查询。

因此,lucene主要适用于文档集的全文检索,以及海量数据库的模糊检索,特别是对数据库的xml或者大数据的字符类型。

2.Lucene的下载和配置2.1 Lucene的下载lucene在jakarta项目中的发布主页:/lucene/docs/index.html。

以下主要针对windows 用户,其它用户请在上面的地址中查找相关下载。

lucene的.jar包的下载(包括.jar和一个范例demo):/jakarta/lucene/binaries/lucene-1.4-fina l.ziplucene的源代码下载:/mirrors/apache/jakarta/lucene/source/lucene-1 .4-final-src.ziplucene的api地址:/lucene/docs/api/index.html本文使用lucene版本:lucene-1.4-final.jar。

LUCENE初级介绍

LUCENE初级介绍

检索过程
2 理解核心搜索类
IndexSearcher : 对应创建索引的 IndexWriter Query: Query是最基本的抽象父类 Hits: Hits类是一个搜索结果(匹配给定查询的文档)文档队列指针的简单容器
检索过程
3 在整个检索过程中,语言分析器,查询分析器, 甚至搜索器(Searcher)都是提供了抽象的接口, 可以根据需要进行定制。 注意:Hits对象包含的仅仅是隐含的文档的引用。 换句话说,不是在搜索的时候立即加载,而是采 用从索引中惰性加载的方式—仅当调用 hits.doc(int)时才会加载。
Luene的确是一个面对对象设计的典范 a):所有的问题都通过一个额外抽象层来方便以后的扩展和重用:你可以通过 重新实现来达到自己的目的,而对其他模块不需要; b):简单的应用入口Searcher, Indexer,并调用底层一系列组件协同的完成搜索 任务; c):所有的对象的任务都非常专一:比如搜索过程:QueryParser分析将查询语 句转换成一系列的精确查询的组合(Query),通过底层的索引读取结构 IndexReader进行索引的读取,并用相应的打分器给搜索结果进行打分/排序 等。所有的功能模块原子化程度非常高,因此可以通过重新实现而不需要修 改其他模块。 d):除了灵活的应用接口设计,Lucene还提供了一些适合大多数应用的语言分 析器实现(SimpleAnalyser,StandardAnalyser),这也是新用户能够很快上手 的重要原因之一。
创建索引
2 理解核心索引类
IndexWriter: 中心组件,这个类创建一个新的索引并且添加文档到一个已有的索引中 Directory: 是一个抽象类,代表一个Lucene索引的位置 Analyzer: 分词器,索引和检索是必须统一用一个分析器 Document: 一个Document代表字段的集合,可以把它想象为以后可获取的虚拟文档 Field: 在索引中的每个Document含有一个或多个字段,具体化为Field类

Lucene学习笔记(一)

Lucene学习笔记(一)

Lucene学习笔记(一)申明:此文章中说到的分词器就是分析器中的一种,不要理解错了。

注意:以下内容中有没有解释留待以后章节解释的有:1. writer.optimize();对索引进行优化一、Lucene基础:大纲: 1. 信息获取与搜索引擎的发展2. Lucene的历史3. 建立索引(索引库)与搜索1. 信息获取技术包含:信息的表示、存储、组织和对信息的访问方法。

信息的表示和组织是为了用户更容易的访问到需要的信息。

1.1 一般来说,信息获取的流程分为以下四步:1.1.1 获取信息之前,要构建文本数据库,即将来需要进行检索的数据(被检索的数据)1.1.2 需要建立文档的索引,通过文档索引可以检索到对应的文本数据库中对应的数据;有很多建立文档索引的方法,但是用的最多的还是"倒排索引技术",其中Lucene就是采用的这种建立文档索引的技术1.1.3 完成文档索引的建立之后就可以进行检索了,此时需要用户提供一个查询关键字,该关键字将被分析然后利用一些文本处理技术进行处理,当然也可以根据具体的需求进行一系列的处理。

1.1.4 查询关键字准备好之后,进入查询,根据查询关键字可以与文档索引中的数据得到匹配进而得到文本数据库中与匹配上的文档索引对应的数据,然后反馈给用户,当然反馈之前我们可以进行排序等处理,让最接近用户需求的信息排在最前面显示2. 搜索引擎:分为"全文搜索引擎(FullT ext Search Engine)"和"分类目录(Directory)"2.1 全文搜索引擎:通过一个叫网络机器人(Spider)或者叫网络蜘蛛(Crawlers)的软件,自动分析网络上的各种连接并且获取网页信息内容而且会按照规则加以分析整理,记入数据库。

优缺点:使用关键字和一定的语法;全文搜索引擎因为依靠网络机器人等收集数据,所以数据库的容量非常庞大,但是它的查询往往不准确。

Lucene基本使用介绍

Lucene基本使用介绍

Lucene基本使用介绍今天用了下Lucene,发现网上虽然也有不少介绍它的文档,不过很多都偏向介绍概念呀、设计或者是一些更为深入的东西,对于其入门使用的介绍性的文档并不多,就写了这么一篇。

Lucene基本使用介绍本文的目的不在于对Lucene的概念和设计这些进行介绍,仅在于介绍怎么样去使用Lucene来达到自己想要的几种常见的全文检索的需求,如果想深入了解Lucene的话本文不会带给你什么收获的。

看完本文后想更深入的了解Lucene请访问:一.概述随着系统信息的越来越多,怎么样从这些信息海洋中捞起自己想要的那一根针就变得非常重要了,全文检索是通常用于解决此类问题的方案,而Lucene 则为实现全文检索的工具,任何应用都可通过嵌入它来实现全文检索。

二.环境搭建从上下载最新版本的lucene.jar,将此jar作为项目的build path,那么在项目中就可以直接使用lucene了。

三.使用说明3.1.基本概念这里介绍的主要为在使用中经常碰到一些概念,以大家都比较熟悉的数据库来进行类比的讲解,使用Lucene进行全文检索的过程有点类似数据库的这个过程,table---→查询相应的字段或查询条件----→返回相应的记录,首先是IndexWriter,通过它建立相应的索引表,相当于数据库中的table,在构建此索引表时需指定的为该索引表采用何种方式进行构建,也就是说对于其中的记录的字段以什么方式来进行格式的划分,这个在Lucene中称为Analyzer,Lucene提供了几种环境下使用的Analyzer:SimpleAnalyzer、StandardAnalyzer、GermanAnalyzer等,其中StandardAnalyzer是经常使用的,因为它提供了对于中文的支持,在表建好后我们就需要往里面插入用于索引的记录,在Lucene中这个称为Document,有点类似数据库中table的一行记录,记录中的字段的添加方法,在Lucene中称为Field,这个和数据库中基本一样,对于Field Lucene分为可被索引的,可切分的,不可被切分的,不可被索引的几种组合类型,通过这几个元素基本上就可以建立起索引了。

Removed_一个经典Lucene入门模块及例子解析46

Removed_一个经典Lucene入门模块及例子解析46

一个经典Lucene入门模块及例子解析Lucene是一个很强大的全文搜索工具,许多公司或软件实现都用到它,如一些公司用它来查子网信息,再如Eclipse等软件就是用它来实现索引的。

这里给出Lucene的一个简单例子的代码来说明其大致使用流程模块,建立一个简单的Java搜索引擎。

首先我们给出大概模块的代码,实际应用中会视情况而修改。

Lucene实例代码:建立数据(data)的索引(Index)1.用IndexWriter建立一个Lucene index2.创建一个Lucene Document3.将 Lucene document放进 index 中4.优化(optimize)和关闭(close)index用IndexWriter建立Lucene indexString indexPath = "/path/to/whereYou/wantThe/IndexStored"; IndexWriter writer = null;try {// Make a lucene writer and create new Lucene index with arg3 = true writer = new IndexWriter(indexPath, new StandardAnalyzer(), true); } catch (IOException e){System.out.println("IOException opening Lucene IndexWriter: " +e.getMessage());}创建一个 Lucene documentString content = "This is the example text I want to have Lucene index"; Document doc = new Document();doc.add(Field.Text("content",content));将上述创建的document加进 index中try {writer.addDocument(doc);} catch (IOException e) {System.out.println("IOException adding Lucene Document: " +e.getMessage());}优化(optimize)和关闭( close)IndexWritertry {writer.optimize();writer.close();}catch (IOException e) {System.out.println("IOException closing Lucene IndexWriter: " +e.getMessage());}Lucene实例代码: 建立搜索(Search)步骤打开一个 Lucene IndexSearcher许多Lucene刚开始使用者都不注意从用IndexWriter的问题。

JAVA LUCENE教程完整版

JAVA LUCENE教程完整版

Java Lucene in Action(简体中文版)共10部分第一部分Lucene核心1.接触Lucene2.索引3.为程序添加搜索4.分析5.高极搜索技术6.扩展搜索第二部分Lucene应用7.分析常用文档格式8.工具和扩充9.Lucene其它版本10.案例学习[序章]Lucene开始是做为私有项目。

在1997年末,因为工作不稳定,我寻找自己的一些东西来卖。

Java是比较热门的编程语言,我需要一个理由来学习它。

我已经了解如何来编写搜索软件,所以我想我可以通过用Java写搜索软件来维持生计。

所以我写了Lucene。

几年以后,在2000年,我意识到我没有销售天赋。

我对谈判许可和合同没有任何兴趣,并且我也不想雇人开一家公司。

我喜欢做软件,而不是出售它。

所以我把Lucene放在SourceForge上,看看是不是开源能让我继续我想做的。

有些人马上开始使用Lucene。

大约一年后,在2001年,Apache提出要采纳Lucene。

Lucene邮件列表中的消息每天都稳定地增长。

也有人开始贡献代码,大多是围绕Lucene的边缘补充:我依然是仅有的理解它的核心的开发者。

尽管如些,Lucene开始成为真正的合作项目。

现在,2004年,Lucene有一群积极的深刻理解其核心的开发者。

我早已不再每天作开发,这个强有力的工作组在进行实质性的增加与改进。

这些年来,Lucene已经翻译成很多其它的语言包括C++、C#、Perl和Python。

在最开始的Java和其它这些语言中,Lucene的应用比我预想的要广泛地多。

它为不同的应用(如财富100公司讨论组、商业Bug跟踪、Microsoft提供的邮件搜索和100页面范围的Web搜索引擎)提供搜索动力。

在业内,我被介绍为“Lucene人”。

很多人告诉我他们在项目中使用到Lucene。

我依然认为我只听说了使用Lucene的程序的小部分。

如果我当初只是出售它,Lucene应用得不会这么广泛。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

lucene 3.5 入门实例
该版本进行了大量优化、改进和Bug修复,包括:
∙大大降低了控制开放的IndexReader上的协议索引的RAM占用(3~5倍)。

∙新增IndexSearcher.searchAfter,可在指定ScoreDoc后返回结果(例如之前页面的最后一个文档),以支持deep页用例。

∙新增SearcherManager,以管理共享和重新开始跨多个搜索线程的IndexSearchers。

基本的IndexReader实例如果不再进行引用,则会被安全关闭。

∙新增SearcherLifetimeManager,为跨多个请求(例如:paging/drilldown)的索引安全地提供了一个一致的视图。

∙将IndexWriter.optimize重命名为forceMerge,以便去阻止使用这种方法,因为它的使用代价较高,且也不需要使用。

∙新增NGramPhraseQuery,当使用n-gram分析时,可提升30%-50%的短语查询速度。

∙重新开放了一个API(IndexReader.openIfChanged),如果索引没有变化,则返回空值,而不是旧的reader。

∙Vector改进:支持更多查询,如通配符和用于产生摘要的边界分析。

∙修复了若干Bug。

相关文档
最新文档