`
sysout091
  • 浏览: 1051 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Lucene实战Demo

阅读更多

最近在学习Lucene,官方版本已经更新至5.0,网址:http://lucene.apache.org/

 

Lucene官网 写道
The Apache LuceneTM project develops open-source search software, including:

1.Lucene Core, our flagship sub-project, provides Java-based indexing and search technology, as well as spellchecking, hit highlighting and advanced analysis/tokenization capabilities.
2.Solr, is a high performance search server built using Lucene Core, with XML/HTTP and JSON/Python/Ruby APIs, hit highlighting, faceted search, caching, replication, and a web admin interface.
3.Open Relevance Project, is a subproject with the aim of collecting and distributing free materials for relevance testing and performance.
4.PyLucene, is a Python port of the Core project.
Lucene Core是最核心的内容。
provides Java-based indexing and search technology, as well as spellchecking, hit highlighting and advanced analysis/tokenization capabilities.

 Lucene 是基于Java基础的索引和搜索技术,包括拼写检查,高亮显示和高端的分词能力。它不是一个完全的应用,而是提供了一项能力,一种技术,JAVA搜索技术的一个解决方案。

 

Lucene的技术我就不详细介绍了,百度百科上有.

 

接下来我为大家介绍,我使用Lucene设计和开发了一个简易文本文件搜索的Demo,主要包括以下几个方面:

 

  • 环境准备

使用到的jar包:见附件。

 

  • 主体思路

1.获取需要被索引的数据

 

File[] files = files2Index.listFiles(new FilenameFilter()
		{

			@Override
			public boolean accept(File dir, String name)
			{
				return name.endsWith("txt");
			}
		});

  

 

2.使用Lucene创建索引

IndexWriter indexWriter = getIndexWriter();

			BufferedReader br = null;
			String line = null;
			StringBuilder sb = null;

			for (File file : files)
			{
				// 创建txt文件的索引,包括名称和内容
				Document doc = new Document();
				doc.add(new TextField(NAME, file.getName(), Store.YES));

				try
				{
					br = new BufferedReader(new FileReader(file));
					sb = new StringBuilder();
					while ((line = br.readLine()) != null)
					{
						sb.append(line);
					}

					doc.add(new TextField(CONTENT, sb.toString(), Store.YES));
					indexWriter.addDocument(doc);

					indexWriter.commit();
					br.close();
				} catch (FileNotFoundException e)
				{
					// TODO Auto-generated catch block
					// log
				} catch (IOException e)
				{
					// TODO Auto-generated catch block
					// log
				}
			}


 

/**
	 * 索引写入类
	 * 
	 * @return
	 */
	private IndexWriter getIndexWriter()
	{
		IndexWriter indexWriter = null;
		try
		{
			indexWriter = new IndexWriter(FSDirectory.open(indexDir.toPath()),
					new IndexWriterConfig(new SmartChineseAnalyzer()));
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			// log
		}
		return indexWriter;
	}

 

 

 

3.根据索引查询内容

public List<String> getFoundFileNames(String queryContent)
	{
		ScoreDoc[] scoreDocs = queryIndex(queryContent);

		List<String> results = new ArrayList<String>();
		Set<String> fields = new HashSet<String>();
		fields.add(NAME);
		fields.add(CONTENT);

		for (ScoreDoc scDoc : scoreDocs)
		{
			try
			{
				Document resDoc = indexSearcher.doc(scDoc.doc, fields);
				results.add(resDoc.getValues(NAME)[0]);
			} catch (IOException e)
			{
				// TODO Auto-generated catch block
				// log
			}
		}
		return results;
	}
private ScoreDoc[] queryIndex(String queryContent)
	{
		try
		{
			// 索引搜索
			indexSearcher = new IndexSearcher(DirectoryReader.open(FSDirectory
					.open(indexDir.toPath())));

			// 查询内容转换器
			QueryParser parser = new QueryParser("", new SmartChineseAnalyzer());

			return indexSearcher.search(parser.parse(queryContent), MAX_COUNT).scoreDocs;
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			// log
		} catch (ParseException e)
		{
			// TODO Auto-generated catch block
			// log
		}
		return null;
	}

 


PS:首先需要在对应的目录下面创建一些TXT文件,索引目录如果不存在会自动创建文件夹
测试代码: 

 

 	@Test
	public void test01()
	{
		IndexFile file = new IndexFile(new File("E:\\APP\\luceneTest\\文本文件"),
				new File("E:\\APP\\luceneTest\\indexs\\01"));
		file.createIndex();
		System.out.println("01:" + file.getFoundFileNames("NAME:\"文本\""));
		System.out.println("01:" + file.getFoundFileNames("NAME:\"txt\""));
	}

	@Test
	public void test02()
	{
		IndexFile file = new IndexFile(new File("E:\\APP\\luceneTest\\文本文件"),
				new File("E:\\APP\\luceneTest\\indexs\\02"));
		file.createIndex();
		System.out.println("02:" + file.getFoundFileNames("CONTENT:\"我\""));
		System.out.println("02:" + file.getFoundFileNames("CONTENT:\"开发\""));
	} 
分享到:
评论

相关推荐

    lucene_demo例子

    《Lucene实战(第2版) PDF高清中文版.pdf》这本书是关于Apache Lucene的一本经典教程,适合初学者入门。Lucene是一个全文搜索引擎库,它提供了强大的文本搜索功能,被广泛应用于各种信息检索系统中。这本书详细介绍了...

    Lucene常用的Demo

    **Lucene常用Demo详解** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它提供了文本分析、索引构建、搜索功能的核心工具,是Java开发者在项目中实现全文检索的重要利器。本篇文章将深入探讨...

    lucene3.5全文检索案例lucene+demo

    本篇文章将围绕“lucene3.5全文检索案例lucene+demo”,详细讲解Lucene 3.5的核心概念、关键功能以及如何通过实例进行操作。 一、Lucene 3.5核心概念 1. 文档(Document):Lucene中的最小处理单元,相当于数据库...

    lucene4.4 Demo事例

    《Lucene 4.4 实战教程:从基础到进阶》 Lucene是一个高性能、全文本搜索引擎库,由Apache软件基金会开发。在版本4.4中,Lucene提供了更加强大和高效的搜索功能,是开发者构建自己的搜索引擎的理想选择。本教程主要...

    lucene5.5demo

    《深入理解Lucene 5.5:基于Spring MVC与MySQL的实战示例》 Lucene是一个高性能、全文本检索库,被广泛应用于各种搜索引擎的开发。在这个“lucene5.5demo”项目中,开发者利用Lucene 5.5版本,结合Spring MVC框架和...

    lucene APi DEMO

    《Lucene API实战演示》 在信息技术领域,搜索引擎的构建是一项关键任务,而Apache Lucene作为一款开源全文检索库,为开发者提供了强大的文本检索功能。本文将深入探讨Lucene API的使用,通过提供的"lucene-1.2.jar...

    杨中科 Lucene.net版Demo

    【标题】:“杨中科 Lucene.net版Demo”指的是由知名讲师杨中科提供的一个关于Lucene.NET的实战演示项目。Lucene.NET是Apache Lucene搜索引擎库的.NET Framework版本,它为.NET开发者提供了强大的全文检索和分析功能...

    Lucenedemo

    《Lucene入门实战:构建基础检索功能》 在信息技术领域,全文搜索引擎的开发与应用是不可或缺的一部分,而Apache Lucene正是这样一个强大的全文检索库。本文将通过“Lucenedemo”项目,带你走进Lucene的世界,了解...

    全文搜索-Lucene

    在 `LuceneDemo` 这个示例项目中,你可以看到如何创建索引、查询以及处理结果。通常,首先创建一个 Directory 对象,然后实例化 Analyzer 和 IndexWriter。接着,使用 Document 对象表示要索引的数据,并通过 ...

    lucene.net源代码

    在提供的"luceneDemo1"中,我们可以看到一个简单的Lucene.NET应用示例。首先,创建Analyzer实例,如StandardAnalyzer,用于分词。接着,创建Document对象,添加要索引的字段。然后,使用IndexWriter创建索引,将文档...

    lucene搜索引擎培训资料

    **五、尚学堂全文检索系统(Lucene)实战** 这个部分可能包含一个尚学堂制作的全文检索系统案例,通过实际项目展示了Lucene在构建搜索引擎时的应用,可能涵盖如何整合数据库、处理大量数据、优化搜索性能等方面的...

    java全文搜索lucene-3.0.0-src+lib.zip

    Lucene 3.0.0源码包含了多个模块,如core、analysis、queryparser、demo等,分别对应不同的功能模块。开发者可以通过阅读源码了解其内部实现原理,以便更好地进行二次开发和优化。 3.2 关键类解析 - Document:表示...

    lucene测试案例

    5. **实战测试**:项目中的`spring-boot-lucene-demo`可能包含了一个完整的示例应用,包括了创建索引的测试用例、执行不同类型的搜索查询的测试用例,以及如何在Spring Boot环境下运行和调试这些测试。通过这个示例...

    hibernateSearch+demo

    这个“hibernateSearch+demo”项目提供了一个实战示例,帮助开发者理解并应用 Hibernate Search 的核心概念和功能。 在 Hibernate Search 中,主要涉及以下关键知识点: 1. **全文索引**:Hibernate Search 使用 ...

    人工智能项目资料-基于lucene的java实现的搜索引擎demo.zip

    更有深度学习、机器学习、自然语言处理和计算机视觉的实战项目源码,助您从理论走向实践,如果您已有一定基础,您可以基于这些源码进行修改和扩展,实现更多功能。 【期待与您同行】 我们真诚地邀请您下载并使用...

    EsDemo.zip

    《Java开发Elasticsearch实战详解》 在现代大数据处理与搜索领域,Elasticsearch(简称ES)因其高效、可扩展的特性,已经成为广泛使用的搜索引擎和数据分析工具。本示例"EsDemo.zip"提供了使用Java进行ES开发的具体...

    Lucence搜索

    《深入理解Lucene搜索技术:从Demo到实战》 Lucene是Apache软件基金会的一个开源全文检索库,它提供了高性能、可扩展的搜索和分析能力。在本篇文章中,我们将深入探讨Lucene的基本概念,以及如何通过一个简单的...

    elasticsearch demo

    Elasticsearch 是一个基于 Lucene 的开源全文搜索引擎,它提供了分布式、实时、可扩展的搜索和分析能力。在这个"elasticsearch demo"中,我们将深入探讨Elasticsearch的核心功能,包括基本的创建、读取、更新、删除...

Global site tag (gtag.js) - Google Analytics