0 0

学习lucene建立检索和搜索过程中遇到的错误30

使用lucene4.6.0版本建立的索引和搜索,在创建索引后会产生如下索引文件
[img]

[/img]

但是在搜索时
ScoreDoc[] sds = tds.scoreDocs;
中的sds总为空。求大神帮忙解决!!!!!!!

代码如下:

package nhky.bs.lucene.test.hellolucene;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.FieldType;
import org.apache.lucene.document.StoredField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;

public class HelloLucene {

	/**
	 * 建立索引
	 */
	public void index() {

		IndexWriter writer = null;
		try {
			Directory directory = FSDirectory.open(new File("F:/lucene/index01"));
			IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_46,new StandardAnalyzer(Version.LUCENE_46));
			writer = new IndexWriter(directory, iwc);

			// 3,创建Document
			Document document = null;
			// 4,为Docuemnt添加Field
			File files = new File("F:/lucene/files");
			// 5,通过IndexWriter添加文档到索引中
			for (File file : files.listFiles()) {
				document = new Document();
				 document.add(new Field("content", new FileReader(file),new FieldType()));
				 document.add(new StoredField("fileName", file.getName()));
				 document.add(new StoredField("path", file.getAbsolutePath()));	 
				 writer.addDocument(document);
			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (writer != null) {
				try {
					writer.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * 建立搜索
	 */
	public void searcher() {
		DirectoryReader reader = null;
		try {
			// 创建Directory (去哪里搜索,此目录跟建立索引的目录一致)
			Directory directory = FSDirectory.open(new File("F:/lucene/index01"));
			reader = DirectoryReader.open(directory);
			IndexSearcher searcher = new IndexSearcher(reader);		
			QueryParser parser = new QueryParser(Version.LUCENE_46, "fileName",new StandardAnalyzer(Version.LUCENE_46));
			Query query = parser.parse("document");

			//根据searcher搜索并且返回TopDocs
			TopDocs tds = searcher.search(query, 10);
			
			// 根据TopDocs获取ScoreDoc对象
			// 得到查询结果数组
			ScoreDoc[] sds = tds.scoreDocs;	
			for (ScoreDoc sd : sds) {
				// 根据searcher和scoreDoc对象获取具体的Document对象
				Document d = searcher.doc(sd.doc);
				// 根据Document获取需要的值
				System.out.println("搜索结果:");
				System.out.println(d.get("fileName") + "[" + d.get("path")
						+ "]");
			}
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		} finally {
			// 关闭reader
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}
}



2014年4月24日 17:52
  • 大小: 10.2 KB

2个答案 按时间排序 按投票排序

0 0

采纳的答案

Query query = parser.parse("document.txt");  用全名称来搜,或者Query query = parser.parse("document*");  因为StoreField是不进行分词的。

2014年4月25日 15:05
0 0

请问您建立索引的文档中有文件名为document的吗?
注意document为一个整体。
第77行 
Query query = parser.parse("document");  
中document为您搜索的关键字。

2014年4月24日 19:17

相关推荐

    Lucene 全文检索实践.pdf

    ### Lucene全文检索实践知识点详解 ...以上实践任务和部署策略的实施,不仅能深化对Lucene的理解和掌握,还能提升在实际项目中运用全文检索技术的能力,特别是在Web开发领域,为用户提供更加精准和高效的搜索体验。

    Lucene全文搜索 分组,精确查找,模糊查找

    在IT行业中,全文搜索引擎的使用越来越广泛,而Apache Lucene作为一款强大的开源全文检索库,深受开发者们的喜爱。它提供了高效的索引和查询功能,使得在海量数据中进行精准、快速的文本搜索成为可能。本文将围绕...

    lucene实现过程中存在的问题

    Lucene是一款高性能、全功能的文本搜索引擎库,它被广泛应用于各种需要进行高效全文检索的应用场景中,例如网站搜索、文档管理等。由于其高度可定制化的特点,开发者可以根据具体需求对Lucene进行配置和优化。 ####...

    Lucene初试——关于大文本建立索引和中文乱码以及QueryParser检索的一些体会 - sheen口开河 - CSDN博客

    总的来说,Lucene在处理大文本和中文检索时,需要注意内存管理、编码处理以及查询解析的正确性。通过合理的配置和优化,可以有效地利用Lucene构建高性能的全文搜索引擎。在实际应用中,还需要关注性能优化,如索引的...

    用Lucene实现Java里面的搜索引擎

    在IT领域,搜索引擎是至关重要的工具,特别是在大数据和信息检索中。Apache Lucene是一个高性能、全文本搜索库,它提供了一个强大的框架来构建自定义的搜索引擎应用。本篇将深入探讨如何利用Java和Lucene来实现一个...

    基于lucene的开发JavaEE项目

    Lucene是一个高性能、全文检索的Java库,它提供了索引和搜索文本的强大功能。在JavaEE项目中,Lucene可以帮助我们构建高效的搜索系统,为用户提供快速、精准的查询体验。以下是基于Lucene开发JavaEE项目的关键知识点...

    Lucene.dll各版本集合

    Lucene.dll 是 Apache Lucene 库的 .NET 版本,它是一个高性能、全文本搜索库,被广泛应用于各种应用程序中进行文本检索和索引。Apache Lucene 提供了强大的搜索功能,包括分词、评分、排序等,而 Lucene.dll 是这个...

    搜索篇:Struts、Lucene的Web实例

    6. **错误处理和调试**:讲解在实际开发中可能遇到的问题,以及如何调试和解决这些问题。 7. **实际案例分析**:通过具体的Web应用示例,展示Struts和Lucene结合的完整流程。 通过学习这个教程,开发者不仅可以掌握...

    lucene文档笔记详解

    它提供了强大的文本分析、索引构建和搜索功能,但值得注意的是,Lucene本身并不包含完整的全文检索引擎,而是作为核心组件供开发者集成到自己的应用系统中,以实现高效、精准的全文搜索。 ### Lucene的核心概念 1....

    lucene-3.6.2

    4. **更好的错误处理**:3.6.2版改进了错误报告和处理机制,使得开发者在遇到问题时能更快地定位和解决。 5. **API兼容性**:保持了向前兼容性,使得升级到新版本的程序无需大幅度修改代码。 三、使用Lucene 3.6.2...

    JAVA(结合lucene)版的公交搜索系统_javaso.rar

    在公交搜索系统中,Lucene被用来建立索引,对公交线路数据进行预处理,使得搜索过程可以快速高效地完成。通过将公交线路数据如站点、线路编号、始发站、终点站等信息进行分词和索引,用户在输入查询时,系统能迅速...

    关于webLucene 安装方法

    WebLucene是一个基于Apache Lucene的开源搜索引擎工具,它专为网站提供站内搜索功能。Lucene是一个强大的全文检索库,而WebLucene则...在实践中,不断学习和熟悉这些工具,将有助于更好地管理和维护你的站内搜索引擎。

    ElasticSearch中文学习教程

    ElasticSearch在运行过程中可能会遇到各种问题,如: - **7.2.1. 由gc引起节点脱离集群** 当节点因垃圾回收而暂时失去响应时,可能导致节点被认为是失败的。解决方法包括调整JVM垃圾回收策略。 - **7.2.2. outof...

    lucene4_cookbook_examples:Lucene 4 Cookbook的示例代码

    10. **异常处理与错误排查**:在开发过程中,可能会遇到各种异常和错误。代码示例会提供处理常见问题的方法,帮助开发者更好地理解和调试Lucene应用。 通过深入学习和实践这些示例代码,你将能够掌握Lucene 4的核心...

    自己用c#做的文件搜索!

    为了提高效率,可以利用索引或者全文搜索引擎技术,如Lucene.NET,预先建立文件内容的索引,使得搜索过程更快。 在实际应用中,文件搜索器可能还需要考虑以下几点: 1. **性能优化**:大量文件的搜索可能会消耗很...

    IKAnalyzer3.2.8

    IKAnalyzer是中国开源社区推出的一款高性能、易用的中文分词工具,主要针对Lucene等全文检索引擎进行设计和优化。它的全称为“Intelligent Chinese Analyzer for Lucene”,旨在提升中文在全文检索领域的处理效率和...

    上课记录1

    本文主要探讨了中文分词、搜索引擎的基本概念、Lucene和Elasticsearch(ELK)的相关知识,以及IK分词器在实际应用中的重要性。 首先,中文分词是搜索引擎处理中文文本的基础。在中文情况下,由于词汇之间没有明显的...

    文件(夹)搜索引擎(C#版)

    这可能涉及自然语言处理和文本挖掘技术,C#中有`System.Text.RegularExpressions`用于正则表达式匹配,还可以借助第三方库如Lucene.NET进行更复杂的全文搜索。 5. **搜索算法**:根据用户输入的查询关键字,搜索...

    python分布式爬虫搜索引擎源码

    8. **异常处理和错误恢复**:在爬取过程中,可能会遇到各种异常,如网络错误、编码问题等,因此需要合理的异常处理机制来确保爬虫的稳定运行。 9. **分布式爬虫架构**:为了应对大规模的抓取任务,项目可能采用了...

    Solr数据库连接[SQL,Oracle]

    它基于Lucene库,提供了高效、可扩展的搜索和分析能力。在Solr中,有时我们需要与传统的关系型数据库如SQL Server或Oracle进行交互,以获取数据或者同步数据库中的信息到Solr索引中。本文将详细介绍如何在Solr中建立...

Global site tag (gtag.js) - Google Analytics