`
hai0378
  • 浏览: 529594 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

lucene3.0_IndexSearcher的基础使用及注意事项

 
阅读更多

较之lucene2.4版本,lucene3.0在indexSearcher这块变动比较大,从api可以直观的了解到。

基类Searcher与搜索有关的方法:

 void search(Query query, Collector results) 
          Lower-level search API.
 void search(Query query, Filter filter, Collector results) 
          Lower-level search API.
 TopDocs search(Query query, Filter filter, int n) 
          Finds the top n hits for query, applying filter if non-null.
 TopFieldDocs search(Query query, Filter filter, int n, Sort sort) 
          Search implementation with arbitrary sorting.
 TopDocs search(Query query, int n) 
          Finds the top n hits for query.
abstract  void search(Weight weight, Filter filter, Collector results) 
          Lower-level search API.
abstract  TopDocs search(Weight weight, Filter filter, int n) 
          Expert: Low-level search implementation.
abstract  TopFieldDocs search(Weight weight, Filter filter, int n, Sort sort) 
          Expert: Low-level search implementation with arbitrary sorting.

 

该文将讲解上表格中黄色高亮的3个方法:

1.search(Query query , int n)

2.search(Query query , Collector results)

3.search(Query query , Filter filter , int n , Sort sort)

--------------------------------------------------------------------------------

1.search(Query query , int n)示例

取出前n条目标结果。

 

复制代码
publicvoid searcher(String queryString){
try {
FSDirectory dir 
= SimpleFSDirectory.open(new File("d:/20101015index"));
//注意点1:创建IndexSearcher实例是传入IndexReader实例还是Directory实例呢?
IndexReader reader = IndexReader.open(dir);
IndexSearcher searcher 
=new IndexSearcher(reader);
//使用:search(Query query, int n) 
QueryParser parser =new QueryParser(Version.LUCENE_30, "f1"new StandardAnalyzer(Version.LUCENE_30));
Query query 
= parser.parse(queryString);
TopDocs tds 
= searcher.search(query, 5);
ScoreDoc[] sd 
= tds.scoreDocs;
for (int i =0; i < sd.length; i++) {
System.out.println(reader.document(sd[i].doc));
//注意点2:怎么查看每个文档的打分的详情。
//explain(Weight weight, int doc) 
//Expert: low-level implementation method Returns an Explanation that describes how doc scored against weight.
System.out.println("Explanation:"+ (searcher.explain(query, sd[i].doc)));
}
catch (IOException e) {
e.printStackTrace();
catch (ParseException e) {
e.printStackTrace();

}
复制代码

 

注意点:

 

1.创建IndexSearcher实例是传入IndexReader实例还是Directory实例呢?

详情请参见:

lucene问题_IndexSearcher初始化,IndexSearcher(Directory dir)和IndexSearcher(IndexReader reader)有什么区别?到底使用那个更合理?

2.查看每个目标文档的打分的详细情况。

在网上看到有朋友问到这个,故在此提出来。

3.真实的项目请不要像上面代码那样——将indexReader和IndexSearcher的实例在搜索方法中创建,为了节约系统开销、提高效率,

应该将这些实例作为单例模式。

这里做了反面教材了 = =!

 

2.search(Query query , Collector results)

在介绍这个方法之前,先来了解下Collector:

 Collectors are primarily meant to be used to gather raw results from a search, and implement sorting or custom result filtering, collation, etc.

先重点了解:

TopScoreDocCollector is a concrete subclass TopDocsCollector and sorts according to score + docID. 

This is used internally by the IndexSearcher search methods that do not take an explicitSort. It is likely the most frequently used collector.

他是最常用的collector子类,是默认相关度排序的。下面给出一个实例,使用TopScoreDocCollector进行结果的收集,并提供简单的分页功能。

 

复制代码
publicvoid searcher(String queryString ,int start, int howMany){
try {
FSDirectory dir 
= SimpleFSDirectory.open(new File("d:/20101015index"));
//注意点1:创建IndexSearcher实例是传入IndexReader实例还是Directory实例呢?
IndexReader reader = IndexReader.open(dir);
IndexSearcher searcher 
=new IndexSearcher(reader);
//使用:search(Query query , Collector results)
QueryParser parser =new QueryParser(Version.LUCENE_30, "f1"new StandardAnalyzer(Version.LUCENE_30));
Query query 
= parser.parse(queryString);
int hm = start+howMany ;
TopScoreDocCollector res 
= TopScoreDocCollector.create(hm, false);
System.out.println(
"total hits :"+res.getTotalHits());
searcher.search(query, res);
//注意点2:这里可以控制分页。
TopDocs tds = res.topDocs(start, howMany);
ScoreDoc[] sd 
= tds.scoreDocs;
for (int i =0; i < sd.length; i++) {
System.out.println(reader.document(sd[i].doc));
// System.out.println("Explanation:" + (searcher.explain(query, sd[i].doc)));
}
catch (IOException e) {
e.printStackTrace();
catch (ParseException e) {
e.printStackTrace();

}
复制代码

 

 

3.search(Query query , Filter filter , int n , Sort sort)

这种方式的排序很简单,直接给出实例代码,注意的问题其他文章有详细说明。

 

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

 

 

注意点:

lucene问题_检索结果怎么排序?对于不同类型(例如int型)的字段排序有什么区别吗?

lucene问题_怎么对多个字段进行排序?

 

---------------------------------------------------------

对于lucene3.0检索的基础使用就先介绍这些了,关于搜索应该重点关注:

1.collector的选用

2.分页,及分页效率问题

3.排序,及排序的效率问题

4.多索引搜索

5.实际项目中实时搜索和效率的保障

 

 

 

 

 
 
分享到:
评论

相关推荐

    lucene3.0 lucene3.0

    lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0

    Lucene3.0_pdf

    《Lucene3.0原理与代码分析》是针对搜索引擎库Lucene 3.0版本的一份详尽解析,旨在帮助读者深入理解其内部工作机制和实现细节。Lucene是一款高性能、全文检索库,广泛应用于各类信息检索系统。下面将围绕Lucene的...

    Lucene3.0_使__用_教_程.doc

    《Lucene3.0使用教程》旨在介绍如何利用Apache Lucene这个开源全文检索框架来实现高效、精准的文本搜索功能。Lucene是一个强大的搜索引擎库,广泛应用于站内搜索,如论坛、博客、网上商店的商品搜索等。在学习Lucene...

    传智播客Lucene3.0_精品课程

    ### 传智播客Lucene 3.0精品课程知识点概览 #### 一、全文检索的概念及其应用场景 - **全文检索定义**:全文检索是一种信息检索技术,它以文本内容为检索对象,通过分析文本内容来实现精确、快速地找到包含指定...

    Lucene_3.0_原理与代码分析

    ### Lucene 3.0 原理与代码分析 #### 一、全文检索基本原理 全文检索(Full-text Search)是一种从非结构化文本中提取相关信息的技术,它允许用户通过输入关键词来查找文档中是否包含这些关键词。全文检索系统通常...

    lucene 3.0 API 中文帮助文档 chm

    lucene 3.0 API中文帮助,学习的人懂得的

    Lucene3.0之查询类型详解

    【Lucene3.0查询类型详解】 在Lucene3.0中,查询处理是一个关键环节,涉及多种查询方式和理论模型。以下是对这些概念的详细解释: 1. **查询方式**: - **顺序查询**:是最简单的查询方式,直接遍历索引,效率较...

    lucene3.0使用介绍及实例

    在本文中,我们将深入探讨Lucene 3.0版本,了解其核心概念、功能特性,并通过实例来展示如何使用这个强大的工具。 ### 1. Lucene 3.0核心概念 #### 1.1 文档与字段 在Lucene中,数据是以文档(Document)的形式...

    Lucene 3.0 原理与代码分析完整版

    《Lucene 3.0 原理与代码分析完整版》是一本深入解析Lucene 3.0搜索引擎库的专业书籍。Lucene是Apache软件基金会的开源项目,它为Java开发者提供了一个高性能、全文检索的工具包,广泛应用于各种信息检索系统。这...

    lucene3.0 分词器

    lucene3.0 中文分词器, 庖丁解牛

    lucene3.0核心jar包

    这里的"lucene3.0核心jar包"是 Lucene 的一个重要版本,发布于2009年,为当时的开发人员提供了构建全文搜索引擎的基础框架。 在 Lucene 3.0 中,以下几个关键知识点值得关注: 1. **索引结构**:Lucene 使用倒排...

    lucene3.0 实例

    在 JDK 1.5 中运行这个实例需要注意,因为较新的 Lucene 版本可能不再支持这个版本的 Java。此外,还需要确保你已经安装了 Lucene 3.0 库,并将其添加到项目的类路径中。 总结来说,Lucene 3.0 实例展示了如何在 ...

    lucene3.0全文检索入门实例

    本文将重点介绍如何使用 Lucene 3.0 实现全文检索的基本步骤,以及与前一版本 Lucene 2.0 的主要区别。 **1. 安装与环境配置** 首先,你需要下载 Lucene 3.0 的发行版,并将其添加到你的项目类路径中。确保你的开发...

    Lucene3.0全文信息检索

    **Lucene 3.0 全文信息检索** Lucene 是一个由Apache软件基金会4...随着技术的不断进步,Lucene后续版本继续优化性能和扩展功能,但3.0版本仍然是许多项目的基础,其设计理念和实现方式对于理解全文检索引擎至关重要。

    lucene3.0庖丁+索引搜索程序

    在“NewestPaoding”文件中,包含了使用Lucene3.0进行索引搜索的代码示例。这通常包括以下步骤: 1. 创建索引:首先,我们需要读取源数据(如文本文件或数据库记录),然后使用Analyzer进行分词处理,生成Term,并...

    lucene3.0基础实例

    本篇文章将深入探讨Lucene 3.0的基础实例,帮助读者理解和掌握如何使用这个强大的工具。 一、Lucene简介 Lucene是一个高性能、全文本搜索库,它提供了基本的索引和搜索功能,同时也支持高级查询语法。在Lucene 3.0...

Global site tag (gtag.js) - Google Analytics