在创建索引的时候,
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 是一个全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够在其应用程序中集成高级的搜索功能。本篇学习笔记将深入探讨 Lucene 的...
标题:Lucene学习笔记 描述:Lucene学习笔记,Lucene入门必备材料 知识点: 一、Lucene概述与文档管理策略 Lucene是一款高性能、全功能的文本搜索引擎库,广泛应用于文档检索、全文搜索等场景。为了提升搜索效率...
以上就是Lucene 3.6的学习笔记,涵盖了从基础到高级的各种搜索和索引操作,以及相关的分词和扩展功能。通过学习这些内容,可以深入理解Lucene的工作机制,并利用其强大的搜索能力构建高效的应用。
【Lucene学习笔记】 Lucene 是一款开源的全文检索框架,由Apache软件基金会维护,它提供了高效的、可扩展的搜索引擎功能。不同于一个完整的应用程序,Lucene 提供的是一个基础组件,开发者可以将其集成到自己的应用...
**Lucene 基础学习笔记与源码分析** **一、Lucene 概述** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它是一个 Java 开发的开源项目,被广泛应用于各种搜索引擎的构建,支持多种编程...
以上是对 Lucene 3.5 的学习笔记总结,涵盖了从索引构建到查询操作的基础和高级功能。通过深入理解这些概念和实践应用,可以帮助开发者更好地利用 Lucene 和 Solr 构建高效且功能强大的搜索应用。
Lucene,作为一款开源的全文搜索引擎库,被广泛应用于各种信息检索场景。本文将详细讲解Lucene 2.9.1版本的核心概念、架构以及索引创建与搜索的流程。 一、Lucene 2.9.1环境搭建 在开始使用Lucene之前,首要任务是...
10. **lucene学习笔记 3 .txt** 这是作者的学习笔记,可能包含了个人理解和使用Lucene过程中遇到的问题及解决方案,提供了不同角度的见解和实践经验。 通过这些文档,你可以系统地学习和掌握Lucene的各个方面,从...
Lucene学习笔记(一)可能涵盖了Lucene的安装与环境配置,以及如何创建第一个Lucene应用。这通常包括导入必要的库,设置索引目录,以及创建和添加文档到索引。 Lucene学习笔记(二)可能涉及索引构建过程,讲解了如何...
《Lucene 2.4与Nutch学习笔记:在多文本文档中搜索关键词》 Lucene是一个高性能、全文本搜索引擎库,它为开发者提供了在Java应用程序中实现全文搜索功能的基本工具。Nutch则是一个开源的网络爬虫项目,用于抓取...
在"lucene总结.chm"文件中,可能包含了网友们对Lucene的详细学习笔记和实践心得。CHM是Microsoft编写的帮助文件格式,通常包含HTML页面和相关资源,便于用户查阅和学习。在这里,读者可以找到关于Lucene的API用法、...
总的来说,《Lucene笔记共38页.pdf》是一份全面且深入的教程,适合希望掌握全文检索技术的开发者学习。通过这份笔记,读者不仅能了解Lucene的工作原理,还能掌握如何在实际项目中有效利用这一强大工具。
**Lucene.net学习笔记整理** 在信息技术领域,搜索引擎技术一直占据着重要的地位,尤其是在大数据时代,高效、精准的检索能力显得尤为重要。Lucene是Apache软件基金会的一个开源项目,它为Java开发者提供了一个高...
然而,值得注意的是,Lucene本身并不是一个完整的全文搜索引擎,而是一个用于构建搜索引擎的基础工具包。 **二、Lucene的核心功能** 1. **索引创建**:Lucene能够高效地读取各种文件格式(如HTML、PDF、DOC等),...
- **学习版本**:Lucene 4.0(由于lukeall-4.0.0-ALPHA.jar并非最新版本,因此选择该版本进行学习) ### 全文检索简介 全文检索是指根据检索条件,在所有文档中进行精确或模糊匹配的过程。这种检索方式特别适用于...
总的来说,这个“lucene 小资源”很可能包含了一些示例代码、笔记、教程或者是作者在实践过程中遇到问题的解决方案,对于想深入了解和使用Lucene的人来说,是非常有价值的学习材料。通过这些资源,你可以逐步掌握...
### SOLR学习笔记 #### 一、Solr简介与特点 **Solr** 是一种开源的企业级搜索平台,它是基于 **Lucene Java** 构建的。Solr 的设计目标是为了提供高性能、高可用性的搜索服务,适用于各种规模的企业级应用。 **...