`
zm2011
  • 浏览: 39137 次
社区版块
存档分类
最新评论

Lucene的检索

阅读更多
Lucene检索
IndexReader:一个抽象类,提供访问索引的接口。检索一个索引是完全通过这个抽象借口来完成的。所以其所有的实现子类都是可搜索的。
其具体子类一般通过调用它的静态方法open来实现。
从性能考虑,在这个API,document会经常通过document号来访问,这个号是一个非负整数,但这些数是暂时的,它们会随着document的添加或删除而改变。所以客户端不应该企图在两个session中用相同的号取得document。
即使一个IndexWriter已经打开,也能再同样的目录上打开IndexReader,但是不能删除document。
IndexReader是线程安全的。

IndexSearcher:应用程序通常只需要调用内部方法search(Query,int)或者search(Query,Filter,int)。从性能方面考虑,如果索引是不经常改变的,你可以共享一个IndexSearcher而不是每次检索都创建一个。如果索引是经常改变的,并且还希望检索改变后的索引,应该调用IndexReader.reopen()获得一个新的reader,然后以此创建一个新的IndexSearcher。当然,为了降低延迟,可以使用实时reader(IndexReader.open(IndexWriter, boolean))。
IndexSearcher是线程安全的。

Term:代表文本中的一个词。它是搜索单元,它由两个元素组成,所搜索的词和这个词可能出现的域(field)

检索可以分为两类:简单搜索和分析搜索

简单搜索就是你所输入的关键词不需要使用分词器进行处理。程序会把所输入的关键字作为一个Term进行搜索。简单搜索的类主要是 Query的实现子类:TermQuery、BooleanQuery、WildcardQuery、PrefixQuery、FuzzyQuery、TermRangeQuery、NumericRangeQuery。
分析搜索就是把所输入的关键词进行分词处理,然后在某个域中查找含有已进行分词处理的关键字的document。PhraseQuery、MultiPhraseQuery。


TermQuery:
检索一个document的某个filed含有关键字
IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File("D:\\lucene")));
Query query = new TermQuery(new Term("title", keyword));
topDocs = searcher.search(query, searcher.maxDoc());


PrefixQuery:
带前缀搜索,比如输入一个ti,就可以搜索出title的数据
IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File("D:\\lucene")));
Query query = new PrefixQuery(new Term("title", keyword));
topDocs = searcher.search(query, searcher.maxDoc());
WildcardQuery:
通配符搜索,*代表0个或多个字符,?代表单个字符
IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File("D:\\lucene")));
Query query = new WildcardQuery(new Term("title", keyword));
topDocs = searcher.search(query, searcher.maxDoc());
FuzzyQuery:
模糊查询,这种查询有个相识度匹配,默认情况下要把keyword检索出来至少需要输入keywo,而输入keyw则不可以
IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File("D:\\lucene")));
Query query = new FuzzyQuery(new Term("title", keyword));
topDocs = searcher.search(query, searcher.maxDoc());
TermRangeQuery:
查询位于两个term之间的值,比如有titla、titlb、titlc、title。如果起始为titla,结束为title则会把上面的记录都搜索出来
IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File("D:\\lucene")));
//两个true表示包含起始和结束位置的term
Query query = new TermRangeQuery("title",keyword1, keyword2, true, true);
topDocs = searcher.search(query, searcher.maxDoc());

PhraseQuery:匹配输入特定term序列,有PhraseQuery构建。

NumericRangeQuery:在一个指定的范围内进行数字匹配。这个类只能进行数字检索。如果要进行文字检索则使用TermRangeQuery

BooleanQuery:用于在多个Query语句之间进行有效的配合搜索。
IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File("D:\\lucene")));

BooleanQuery query = new BooleanQuery();
Query query1 = new TermQuery(new Term("title", keyword));
Query query2 = new TermQuery(new Term("content", keyword));

query.add(query1, BooleanClause.Occur.MUST);
query.add(query2, BooleanClause.Occur.SHOULD);

topDocs = searcher.search(query, searcher.maxDoc());
BooleanClause.Occur.MUST表示所搜索的关键字必须在此子句中出现。
BooleanClause.Occur.SHOULD表示所搜索的关键字可以在此子句中出现。
BooleanClause.Occur.MUST_NOT表示所搜索的关键字不能在此子句中出现。


经过分析器的搜索
在单一域中搜索
IndexReader indexReader = IndexReader.open(FSDirectory.open(new File("D:\\lucene")));
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
QueryParser parser = new QueryParser(Version.LUCENE_34, "title", new StandardAnalyzer(Version.LUCENE_34));
Query query = parser.parse(title);
System.out.println("query:" + query.toString());
topDocs = indexSearcher.search(query, indexSearcher.maxDoc());
在多个域中搜索
IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File("D:\\lucene")));
//在多个Field中搜索
QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_34, new String[] {"content","title"}, new StandardAnalyzer(Version.LUCENE_34));

Query query = parser.parse(title);
topDocs = searcher.search(query, searcher.maxDoc());
分享到:
评论

相关推荐

    一种基于Lucene检索引擎的全文数据库的研究与实现

    ### 一种基于Lucene检索引擎的全文数据库的研究与实现 #### 1. 引言 随着信息技术的飞速发展和互联网的普及,大量的文本信息被数字化存储,这为信息检索带来了前所未有的挑战和机遇。传统的数据库管理系统(DBMS)...

    lucene检索小例子

    **Lucene检索小例子** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。这个"lucene检索小例子"程序展示了如何利用Lucene的强大功能来构建索引和执行搜索操作。Lucene的核心特性包括文本分析、...

    Lucene检索数据库支持中文检索

    ### Lucene检索数据库支持中文检索 #### 一、Lucene简介与原理 ##### 1. Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,由Java编写而成。其核心功能是为开发者提供构建搜索应用程序的基础框架。Lucene...

    lucene检索新闻数据演示

    【标题】"lucene检索新闻数据演示"涉及的是利用Apache Lucene这个开源全文搜索引擎库,对新闻数据进行索引和搜索的实践操作。Lucene是一个高性能、可伸缩的信息检索库,它提供了一个简单但功能强大的API,可以用于在...

    lucene检索文档、检索大数据量数据

    **Lucene 检索文档、检索大数据量数据** Lucene 是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它为开发者提供了一套高效、可扩展的工具,用于在大量数据中进行文本检索。Lucene的核心原理是基于倒排...

    Lucene检索

    **Lucene检索** Lucene是Apache软件基金会的开源全文检索库,它为Java开发者提供了强大的文本搜索功能。这个“Lucene检索”示例将引导我们理解如何利用Lucene进行基本的全文索引和搜索操作。 首先,我们需要了解...

    Lucene检索数据库支持中文检索.doc

    《Lucene检索数据库支持中文检索》 Lucene是一个开源的全文检索库,它提供了强大的文本搜索功能,包括索引创建和搜索索引两个主要部分。在版本3.0.2中,Lucene已经能够很好地支持中文检索,这对于中文信息的处理...

    lucene 检索

    **Lucene 检索** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。这个强大的工具集为开发者提供了在各种应用中实现全文检索功能的能力。Lucene 提供了核心的索引和搜索功能,支持多种数据...

    Lucene检索算法的改进.pdf

    ### Lucene检索算法的改进 #### 检索系统采用的技术 在《Lucene检索算法的改进》一文中,作者们介绍了他们所采用的一系列技术来改进基于Lucene的检索系统。具体而言,这些技术包括: 1. **开放源代码的文本检索...

    lucene检索包

    ### Lucene检索包知识点解析 #### 一、Lucene简介 **Lucene** 是一个开源的全文检索引擎工具包,隶属于Apache软件基金会Jakarta项目组。它为开发者提供了一套完整的查询引擎和索引引擎解决方案,并通过简单的函数...

    Lucene检索文本,建立索引

    在这个场景中,我们将探讨如何利用Lucene来检索文本并建立索引,同时结合Struts框架构建一个Web程序。 首先,**Lucene** 是一个开源的Java库,它提供了完整的搜索功能,包括分词、索引创建、查询解析和结果排序。它...

    Lucene检索代码

    总结来说,Lucene检索代码涉及的主要知识点包括:Lucene的架构,索引的创建与更新,Analyzer的作用,Document和Field的概念,查询的构建与执行,以及结果的处理。了解并掌握这些内容,开发者能够利用Lucene在各种...

    使用Lucene对doc、docx、pdf、txt文档进行全文检索功能的实现 - 干勾鱼的CSDN博客 - CSDN博客1

    Apache Lucene 是一个开源的全文检索库,它提供了一种高效、可扩展的方式来构建全文搜索引擎。在Java开发中,Lucene被广泛用于实现文件的全文检索功能,包括对doc、docx、pdf、txt等常见格式文档的文本内容检索。在...

    Lucene全文检索案例

    **Lucene 全文检索案例** Lucene 是一个高性能、可扩展的信息检索库,由Apache软件基金会开发。它提供了一个简单但功能强大的API,用于在各种数据源中实现全文搜索。这个案例将深入探讨如何使用Lucene进行全文检索...

    lucene检索实例代码,自己总结的非常详细

    文档中包含Lucene4.0.0版本jar包,中文分词器jar包,Lucene实例代码 1:建立索引 2:各种搜索方式方法 3:删除索引 4:检查索引文件 5:恢复删除的索引 6:强制删除 7:更新索引 8:合并索引 9:高亮回显 供大家参考...

Global site tag (gtag.js) - Google Analytics