使用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();
}
}
}
}
}
相关推荐
### Lucene全文检索实践知识点详解 ...以上实践任务和部署策略的实施,不仅能深化对Lucene的理解和掌握,还能提升在实际项目中运用全文检索技术的能力,特别是在Web开发领域,为用户提供更加精准和高效的搜索体验。
在IT行业中,全文搜索引擎的使用越来越广泛,而Apache Lucene作为一款强大的开源全文检索库,深受开发者们的喜爱。它提供了高效的索引和查询功能,使得在海量数据中进行精准、快速的文本搜索成为可能。本文将围绕...
Lucene是一款高性能、全功能的文本搜索引擎库,它被广泛应用于各种需要进行高效全文检索的应用场景中,例如网站搜索、文档管理等。由于其高度可定制化的特点,开发者可以根据具体需求对Lucene进行配置和优化。 ####...
总的来说,Lucene在处理大文本和中文检索时,需要注意内存管理、编码处理以及查询解析的正确性。通过合理的配置和优化,可以有效地利用Lucene构建高性能的全文搜索引擎。在实际应用中,还需要关注性能优化,如索引的...
在IT领域,搜索引擎是至关重要的工具,特别是在大数据和信息检索中。Apache Lucene是一个高性能、全文本搜索库,它提供了一个强大的框架来构建自定义的搜索引擎应用。本篇将深入探讨如何利用Java和Lucene来实现一个...
Lucene是一个高性能、全文检索的Java库,它提供了索引和搜索文本的强大功能。在JavaEE项目中,Lucene可以帮助我们构建高效的搜索系统,为用户提供快速、精准的查询体验。以下是基于Lucene开发JavaEE项目的关键知识点...
Lucene.dll 是 Apache Lucene 库的 .NET 版本,它是一个高性能、全文本搜索库,被广泛应用于各种应用程序中进行文本检索和索引。Apache Lucene 提供了强大的搜索功能,包括分词、评分、排序等,而 Lucene.dll 是这个...
6. **错误处理和调试**:讲解在实际开发中可能遇到的问题,以及如何调试和解决这些问题。 7. **实际案例分析**:通过具体的Web应用示例,展示Struts和Lucene结合的完整流程。 通过学习这个教程,开发者不仅可以掌握...
它提供了强大的文本分析、索引构建和搜索功能,但值得注意的是,Lucene本身并不包含完整的全文检索引擎,而是作为核心组件供开发者集成到自己的应用系统中,以实现高效、精准的全文搜索。 ### Lucene的核心概念 1....
4. **更好的错误处理**:3.6.2版改进了错误报告和处理机制,使得开发者在遇到问题时能更快地定位和解决。 5. **API兼容性**:保持了向前兼容性,使得升级到新版本的程序无需大幅度修改代码。 三、使用Lucene 3.6.2...
在公交搜索系统中,Lucene被用来建立索引,对公交线路数据进行预处理,使得搜索过程可以快速高效地完成。通过将公交线路数据如站点、线路编号、始发站、终点站等信息进行分词和索引,用户在输入查询时,系统能迅速...
WebLucene是一个基于Apache Lucene的开源搜索引擎工具,它专为网站提供站内搜索功能。Lucene是一个强大的全文检索库,而WebLucene则...在实践中,不断学习和熟悉这些工具,将有助于更好地管理和维护你的站内搜索引擎。
ElasticSearch在运行过程中可能会遇到各种问题,如: - **7.2.1. 由gc引起节点脱离集群** 当节点因垃圾回收而暂时失去响应时,可能导致节点被认为是失败的。解决方法包括调整JVM垃圾回收策略。 - **7.2.2. outof...
10. **异常处理与错误排查**:在开发过程中,可能会遇到各种异常和错误。代码示例会提供处理常见问题的方法,帮助开发者更好地理解和调试Lucene应用。 通过深入学习和实践这些示例代码,你将能够掌握Lucene 4的核心...
为了提高效率,可以利用索引或者全文搜索引擎技术,如Lucene.NET,预先建立文件内容的索引,使得搜索过程更快。 在实际应用中,文件搜索器可能还需要考虑以下几点: 1. **性能优化**:大量文件的搜索可能会消耗很...
IKAnalyzer是中国开源社区推出的一款高性能、易用的中文分词工具,主要针对Lucene等全文检索引擎进行设计和优化。它的全称为“Intelligent Chinese Analyzer for Lucene”,旨在提升中文在全文检索领域的处理效率和...
本文主要探讨了中文分词、搜索引擎的基本概念、Lucene和Elasticsearch(ELK)的相关知识,以及IK分词器在实际应用中的重要性。 首先,中文分词是搜索引擎处理中文文本的基础。在中文情况下,由于词汇之间没有明显的...
这可能涉及自然语言处理和文本挖掘技术,C#中有`System.Text.RegularExpressions`用于正则表达式匹配,还可以借助第三方库如Lucene.NET进行更复杂的全文搜索。 5. **搜索算法**:根据用户输入的查询关键字,搜索...
8. **异常处理和错误恢复**:在爬取过程中,可能会遇到各种异常,如网络错误、编码问题等,因此需要合理的异常处理机制来确保爬虫的稳定运行。 9. **分布式爬虫架构**:为了应对大规模的抓取任务,项目可能采用了...
它基于Lucene库,提供了高效、可扩展的搜索和分析能力。在Solr中,有时我们需要与传统的关系型数据库如SQL Server或Oracle进行交互,以获取数据或者同步数据库中的信息到Solr索引中。本文将详细介绍如何在Solr中建立...