`
liuwei1981
  • 浏览: 772110 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:161227
社区版块
存档分类
最新评论

lucene 建立文件索引和针对索引进行搜索(lucene2.2版本)

阅读更多

    最近因为项目需要,开始了解lucene的应用,手头有一本《Lucene In Action》,不过一用起来才发现,我现在用2.0lucene包的情况下,该书第一个示例就无法正确编译通过,找了一些资料,终于算是调试通过,算是一个好的开始吧。

    1.建立索引:

     

package demo.example.searcher;

import java.io.*;
import java.util.*;
import org.apache.lucene.analysis.standard.*;
import org.apache.lucene.index.*;
import org.apache.lucene.document.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Indexer {
	private static Log log = LogFactory.getLog(Indexer.class);

	public static void main(String[] args) throws Exception {
		File indexDir = new File("C:\\index");
		File dataDir = new File("C:\\lucene\\src");

		long start = new Date().getTime();

		int numIndexed = index(indexDir, dataDir);

		long end = new Date().getTime();

		System.out.println("use:" + (end - start));
	}

	public static int index(File indexDir, File dataDir) {
		int ret = 0;
		try {
			IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(), true);
			writer.setUseCompoundFile(false);

			indexDirectory(writer, dataDir);

			ret = writer.docCount();
			writer.optimize();
			writer.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
		return ret;
	}

	public static void indexDirectory(IndexWriter writer, File dir) {
		try {
			File[] files = dir.listFiles();

			for (File f : files) {
				if (f.isDirectory()) {
					indexDirectory(writer, f);
				} else {
					indexFile(writer, f);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void indexFile(IndexWriter writer, File f) {
		try {
			System.out.println("Indexing:" + f.getCanonicalPath());
			Document doc = new Document();
			Reader txtReader = new FileReader(f);

			doc.add(new Field("contents", txtReader));
			doc.add(new Field("filename", f.getCanonicalPath(), Field.Store.YES, Field.Index.UN_TOKENIZED));

			writer.addDocument(doc);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

    2.针对上面类建立的索引进行查询:

  

package demo.example.searcher;

import java.util.*;

import org.apache.lucene.search.*;
import org.apache.lucene.queryParser.*;
import org.apache.lucene.analysis.standard.*;
import org.apache.lucene.document.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Searcher {
	private static Log log = LogFactory.getLog(Searcher.class);

	public static void main(String[] args) {
		String indexDir = "C:\\index";
		String q = "查询关键字";
		search(indexDir, q);
	}

	public static void search(String indexDir, String q) {
		try {
			IndexSearcher is = new IndexSearcher(indexDir);

			QueryParser queryParser = new QueryParser("contents", new StandardAnalyzer());
			Query query = queryParser.parse(q);
			long start = new Date().getTime();

			Hits hits = is.search(query);

			long end = new Date().getTime();

			System.out.println("use:" + (end - start));

			for (int i = 0; i < hits.length(); i++) {
				Document doc = hits.doc(i);
				System.out.println("The right file:" + doc.get("filename"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 

 

最后运行正常。

 

不过在运行测试的时候发现了一个不明白的问题:

在建立索引的文件都是Java类,在测试查询关键字信息的时候,中英文都很正常,但发现在java类源文件中的信息被过滤了,无法检索出来,这是怎么回事啊,lucene自动过滤类文件的注释信息么?

分享到:
评论
3 楼 liuwei1981 2008-12-26  
而在普通的文本中,中文索引建立以及查询都正常,不清楚lucene其中的工作原理
2 楼 liuwei1981 2008-12-26  
在java源文件以及spring配置文件中,即使不是在注释中的中文也没有被索引
1 楼 liuwei1981 2008-12-26  
好像不是因为注释的关系,在java类源文件和spring与struts2的配置xml格式文件中,中文似乎都没被索引(中文处在注释区域),倒是我自己定义的几个xml,在注释中的中文被索引了,查询结果也正常,这两类xml文件最重要的区别就是spring和struts2的配置xml文件的命名空间的引入了吧,例如
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
为什么会这样呢,难道因为这些文件的引入,以及java类源文件的定义,注释都被屏蔽索引了么?

相关推荐

    lucene全文检索简单索引和搜索实例

    二、Lucene索引创建流程 1. 初始化:首先,我们需要导入Lucene库,并创建一个标准的Analyzer,例如StandardAnalyzer,它对输入的文本进行标准化处理。 2. 创建索引目录:索引数据会存储在一个Directory对象中,...

    最简单的Lucene建立、搜索索引的方法

    **Lucene简介** Lucene是Apache软件基金会的一个开放源代码项目,它是一个高性能、全文本检索库,...通过上述步骤,你可以在MyEclipse10环境下使用Lucene快速建立和搜索索引,为你的应用程序添加强大的全文检索功能。

    lucene 对 xml建立索引

    本文将详细介绍如何利用Lucene对XML文档进行索引建立的过程,并通过示例代码具体阐述其实现方法。 #### 二、基础知识 1. **Lucene简介** - Lucene是一个开源的全文搜索引擎库,能够帮助开发者构建应用程序内的搜索...

    关于lucene建立数据库索引的更新说明

    总之,使用Lucene建立数据库索引是一个涉及多方面知识的过程,包括但不限于版本适配、索引策略、用户界面实现、搜索结果处理和分词优化。在实践中,不断学习和交流,结合具体需求调整方法,才能更好地利用Lucene实现...

    Lucene读取索引文件

    一个Lucene索引是由多个文件组成的,包括但不限于 segments文件、.del文件(删除文档标记)、.tii和.tis文件(Term Info Index和Term Info postings)、.frx、.fdx、.fdt、.fdt(Field Data)等。这些文件共同构成了...

    基于lucene技术的增量索引

    本文将深入探讨如何利用Lucene实现增量索引,这是一种在数据库或文件系统更新时仅对新数据或变化数据进行索引的技术,以降低资源消耗并保持搜索性能。 **1. Lucene基础知识** Lucene首先需要理解的是它的核心概念,...

    Lucene索引文件查看工具lukeall4.7.1

    它是一款专门针对Lucene 4.7版本设计的索引文件查看和分析工具,帮助我们直观地洞察Lucene索引的内部结构。 LukeAll 4.7.1的核心功能主要集中在以下几个方面: 1. **索引目录选择**:用户可以直接通过双击运行...

    Lucene之删除索引

    它提供了高性能、可扩展的搜索和索引功能,广泛应用于各种应用程序中,如内容管理系统、网站搜索引擎等。现在,让我们详细讨论如何在Lucene中删除索引。 首先,删除索引是Lucene中一个关键的操作,因为随着时间的...

    lucene2.2的源码包

    作为一款开源的全文检索引擎库,Lucene提供了一系列接口和类,用于索引文本数据并进行高效搜索。在Lucene 2.2版本中,它已经展现出了强大的搜索性能和灵活性,被广泛应用于各种信息检索系统。 二、Lucene 2.2主要...

    Lucene对本地文件多目录创建索引

    - `lukeall-0.8.1.jar`:Luke是一个用于查看和分析Lucene索引的工具,可以帮助开发者调试和理解索引结构。 - `log4j-1.2.12.jar`:日志框架,用于记录程序运行时的信息。 - `commons-httpclient-3.1.jar`:可能是...

    lucene索引文件格式介绍

    了解这些文件格式后,我们还要知道Lucene索引中使用的基本数据类型,如Byte、UInt32、UInt64和VInt。VInt是一种变长整数类型,它根据数值大小动态占用字节,有效地节省了存储空间。 总的来说,Lucene的索引文件格式...

    Lucene 索引的简单使用

    - **多字段索引**:一个文档可以有多个字段被索引,方便针对不同字段进行搜索。 - **模糊搜索**:支持通配符、前缀、短语等查询,如`new WildcardQuery(new Term("title", "Java*"))`。 - **评分和排序**:Lucene...

    Lucene3.0创建索引

    Lucene3.0是该系列的一个版本,在性能和稳定性方面都有所提升。 #### 二、创建索引的基本步骤 根据提供的描述,创建索引的主要步骤包括: 1. **指定源目录**:首先确定要索引的文本文件所在的位置。 2. **设置目标...

    luke源码--查看lucene索引文件

    《深入理解Luke:洞察Lucene索引文件》 在信息技术领域,搜索引擎的高效运作离不开对数据的快速检索,而Lucene作为开源全文检索库,扮演了核心角色。在这个过程中,Luke工具提供了一种直观的方式,让我们能够查看和...

    lucene索引查看工具及源码

    在使用 Lucene 进行信息检索时,有时我们需要对建立的索引进行查看、调试或分析,这时就需要借助 Lucene 的索引查看工具。 Luke 是一个非常实用的 Lucene 索引浏览器,全称为 Lucidworks Luke。它允许用户以图形化...

    Lucene 删除 合并索引

    Lucene 删除 合并索引,可以指定几个索引文件合并成一个索引文件。自己写的,有很多不足之处请多指教

    luke8用于查看lucene保存的索引库数据和文档数据

    而luke8,则是针对Lucene开发的一款可视化工具,允许开发者和管理员直接查看并分析Lucene索引库中的数据。 **1. lucene全解** Lucene的核心功能在于构建和管理全文索引。它将非结构化的文本数据(如网页、文档)...

    用Lucene.net对数据库建立索引及搜索

    Lucene是一个开源的Java项目,而Lucene.NET是它的.NET版本,它提供了对文本进行索引和搜索的功能。Lucene.NET的核心组件包括Analyzer(分析器)、Document(文档)、Field(字段)、IndexWriter(索引写入器)和...

    lucene索引结构原理.docx

    而在Lucene中,基本单位是Document,它同样由多个字段组成,但Lucene索引的是这些字段的内容,以加速文本检索。 - **索引构建**:Lucene支持增量索引和批量索引,可以处理数据源的小幅变化或大规模数据。数据库通常...

Global site tag (gtag.js) - Google Analytics