- 浏览: 71594 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (46)
- 行业应用 (10)
- Struts1.X学习开发应用 (7)
- Struts2学习开发应用 (2)
- Hibernate学习开发应用 (8)
- Spring2.5学习开发应用 (3)
- IBatis开发与应用 (2)
- Ajax学习开发应用 (3)
- DWR学习开发应用 (2)
- JQuery学习开发应用 (2)
- Ext学习开发应用 (2)
- WebService学习开发应用 (2)
- xfire学习应用开发 (2)
- xml学习开发应用 (2)
- java基础学习 (2)
- J2EE学习开发应用 (4)
- java Awt/Swing学习开发应用 (2)
- Java Web 学习开发应用 (17)
- J2SE基础学习 (2)
- java 网络编程学习开发应用 (2)
- 设计模式 (3)
- Oracle学习 (2)
- BD2学习 (2)
- 其他数据库 (2)
- SQL学习 (2)
- 报表工具 (6)
- 工作流 (2)
最新评论
本文将探讨 Apache Lucene —— 性能卓越、功能全面的文本搜索引擎库。我们将学习 Lucene 架构及其核心 API。学习如何使用 Lucene 进行跨平台全文本搜索、建立索引、显示结果,以及如何扩展搜索。<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
Lucene 是一个开源、高度可扩展的搜索引擎库,可以从 Apache Software Foundation 获取。您可以将 Lucene 用于商业和开源应用程序。Lucene 强大的 API 主要关注文本索引和搜索。它可以用于为各种应用程序构建搜索功能,比如电子邮件客户端、邮件列表、Web 搜索、数据库搜索等等。Wikipedia、TheServerSide、jGuru 和 LinkedIn 等网站都使用了 Lucene。
Lucene 还为 Eclipse IDE、Nutch(著名的开源 Web 搜索引擎)以及 IBM®、AOL 和 Hewlett-Packard 等公司提供搜索功能。Lucene 已经兼容许多其他编程语言,包括 Perl、Python、C++ 和 .NET。到 2009 年 7 月 30 日止,用于 Java™ 编程语言的最新版 Lucene 为 V2.4.1。
Lucene 功能众多:
- 拥有强大、准确、有效的搜索算法。
- 计算每个文档匹配给定查询的分数,并根据分数返回最相关的文档。
- 支持许多强大的查询类型,比如 PhraseQuery、WildcardQuery、RangeQuery、FuzzyQuery、BooleanQuery 等。
- 支持解析人们输入的丰富查询表达式。
- 允许用户使用定制排序、过滤和查询表达式解析扩展搜索行为。
- 使用基于文件的锁定机制保护并发索引修改。
- 允许同时搜索和编制索引。
|
如图 1 所示,使用 Lucene 构建功能全面的搜索应用程序主要涉及编制数据索引、搜索数据和显示搜索结果几个方面。
本文从使用 Lucene V2.4.1 和 Java 技术开发的样例应用程序中挑选了一些代码片段。示例应用程序为存储在属性文件中一组电子邮件文档编制索引,并展示了如何使用 Lucene 的查询 API 搜索索引。该示例还让您熟悉基本的索引操作。
|
Lucene 允许您为任何文本格式的数据编制索引。Lucene 可以用于几乎任何数据源以及从中提取的文本信息。您可以使用 Lucene 编制索引并搜索 HTML 文档、Microsoft® Word 文档、PDF 文件中存储的数据。编制数据索引的第一步是让数据变成一个简单的文本格式。您可以使用定制解析器和数据转换器实现这一点。
编制索引 是将文本数据转换为有利于快速搜索的格式。这类似于书本后面的索引:为您指出主题在书中出现的位置。
Lucene 将输入数据存储在名为逆序 索引的数据结构中, 该数据结构以索引文件集的形式存储在文件系统或内存中。大部分 Web 搜索引擎都使用逆序索引。它允许用户执行快速关键字查询,查找匹配给定查询的文档。在将文本数据添加到索引前,由分析程序(使用分析过程)进行处理。
分析 是将文本数据转换为搜索基本单位(称为项(term))的过程。在分析过程中,文本数据将经历多项操作:提取单词、移除通用单词、忽略标点符号、将单词变为词根形式、将单词变成小写等等。分析过程发生在编制索引和查询解析之前。分析将文本数据转换为标记,这些标记将作为项添加到 Lucene 索引中。
Lucene 有多种内置分析程序,比如 SimpleAnalyzer、StandardAnalyzer、StopAnalyzer、SnowballAnalyzer 等。它们在标记文本和应用过滤器的方式上有所区别。因为分析在编制索引之前移除单词,它减少了索引的大小,但是不利用精确的查询过程。您可以使用 Lucene 提供的基本构建块创建定制分析程序,以自己的方式控制分析过程。表 1 展示了一些内置分析程序及其处理数据的方式。
WhitespaceAnalyzer | 分解空白处的标记 |
SimpleAnalyzer | 分解非字母字符的文本,并将文本转为小写形式 |
StopAnalyzer | 移除虚字(stop word)—— 对检索无用的字,并将文本转为小写形式 |
StandardAnalyzer | 根据一种复杂语法(识别电子邮件地址、缩写、中文、日文、韩文字符、字母数字等等)标记文本 将文本转为小写形式 移除虚字 |
Directory
-
FSDirectory
— 在实际文件系统中存储索引的Directory
实现。该类对于大型索引非常有用。 -
RAMDirectory
— 在内存中存储所有索引的实现。该类适用于较小的索引,可以完整加载到内存中,在应用程序终止之后销毁。由于索引保存在内存中,所以速度相对较快。
Analyzer
IndexWriter
接收用于标记数据的分析程序。要为文本编制索引,您应该使用适用于该文本语言的分析程序。
默认分析程序适用于英语。在 Lucene 沙盒中还有其他分析程序,包括用于中文、日文和韩文的分析程序。
IndexDeletionPolicy
KeepOnlyLastCommitDeletionPolicy
,该策略仅保留最近的提交,并在完成一些提交之后立即移除所有之前的提交。
IndexWriter
对索引所做的更改最初缓存在内存中,并周期性转储到索引目录。IndexWriter
公开了几个控制如何在内存中缓存索引并写入磁盘的字段。对索引的更改对于 IndexReader
不可见,除非调用 IndexWriter
的提交或关闭方法。IndexWriter
创建一个目录锁定文件,以通过同步索引更新保护索引不受破坏。IndexWriter
允许用户指定可选索引删除策略。
//Create instance of Directory where index files will be stored Directory fsDirectory = FSDirectory.getDirectory(indexDirectory); /* Create instance of analyzer, which will be used to tokenize the input data */ Analyzer standardAnalyzer = new StandardAnalyzer(); //Create a new index boolean create = true; //Create the instance of deletion policy IndexDeletionPolicy deletionPolicy = new KeepOnlyLastCommitDeletionPolicy(); indexWriter =new IndexWriter(fsDirectory,standardAnalyzer,create, deletionPolicy,IndexWriter.MaxFieldLength.UNLIMITED); |
将文本数据添加到索引涉及到两个类。
Field
表示搜索中查询或检索的数据片。Field
类封装一个字段名称及其值。Lucene 提供了一些选项来指定字段是否需要编制索引或分析,以及值是否需要存储。这些选项可以在创建字段实例时传递。下表展示了 Field
元数据选项的详细信息。
Field.Store.Yes | 用于存储字段值。适用于显示搜索结果的字段 — 例如,文件路径和 URL。 |
Field.Store.No | 没有存储字段值 — 例如,电子邮件消息正文。 |
Field.Index.No | 适用于未搜索的字段 — 仅用于存储字段,比如文件路径。 |
Field.Index.ANALYZED | 用于字段索引和分析 — 例如,电子邮件消息正文和标题。 |
Field.Index.NOT_ANALYZED | 用于编制索引但不分析的字段。它在整体中保留字段的原值 — 例如,日期和个人名称。 |
Document
是一个字段集合。Lucene 也支持推进文档和字段,这在给某些索引数据赋予重要性时非常有用。给文本文件编制索引包括将文本数据封装在字段中、创建文档、填充字段,使用 IndexWriter
向索引添加文档。
列表 2 展示向索引添加数据的示例。
/*Step 1. Prepare the data for indexing. Extract the data. */ String sender = properties.getProperty("sender"); String date = properties.getProperty("date"); String subject = properties.getProperty("subject"); String message = properties.getProperty("message"); String emaildoc = file.getAbsolutePath(); /* Step 2. Wrap the data in the Fields and add them to a Document */ Field senderField = new Field("sender",sender,Field.Store.YES,Field.Index.NOT_ANALYZED); Field emaildatefield = new Field("date",date,Field.Store.NO,Field.Index.NOT_ANALYZED); Field subjectField = new Field("subject",subject,Field.Store.YES,Field.Index.ANALYZED); Field messagefield = new Field("message",message,Field.Store.NO,Field.Index.ANALYZED); Field emailDocField = new Field("emailDoc",emaildoc,Field.Store.YES, Field.Index.NO); Document doc = new Document(); // Add these fields to a Lucene Document doc.add(senderField); doc.add(emaildatefield); doc.add(subjectField); doc.add(messagefield); doc.add(emailDocField); //Step 3: Add this document to Lucene Index. indexWriter.addDocument(doc); |
|
搜索是在索引中查找单词并查找包含这些单词的文档的过程。使用 Lucene 的搜索 API 构建的搜索功能非常简单明了。本小节讨论 Lucene 搜索 API 的主要类。
Searcher
是一个抽象基类,包含各种超负荷搜索方法。IndexSearcher
是一个常用的子类,允许在给定的目录中存储搜索索引。Search
方法返回一个根据计算分数排序的文档集合。Lucene 为每个匹配给定查询的文档计算分数。IndexSearcher
是线程安全的;一个实例可以供多个线程并发使用。
Term 是搜索的基本单位。它由两部分组成:单词文本和出现该文本的字段的名称。Term 对象也涉及索引编制,但是可以在 Lucene 内部创建。
Query
是一个用于查询的抽象基类。搜索指定单词或词组涉及到在项中包装它们,将项添加到查询对象,将查询对象传递到 IndexSearcher
的搜索方法。
Lucene 包含各种类型的具体查询实现,比如 TermQuery、BooleanQuery、PhraseQuery、PrefixQuery、RangeQuery、 MultiTermQuery、FilteredQuery、SpanQuery 等。以下部分讨论 Lucene 查询 API 的主查询类。
TermQuery
TermQuery
。项值应该区分大小写,但也并非全是如此。注意,传递的搜索项应该与文档分析得到的项一致,因为分析程序在构建索引之前对原文本执行许多操作。
例如,考虑电子邮件标题 “Job openings for Java Professionals at Bangalore”。假设您使用 StandardAnalyzer
编制索引。现在如果我们使用 TermQuery
搜索 “Java”,它不会返回任何内容,因为本文本应该已经规范化,并通过 StandardAnalyzer
转成小写。如果搜索小写单词 “java”,它将返回所有标题字段中包含该单词的邮件。
//Search mails having the word "java" in the subject field Searcher indexSearcher = new IndexSearcher(indexDirectory); Term term = new Term("subject","java"); Query termQuery = new TermQuery(term); TopDocs topDocs = indexSearcher.search(termQuery,10); |
RangeQuery
RangeQuery
在某个范围内搜索。索引中的所有项都以字典顺序排列。Lucene 的 RangeQuery
允许用户在某个范围内搜索项。该范围可以使用起始项和最终项(包含两端或不包含两端均可)指定。
/* RangeQuery example:Search mails from 01/06/2009 to 6/06/2009 both inclusive */ Term begin = new Term("date","20090601"); Term end = new Term("date","20090606"); Query query = new RangeQuery(begin, end, true); |
PrefixQuery
PrefixQuery
通过前缀单词进行搜索,该方法用于构建一个查询,该查询查找包含以指定单词前缀开始的词汇的文档。
//Search mails having sender field prefixed by the word 'job' PrefixQuery prefixQuery = new PrefixQuery(new Term("sender","job")); PrefixQuery query = new PrefixQuery(new Term("sender","job")); |
BooleanQuery
BooleanQuery
组合任何数量的查询对象,构建强大的查询。它使用 query
和一个关联查询的子句,指示查询是应该发生、必须发生还是不得发生。在 BooleanQuery
中,子句的最大数量默认限制为 1,024。您可以调用 setMaxClauseCount
方法设置最大子句数。
// Search mails have both 'java' and 'bangalore' in the subject field Query query1 = new TermQuery(new Term("subject","java")); Query query2 = new TermQuery(new Term("subject","bangalore")); BooleanQuery query = new BooleanQuery(); query.add(query1,BooleanClause.Occur.MUST); query.add(query2,BooleanClause.Occur.MUST); |
PhraseQuery
PhraseQuery
进行短语搜索。PhraseQuery
匹配包含特定单词序列的文档。PhraseQuery
使用索引中存储的项的位置信息。考虑匹配的项之间的距离称为 slop。默认情况下,slop 的值为零,这可以通过调用 setSlop
方法进行设置。PhraseQuery
还支持多个项短语。
/* PhraseQuery example: Search mails that have phrase 'job opening j2ee' in the subject field.*/ PhraseQuery query = new PhraseQuery(); query.setSlop(1); query.add(new Term("subject","job")); query.add(new Term("subject","opening")); query.add(new Term("subject","j2ee")); |
WildcardQuery
WildcardQuery
实现通配符搜索查询,这允许您搜索 arch*(可以查找包含 architect、architecture 等)之类的单词。使用两个标准通配符:
-
*
表示零个以上 -
?
表示一个以上
//Search for 'arch*' to find e-mail messages that have word 'architect' in the subject field./ Query query = new WildcardQuery(new Term("subject","arch*")); |
FuzzyQuery
FuzzyQuery
搜索类似项,该类匹配类似于指定单词的单词。类似度测量基于 Levenshtein(编辑距离)算法进行。在列表 9 中,FuzzyQuery
用于查找与拼错的单词 “admnistrtor” 最接近的项,尽管这个错误单词没有索引。
/* Search for emails that have word similar to 'admnistrtor' in the subject field. Note we have misspelled admnistrtor here.*/ Query query = new FuzzyQuery(new Term("subject", "admnistrtor")); |
QueryParser
QueryParser
对于解析人工输入的查询字符非常有用。您可以使用它将用户输入的查询表达式解析为 Lucene 查询对象,这些对象可以传递到 IndexSearcher
的搜索方法。它可以解析丰富的查询表达式。 QueryParser
内部将人们输入的查询字符串转换为一个具体的查询子类。您需要使用反斜杠(\
)将 *
、?
等特殊字符进行转义。您可以使用运算符 AND
、OR
和 NOT
构建文本布尔值查询。
QueryParser queryParser = new QueryParser("subject",new StandardAnalyzer()); // Search for emails that contain the words 'job openings' and '.net' and 'pune' Query query = queryParser.parse("job openings AND .net AND pune"); |
|
IndexSearcher
返回一组对分级搜索结果(如匹配给定查询的文档)的引用。您可以使用 IndexSearcher
的搜索方法确定需要检索的最优先搜索结果数量。可以在此基础上构建定制分页。您可以添加定制 Web 应用程序或桌面应用程序来显示搜索结果。检索搜索结果涉及的主要类包括 ScoreDoc
和 TopDocs
。
ScoreDoc
TopDocs
ScoreDoc
的总数。以下代码片段展示了如何检索搜索结果中包含的文档。
/* First parameter is the query to be executed and second parameter indicates the no of search results to fetch */ TopDocs topDocs = indexSearcher.search(query,20); System.out.println("Total hits "+topDocs.totalHits); // Get an array of references to matched documents ScoreDoc[] scoreDosArray = topDocs.scoreDocs; for(ScoreDoc scoredoc: scoreDosArray){ //Retrieve the matched document and show relevant details Document doc = indexSearcher.doc(scoredoc.doc); System.out.println("\nSender: "+doc.getField("sender").stringValue()); System.out.println("Subject: "+doc.getField("subject").stringValue()); System.out.println("Email file location: " +doc.getField("emailDoc").stringValue()); } |
基本的索引操作包括移除和提升文档。
应用程序常常需要使用最新的数据更新索引并移除较旧的数据。例如,在 Web 搜索引擎中,索引需要定期更新,因为总是需要添加新网页,移除不存在的网页。Lucene 提供了 IndexReader
接口允许您对索引执行这些操作。
IndexReader
是一个提供各种方法访问索引的抽象类。Lucene 内部引用文档时使用文档编号,该编号可以在向索引添加或从中移除文档时更改。文档编号用于访问索引中的文档。IndexReader
不得用于更新目录中的索引,因为已经打开了 IndexWriter
。IndexReader
在打开时总是搜索索引的快照。对索引的任何更改都可以看到,直到再次打开 IndexReader
。使用 Lucene 重新打开它们的 IndexReader
可以看到最新的索引更新。
// Delete all the mails from the index received in May 2009. IndexReader indexReader = IndexReader.open(indexDirectory); indexReader.deleteDocuments(new Term("month","05")); //close associate index files and save deletions to disk indexReader.close(); |
有时您需要给某些索引数据更高的重要级别。您可以通过设置文档或字段的提升因子实现这一点。默认情况下,所有文档和字段的默认提升因子都是 1.0。
if(subject.toLowerCase().indexOf("pune") != -1){ // Display search results that contain pune in their subject first by setting boost factor subjectField.setBoost(2.2F); } //Display search results that contain 'job' in their sender email address if(sender.toLowerCase().indexOf("job")!=-1){ luceneDocument.setBoost(2.1F); } |
|
Lucene 提供一个称为排序 的高级功能。您可以根据指示文档在索引中相对位置的字段对搜索结果进行排序。用于排序的字段必须编制索引但不得标记。搜索字段中可以放入 4 种可能的项值:整数值、long 值、浮点值和字符串。
还可以通过索引顺序排序搜索结果。Lucene 通过降低相关度(比如默认的计算分数)对结果排序。排序的顺序是可以更改的。
/* Search mails having the word 'job' in subject and return results sorted by sender's email in descending order. */ SortField sortField = new SortField("sender", true); Sort sortBySender = new Sort(sortField); WildcardQuery query = new WildcardQuery(new Term("subject","job*")); TopFieldDocs topFieldDocs = indexSearcher.search(query,null,20,sortBySender); //Sorting by index order topFieldDocs = indexSearcher.search(query,null,20,Sort.INDEXORDER); |
Filtering 是限制搜索空间,只允许某个文档子集作为搜索范围的过程。您可以使用该功能实现对搜索结果进行再次搜索,或者在搜索结果上实现安全性。Lucene 带有各种内置的过滤器,比如 BooleanFilter、CachingWrapperFilter、ChainedFilter、DuplicateFilter、 PrefixFilter、QueryWrapperFilter、RangeFilter、RemoteCachingWrapperFilter、 SpanFilter 等。Filter
可以传递到 IndexSearcher
的搜索方法,以过滤匹配筛选标准的筛选文档。
/*Filter the results to show only mails that have sender field prefixed with 'jobs' */ Term prefix = new Term("sender","jobs"); Filter prefixFilter = new PrefixFilter(prefix); WildcardQuery query = new WildcardQuery(new Term("subject","job*")); indexSearcher.search(query,prefixFilter,20); |
|
Lucene 是来自 Apache 的一个非常流行的开源搜索库, 它为应用程序提供了强大的索引编制和搜索功能。它提供了一个简单易用的 API,只需要稍微了解索引编制和搜索的原理即可使用。在本文中,您学习了 Lucene 架构及其核心 API。
Lucene 为许多知名网站和组织提供了各种强大的搜索功能。它还兼容许多其他编程语言。Lucene 有一个活跃的大型技术用户社区。如果您需要一些易用、可扩展以及高性能的开源搜索库,Apache Lucene 是一个极佳的选择。
|
os-apache-lucenesearch-SampleApplication.zip | 755KB | HTTP |
关于下载方法的信息 |
学习
- 了解所有有关 Apache Lucene 的内容,包括最新新闻。
-
Lucene in Action(作者:Erik Hatcher 和 Otis Gospodnetic)是 Lucene 的权威指南。它描述了如何编制数据索引,包括您必须了解的几种类型,比如 MS Word、PDF、HTML 和 XML。它介绍了如何搜索、排序、过滤和高亮显示搜索结果。
- 要收听面向软件开发人员的有趣访谈和讨论,请查看 developerWorks 播客。
- 随时关注 developerWorks 技术活动和网络广播。
- 查阅最近将在全球举办的面向 IBM 开放源码开发人员的研讨会、交易展览、网络广播和其他 活动。
- 访问 developerWorks 开放源码专区,获得丰富的 how-to 信息、工具和项目更新,帮助您用开放源码技术进行开发,并与 IBM 产品结合使用。
- 查看免费的 developerWorks 演示中心,观看并了解 IBM 及开源技术和产品功能。
获得产品和技术
- 使用 IBM 产品评估试用版软件 改进您的下一个开发项目,这些软件可以通过下载获得。
- 下载 IBM 产品评估试用版软件 或 IBM SOA Sandbox for Reuse,并开始使用来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。
发表评论
-
birt db2 查不到结果集 报错
2011-09-07 15:22 4077在Eclipse 里预览时报这个错误。就是因为没有值,rs.n ... -
birt db2 查不到结果集 报错
2011-09-07 15:20 2835根据条件没有查询到结果,就是结果集是0的情况。错误信息:The ... -
Lucene API的主要类介绍
2010-11-20 09:48 1543核心提示:Lucene搜索 ... -
Nutch 0.8实现Google式的搜索引擎
2010-11-20 09:47 1007Nutch是一个基于Lucene,类似Google的完 ... -
dic+CSS的命名参考
2010-11-13 04:24 995dic+CSS的命名参考 1.CSS ID ... -
dbcp基本配置和重连配置
2010-09-28 15:41 9371. 引入dbcp (选择1.4) ... -
myeclipse下使用ext的插件
2010-09-09 19:20 1075myeclipse下使用ext的插件有三种方式: 1:配置在 ... -
电子商务网站开发中的实现设计
2010-09-03 22:09 929关键字: 电子商务必须考虑的问题 电子商务网站开发中的实现设 ... -
网银在线支付接口和应用
2010-09-03 21:40 3979关键字: 网银在线支付接口和应用 最近关注项目中在线支付 ...
相关推荐
Apache Lucene是一个高性能、全文本搜索库,由Java编写,被广泛用于开发搜索引擎和需要文本检索功能的应用程序。Apache Lucene 4.7是该库的一个版本,它提供了丰富的功能和改进,使得开发者能够轻松地在他们的应用中...
- **Lucene定义**:Lucene是一款高性能、全功能的文本搜索引擎库,由Java编写而成,是Apache基金会下的一个开源项目。 - **发展历程**:自1999年由Doug Cutting创建以来,Lucene已经发展成为全球最广泛使用的全文...
Apache Lucene是一个开源的全文搜索引擎库,被广泛用于构建高效、可扩展的搜索功能。它在Java编程语言中实现,但提供了多种语言的接口,包括Python、PHP、C#等,使得开发人员能够轻松地在各种项目中集成高级搜索功能...
Apache Lucene 是一个开源的全文检索库,它提供了一种高效、可扩展的方式来构建全文搜索引擎。在Java开发中,Lucene被广泛用于实现文件的全文检索功能,包括对doc、docx、pdf、txt等常见格式文档的文本内容检索。在...
Apache Lucene是一个高性能、全文本搜索库,被广泛应用于构建高效的搜索功能。在这个场景中,我们将探讨如何利用Lucene来检索文本并建立索引,同时结合Struts框架构建一个Web程序。 首先,**Lucene** 是一个开源的...
Apache Solr 和 Lucene 是两个在全文搜索领域广泛使用的开源框架。它们的组合为构建高效、可扩展的搜索引擎提供了强大的工具。以下是对这两个组件及其在搜索模块设计实现中的关键知识点的详细说明: 1. **Apache ...
Lucene是Apache软件基金会的一个开放源代码项目,它提供了一个高性能、全文本、可扩展的搜索库,被广泛应用于各种搜索引擎的开发中。 本书首先会介绍搜索引擎的基本概念,包括信息检索理论、倒排索引等基础概念,...
使用"apache-lucene-analyzers.jar"时,开发者需要根据实际应用的需要选择合适的分析器,以确保文本能够被正确地索引和搜索。在Java程序中,可以通过导入相关的类并实例化分析器来实现这一功能。 总的来说,"apache...
apache lucene中文版是一款非常好用的检索工具包,使用方便,功能强大,有需要的朋友不要错过了,而且是完全开放的,你可以自由进行使用,可以支持多种检索功能。兼容多个操作系统,下载后可以直接使用,没有任何...
Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的开源搜索引擎框架。它为开发者提供了在应用程序中实现全文索引和搜索功能的基础工具。Lucene的核心功能包括文本分析、...
Lucene是一个强大的全文搜索引擎库,由Apache软件基金会开发并维护,广泛应用于各种文本检索和信息检索系统。在本篇文章中,我们将深入探讨如何使用Lucene来搜索中文PDF文档,以及在这个过程中可能遇到的关键技术和...
Apache Lucene是一个广泛使用的开源Java库,专门用于构建高级文本检索功能,而Rucene则将这些功能带入了Rust的世界,一个以安全和性能著称的系统级编程语言。 首先,我们来深入了解一下Rucene的核心特性。Rucene的...
Apache Lucene是一个高性能、全文本搜索库,由Java编写,被广泛应用于各种搜索引擎的开发中。这个入门实例将引导我们了解如何使用Lucene 3.0版本进行基本的索引和搜索操作。以下是对Lucene 3.0关键知识点的详细讲解...
Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,它提供了索引和搜索大量文本数据的能力。在这个项目中,Lucene被结合了JSP(JavaServer Pages)和JAVA技术,创建了一个功能完善的搜索引擎。 **1. ...
elasticsearchElasticsearch是一个基于Apache Lucene构建的开源分布式搜索和分析引擎,专为云计算环境设计,能够迅速且有效地处理大规模数据集。以下是Elasticsearch的详细介绍: 一、基本特性 分布式架构:Elastic...
Apache Lucene 是一个开源全文搜索引擎库,为开发者提供了在Java应用程序中实现高效、可扩展的搜索功能的工具。在本篇文章中,我们将深入探讨Lucene 3.6版本中的搜索功能,通过实例解析其核心概念和操作流程。 一、...
文章中的新闻搜索引擎通过使用Lucene的API,相比普通搜索引擎,提高了搜索的精确性。 8. 新闻搜索引擎的改进 新闻搜索引擎的构建过程中,可以针对新闻内容的特点进行优化,比如增加时间因子权重、优化关键词提取...
Apache Lucene是用Java编写的高性能,功能齐全的文本搜索引擎库。 在线文件 此自述文件仅包含基本的安装说明。 有关更全面的文档,请访问: Lucene: : 用Gradle构建 基本步骤: 安装OpenJDK 11(或更高版本) ...
这需要将附件内容读取并提取成可搜索的文本,通常通过第三方库(如Apache Tika)进行解析。 **5. 全文搜索** `04_lucene_advance_searcher`可能详细讲解了如何实现全文搜索。全文搜索是指用户输入一个或多个关键词...