`
Brooke
  • 浏览: 1182498 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Lucene学习笔记一(基础)

 
阅读更多
在创建索引的时候,
Field.Store,表示对域的存储
       Field.Store.YES:存储字段值(未分词前的字段值)
        Field.Store.NO:不存储,存储与索引没有关系
        Field.Store.COMPRESS:压缩存储,用于长文本或二进制,但性能受损
Field.Index,表示对域的搜索
       Field.Index.ANALYZED:分词建索引
       Field.Index.ANALYZED_NO_NORMS:分词建索引,但是Field的值不像通常那样
                                      被保 存,而是只取一个byte,这样节约存储空间
       Field.Index.NOT_ANALYZED:不分词且索引
       Field.Index.NOT_ANALYZED_NO_NORMS:不分词建索引,Field的值去一个byte保存


TermVector表示文档的条目(由一个Document和Field定位)和它们在当前文档中所出现的次数
      Field.TermVector.YES:为每个文档(Document)存储该字段的TermVector
     Field.TermVector.NO:不存储TermVector
     Field.TermVector.WITH_POSITIONS:存储位置
      Field.TermVector.WITH_OFFSETS:存储偏移量
      Field.TermVector.WITH_POSITIONS_OFFSETS:存储位置和偏移量



创建索引的简单示例:

/**
	 * 创建索引(Indexing),生成索引文件
	 */
	private static void createTextIndex() {
//		public final static String INDEX_SOURCE_DIR = "D:\\tomcat-7.0.22";// 要检索的文件夹
//
//		public final static String INDEX_STORE_DIR = "d:\\fileIndex";// 索引文件的存放位置
		//获取要索引的文件
		File baseDir = new File(INDEX_SOURCE_DIR);
		List<File> subFiles = new ArrayList<File>();
		if (!baseDir.exists()) {
			System.out.println("不存在" + INDEX_SOURCE_DIR + "目录");
			System.exit(1);
		} else if (baseDir.isDirectory()) {
			subFiles = FileUtils.searchFilesByType(baseDir, subFiles, ".html");
		}
		
		//创建存放索引文件的目录
		File indexDir = new File(INDEX_STORE_DIR);
		if (!indexDir.exists()) {
			indexDir.mkdir();
		}

		//索引分析器
		Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
		
		//创建索引器(核心)  
		IndexWriter indexWriter = null;
		long startTime = 0;
		try {
			indexWriter = new IndexWriter(FSDirectory.open(indexDir),luceneAnalyzer, true, IndexWriter.MaxFieldLength.LIMITED);
			indexWriter.setMaxMergeDocs(5);
			indexWriter.setMergeFactor(5);
			//不建立复合式索引文件,默认的情况下是复合式的索引文件   
			indexWriter.setUseCompoundFile(false);
			
			startTime = new Date().getTime();
			// 增加document到索引去
			for (int i = 0; i < subFiles.size(); i++) {
				if(subFiles.get(i).getName().indexOf(".")<=0){
					continue;
				}
				System.out.println(new Date()+"    File " + subFiles.get(i).getCanonicalPath()+ "  正在被索引....");
					
				// 将txt 文件写到 Document中
				Document document = new Document();
				
				String fileName=subFiles.get(i).getName();//.substring(0,subFiles.get(i).getName().indexOf("."));
				Field fieldName = new Field("fileName",fileName,Field.Store.NO,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS);
				document.add(fieldName);
				
				String filePath=subFiles.get(i).getPath();
				Field FieldPath = new Field("filePath",filePath,Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS);
				document.add(FieldPath);
				
				String contents = FileUtils.fileReaderAll(subFiles.get(i).getCanonicalPath(),"GBK");// 转化成GBK
				Field FieldBody = new Field("contents", contents, Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS);
				document.add(FieldBody);
				
				indexWriter.addDocument(document);
			}

		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				// optimize()方法是对索引进行优化
				indexWriter.optimize();
				indexWriter.close();
				// 测试一下索引的时间
				long endTime = new Date().getTime();
				System.out.println("这花费了" + (endTime - startTime)+" 毫秒来把文档增加到索引里面去!\n"+indexDir.getPath());
				File[] fils=indexDir.listFiles();
				for(int i=0;i<fils.length;i++){
					System.out.println(fils[i].getCanonicalPath());
				}
			} catch (CorruptIndexException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
分享到:
评论

相关推荐

    Lucene 学习笔记 1

    **Lucene 学习笔记 1** Lucene 是一个全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够在其应用程序中集成高级的搜索功能。本篇学习笔记将深入探讨 Lucene 的...

    lucene学习笔记

    标题:Lucene学习笔记 描述:Lucene学习笔记,Lucene入门必备材料 知识点: 一、Lucene概述与文档管理策略 Lucene是一款高性能、全功能的文本搜索引擎库,广泛应用于文档检索、全文搜索等场景。为了提升搜索效率...

    Lucene 3.6 学习笔记

    以上就是Lucene 3.6的学习笔记,涵盖了从基础到高级的各种搜索和索引操作,以及相关的分词和扩展功能。通过学习这些内容,可以深入理解Lucene的工作机制,并利用其强大的搜索能力构建高效的应用。

    Lucene学习笔记

    【Lucene学习笔记】 Lucene 是一款开源的全文检索框架,由Apache软件基金会维护,它提供了高效的、可扩展的搜索引擎功能。不同于一个完整的应用程序,Lucene 提供的是一个基础组件,开发者可以将其集成到自己的应用...

    lucene基础学习笔记&源码

    **Lucene 基础学习笔记与源码分析** **一、Lucene 概述** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它是一个 Java 开发的开源项目,被广泛应用于各种搜索引擎的构建,支持多种编程...

    lucene3.5学习笔记

    以上是对 Lucene 3.5 的学习笔记总结,涵盖了从索引构建到查询操作的基础和高级功能。通过深入理解这些概念和实践应用,可以帮助开发者更好地利用 Lucene 和 Solr 构建高效且功能强大的搜索应用。

    本人的Lucene2.9学习笔记

    Lucene,作为一款开源的全文搜索引擎库,被广泛应用于各种信息检索场景。本文将详细讲解Lucene 2.9.1版本的核心概念、架构以及索引创建与搜索的流程。 一、Lucene 2.9.1环境搭建 在开始使用Lucene之前,首要任务是...

    lucene学习资料

    10. **lucene学习笔记 3 .txt** 这是作者的学习笔记,可能包含了个人理解和使用Lucene过程中遇到的问题及解决方案,提供了不同角度的见解和实践经验。 通过这些文档,你可以系统地学习和掌握Lucene的各个方面,从...

    Lucene开发指南

    Lucene学习笔记(一)可能涵盖了Lucene的安装与环境配置,以及如何创建第一个Lucene应用。这通常包括导入必要的库,设置索引目录,以及创建和添加文档到索引。 Lucene学习笔记(二)可能涉及索引构建过程,讲解了如何...

    lucene2.4+nutch学习笔记三:lucene 在多个文本文档里找出包含一些关键字的文档

    《Lucene 2.4与Nutch学习笔记:在多文本文档中搜索关键词》 Lucene是一个高性能、全文本搜索引擎库,它为开发者提供了在Java应用程序中实现全文搜索功能的基本工具。Nutch则是一个开源的网络爬虫项目,用于抓取...

    搜索引擎lucene学习资料

    在"lucene总结.chm"文件中,可能包含了网友们对Lucene的详细学习笔记和实践心得。CHM是Microsoft编写的帮助文件格式,通常包含HTML页面和相关资源,便于用户查阅和学习。在这里,读者可以找到关于Lucene的API用法、...

    lucene笔记共38页.pdf.zip

    总的来说,《Lucene笔记共38页.pdf》是一份全面且深入的教程,适合希望掌握全文检索技术的开发者学习。通过这份笔记,读者不仅能了解Lucene的工作原理,还能掌握如何在实际项目中有效利用这一强大工具。

    Lucene.net学习书记整理

    **Lucene.net学习笔记整理** 在信息技术领域,搜索引擎技术一直占据着重要的地位,尤其是在大数据时代,高效、精准的检索能力显得尤为重要。Lucene是Apache软件基金会的一个开源项目,它为Java开发者提供了一个高...

    Lucene技术文档doc

    然而,值得注意的是,Lucene本身并不是一个完整的全文搜索引擎,而是一个用于构建搜索引擎的基础工具包。 **二、Lucene的核心功能** 1. **索引创建**:Lucene能够高效地读取各种文件格式(如HTML、PDF、DOC等),...

    Lucene笔记

    - **学习版本**:Lucene 4.0(由于lukeall-4.0.0-ALPHA.jar并非最新版本,因此选择该版本进行学习) ### 全文检索简介 全文检索是指根据检索条件,在所有文档中进行精确或模糊匹配的过程。这种检索方式特别适用于...

    lucene 小资源

    总的来说,这个“lucene 小资源”很可能包含了一些示例代码、笔记、教程或者是作者在实践过程中遇到问题的解决方案,对于想深入了解和使用Lucene的人来说,是非常有价值的学习材料。通过这些资源,你可以逐步掌握...

    SOLR学习笔记

    ### SOLR学习笔记 #### 一、Solr简介与特点 **Solr** 是一种开源的企业级搜索平台,它是基于 **Lucene Java** 构建的。Solr 的设计目标是为了提供高性能、高可用性的搜索服务,适用于各种规模的企业级应用。 **...

Global site tag (gtag.js) - Google Analytics