- 浏览: 96010 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
fengweiyou:
只取当前年月日 TRUNC(SYSDATE) 就可以了
oracle函数只取年月日 -
spp_1987:
我在页面上 显示出来的 怎么是乱码啊。 能解决下吗
是什 ...
struts+jquery -
spp_1987:
//JSONObject json = JSONObject. ...
struts+jquery -
spp_1987:
不知道为什么 有错啊。 我用的是DispatchAction啊 ...
struts+jquery -
hiteny:
还是css用着方便@ 谢谢啦
css控制字符串显示长度
org.apache.lucene.demo.IndexFiles类中,使用递归的方式去索引文件。在构造了一个IndexWriter索引器之后,就可以向索引器中添加Doucument了,执行真正地建立索引的过程。遍历每个目录,因为每个目录中可能还存在目录,进行深度遍历,采用递归技术找到处于叶节点处的文件(普通的具有扩展名的文件,比如my.txt文件),然后调用如下代码中红色部分:
上面红色标注的这一句:
writer.addDocument(FileDocument.Document(file));
其实做了很多工作。每当递归到叶子节点,获得一个文件,而非目录文件,比如文件myWorld.txt。然后对这个文件进行了复杂的操作:
先根据由myWorld.txt构造的File对象f,通过f获取myWorld.txt的具体信息,比如存储路径、修改时间等等,构造多个 Field对象,再由这些不同Field的聚合,构建出一个Document对象,最后把Document对象加入索引器IndexWriter对象中,通过索引器可以对这些聚合的Document的Field中信息进行分词、过滤处理,方便检索。
org.apache.lucene.demo.FileDocument类的源代码如下所示:
通过上面的代码,可以看出Field是何其的重要,必须把Field完全掌握了。
Field类定义了两个很有用的内部静态类:Store和Index,用它们来设置对Field进行索引时的一些属性。
Field类中还有一个内部类,它的声明如下:
这是一个与词条有关的类。因为在检索的时候需要指定检索关键字,通过为一个Field添加一个TermVector,就可以在检索中把该Field检索到。它的构造函数:
通过指定一个字符串,来构造一个Field的TermVector,指定该Field的对词条的设置方式,如下:
同时,Field的值可以构造成很多类型,Field类中定义了4种:String、Reader、byte[]、TokenStream。
然后就是Field对象的构造,应该看它的构造方法,它有7种构造方法:
还要注意了,通过Field类的声明:
可以看出,应该对它继承的父类AbstractField类有一个了解,下面的是AbstractField类的属性:
还有Field实现了Fieldable接口,添加了一些对对应的Document中的Field进行管理判断的方法信息。
static void indexDocs(IndexWriter writer, File file) throws IOException { // file可以读取 if (file.canRead()) { if (file.isDirectory()) { // 如果file是一个目录(该目录下面可能有文件、目录文件、空文件三种情况) String[] files = file.list(); // 获取file目录下的所有文件(包括目录文件)File对象,放到数组files里 // 如果files!=null if (files != null) { for (int i = 0; i < files.length; i++) { // 对files数组里面的File对象递归索引,通过广度遍历 indexDocs(writer, new File(file, files[i])); } } } else { // 到达叶节点时,说明是一个File,而不是目录,则建立索引 System.out.println("adding " + file); try { writer.addDocument(FileDocument.Document(file)); } catch (FileNotFoundException fnfe) { ; } } } }
上面红色标注的这一句:
writer.addDocument(FileDocument.Document(file));
其实做了很多工作。每当递归到叶子节点,获得一个文件,而非目录文件,比如文件myWorld.txt。然后对这个文件进行了复杂的操作:
先根据由myWorld.txt构造的File对象f,通过f获取myWorld.txt的具体信息,比如存储路径、修改时间等等,构造多个 Field对象,再由这些不同Field的聚合,构建出一个Document对象,最后把Document对象加入索引器IndexWriter对象中,通过索引器可以对这些聚合的Document的Field中信息进行分词、过滤处理,方便检索。
org.apache.lucene.demo.FileDocument类的源代码如下所示:
package org.apache.lucene.demo; import java.io.File; import java.io.FileReader; import org.apache.lucene.document.DateTools; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; public class FileDocument { public static Document Document(File f) throws java.io.FileNotFoundException { // 实例化一个Document Document doc = new Document(); // 根据传进来的File f,构造多个Field对象,然后把他们都添加到Document中 // 通过f的所在路径构造一个Field对象,并设定该Field对象的一些属性: // “path”是构造的Field的名字,通过该名字可以找到该Field // Field.Store.YES表示存储该Field;Field.Index.UN_TOKENIZED表示不对该Field进行分词,但是对其进行索引,以便检索 doc.add(new Field("path", f.getPath(), Field.Store.YES, Field.Index.UN_TOKENIZED)); // 构造一个具有最近修改修改时间信息的Field doc.add(new Field("modified", DateTools.timeToString(f.lastModified(), DateTools.Resolution.MINUTE), Field.Store.YES, Field.Index.UN_TOKENIZED)); // 构造一个Field,这个Field可以从一个文件流中读取,必须保证由f所构造的文件流是打开的 doc.add(new Field("contents", new FileReader(f))); return doc; } private FileDocument() {} }
通过上面的代码,可以看出Field是何其的重要,必须把Field完全掌握了。
Field类定义了两个很有用的内部静态类:Store和Index,用它们来设置对Field进行索引时的一些属性。
// Store是一个内部类,它是static的,主要为了设置Field的存储属性 public static final class Store extends Parameter implements Serializable { private Store(String name) { super(name); } // 在索引中压缩存储Field的值 public static final Store COMPRESS = new Store("COMPRESS"); // 在索引中存储Field的值 public static final Store YES = new Store("YES"); // 在索引中不存储Field的值 public static final Store NO = new Store("NO"); } //通过Index设置索引方式 public static final class Index extends Parameter implements Serializable { private Index(String name) { super(name); } // 不对Field进行索引,所以这个Field就不能被检索到(一般来说,建立索引而使它不被检索,这是没有意义的) // 如果对该Field还设置了Field.Store为Field.Store.YES或Field.Store.COMPRESS,则可以检索 public static final Index NO = new Index("NO"); // 对Field进行索引,同时还要对其进行分词(由Analyzer来管理如何分词) public static final Index TOKENIZED = new Index("TOKENIZED"); // 对Field进行索引,但不对其进行分词 public static final Index UN_TOKENIZED = new Index("UN_TOKENIZED"); // 对Field进行索引,但是不使用Analyzer public static final Index NO_NORMS = new Index("NO_NORMS"); }
Field类中还有一个内部类,它的声明如下:
public static final class TermVector extends Parameter implements Serializable
这是一个与词条有关的类。因为在检索的时候需要指定检索关键字,通过为一个Field添加一个TermVector,就可以在检索中把该Field检索到。它的构造函数:
private TermVector(String name) { super(name); }
通过指定一个字符串,来构造一个Field的TermVector,指定该Field的对词条的设置方式,如下:
// 不存储 public static final TermVector NO = new TermVector("NO"); // 为每个Document都存储一个TermVector public static final TermVector YES = new TermVector("YES"); // 存储,同时存储位置信息 public static final TermVector WITH_POSITIONS = new TermVector("WITH_POSITIONS"); // 存储,同时存储偏移量信息 public static final TermVector WITH_OFFSETS = new TermVector("WITH_OFFSETS"); // 存储,同时存储位置、偏移量信息 public static final TermVector WITH_POSITIONS_OFFSETS = new TermVector("WITH_POSITIONS_OFFSETS"); }
同时,Field的值可以构造成很多类型,Field类中定义了4种:String、Reader、byte[]、TokenStream。
然后就是Field对象的构造,应该看它的构造方法,它有7种构造方法:
public Field(String name, byte[] value, Store store) public Field(String name, Reader reader) public Field(String name, Reader reader, TermVector termVector) public Field(String name, String value, Store store, Index index) public Field(String name, String value, Store store, Index index, TermVector termVector) public Field(String name, TokenStream tokenStream) public Field(String name, TokenStream tokenStream, TermVector termVector)
还要注意了,通过Field类的声明:
public final class Field extends AbstractField implements Fieldable, Serializable
可以看出,应该对它继承的父类AbstractField类有一个了解,下面的是AbstractField类的属性:
protected String name = "body"; protected boolean storeTermVector = false; protected boolean storeOffsetWithTermVector = false; protected boolean storePositionWithTermVector = false; protected boolean omitNorms = false; protected boolean isStored = false; protected boolean isIndexed = true; protected boolean isTokenized = true; protected boolean isBinary = false; protected boolean isCompressed = false; protected boolean lazy = false; protected float boost = 1.0f; protected Object fieldsData = null;
还有Field实现了Fieldable接口,添加了一些对对应的Document中的Field进行管理判断的方法信息。
发表评论
-
Lucene学习(22)
2009-10-30 11:14 883关于FieldInfos类和FieldInfo类。 Fi ... -
Lucene学习(21)
2009-10-30 11:12 846回到IndexWriter索引器类中来,学习该类添加Docum ... -
Lucene学习(20)
2009-10-30 11:06 1032关于Field类和Document类。 ... -
Lucene学习(19)
2009-10-30 11:01 822研究SegmentInfo类的实现 ... -
Lucene学习(18)
2009-10-30 10:47 1875关于SegmentInfos类的具体 ... -
Lucene学习(17)
2009-10-30 10:40 856根据16中对IndexFileDeleter ... -
Lucene学习(16)
2009-10-30 10:33 1072在接触到索引删除的策略IndexDeletionPolicy ... -
Lucene学习(15)
2009-10-30 10:28 876关于索引删除的策略IndexDeletionPolicy 。 ... -
Lucene学习(14)
2009-10-30 10:23 759RAMDirectory类是与内存目录相关的,它和FSDire ... -
Lucene学习(13)
2009-10-30 10:21 1369Directory抽象类比较常用的具体实现子类应该是FSDir ... -
Lucene学习(12)
2009-10-30 10:17 695接着昨天学习的Lucene-2.3.1 源代码阅读学习(11) ... -
Lucene学习(11)
2009-10-30 10:06 1120对数据源进行分析,是为建立索引服务的;为指定的文件建立索引,是 ... -
Lucene学习(10)
2009-10-30 10:02 839Lucene的CJKAnalyzer分析器。 CJKAnal ... -
Lucene学习(9)
2009-10-30 09:34 915Lucene的StandardAnalyzer分析器。 ... -
Lucene学习(8)
2009-10-30 09:27 816Lucene分析器的实现。 Lucene(分词)过滤器Tok ... -
Lucene学习(7)
2009-10-30 09:22 756CharTokenizer是一个抽象类 ... -
Lucene学习(6)
2009-10-29 16:16 861Lucene分析器的实现。 Lucene分词器Tokeniz ... -
Lucene学习(5)
2009-10-29 16:13 898研究Lucene分析器的实现。 Analyzer抽象类 ... -
Lucene学习(4)
2009-10-29 16:09 881建立索引,通过已经生成的索引文件,实现通过关键字检索。 ... -
Lucene学习(2)
2009-10-29 15:59 811IndexWriter是一个非常重要的工具。建立索引必须从它开 ...
相关推荐
【标题】:“Lucene学习资料收集” 【描述】:Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发。这个资料集可能包含了关于如何理解和使用Lucene的各种资源,特别是通过博主huanglz19871030在iteye上的...
**Lucene学习指南** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单的API,使得开发者能够方便地在应用中实现全文检索功能。本篇文章将...
3、配置开发环境 4、创建索引库 5、查询索引库 6、分析器的分析过程 a) 测试分析器的分词效果 b) 第三方中文分析器 7、索引库的维护 a) 添加文档 b) 删除文档 c) 修改文档 Lucene的高级查询、solr入门 solr在项目中...
"lucene学习pdf2" 提供的文档,无疑是对Lucene深入理解的一把钥匙,它涵盖了Lucene的核心概念、操作流程以及高级特性。 首先,Lucene的基础知识是必不可少的。Lucene的核心在于索引和搜索,它将非结构化的文本数据...
本文将主要围绕Java Lucene进行深入探讨,并基于提供的“Lucene学习源码.rar”文件中的“Lucene视频教程_讲解部分源码”展开讨论。 一、Lucene核心概念 1. 文档(Document):Lucene中的基本单位,用于存储待检索...
《Lucene学习资料》 Lucene是一个开源的全文搜索引擎库,由Apache软件基金会维护。它提供了高级的文本分析和索引功能,使得开发者能够轻松地在应用程序中集成强大的搜索功能。这个资料包中的《Lucene in Action_2nd...
本篇文章将围绕"Lucene-2.0学习文档"的主题,结合Indexer.java、MyScoreDocComparator.java和MySortComparatorSource.java这三个关键文件,深入探讨Lucene的核心概念和实际应用。 首先,我们来看`Indexer.java`。这...
**Lucene 3.3.0 学习Demo** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发。在3.3.0版本中,Lucene提供了强大的文本搜索功能,包括分词、索引创建、查询解析和结果排序等。这个"Lucene3.3.0学习Demo...
【标题】:“Lucene学习-02” 在深入探讨“Lucene学习-02”这一主题之前,我们先来理解一下Lucene的核心概念。Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,广泛应用于各种搜索引擎和信息检索系统。...
**Lucene.net学习帮助文档** Lucene.net是一个开源全文搜索引擎库,它是Apache Lucene项目的一部分,专门针对.NET Framework进行了优化。这个压缩包包含了Lucene.net的源码和中文学习文档,旨在帮助开发者深入理解...
lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子程序.txt 关于lucene2.0的创建、检索和删除功能...
【Lucene 3.6 学习笔记】 Lucene 是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发。本文将深入探讨Lucene 3.6版本中的关键概念、功能以及实现方法。 ### 第一章 Lucene 基础 #### 1.1 索引部分的核心...
对于想要深入学习Lucene3或者需要解决相关问题的开发者,可以访问提供的博客链接获取更详尽的信息。在实际使用过程中,建议参考最新版本的Lucene,因为新版本通常会修复已知问题并提供更多的功能和优化。
《Lucene 4.8学习指南与实战案例分析》 Lucene是一个强大的全文搜索引擎库,由Apache软件基金会开发,主要用于Java环境。版本4.8在功能和性能上都有显著提升,是许多开发者进行文本检索应用开发的重要工具。本文将...
**Lucene学习工具包** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。这个"Lucene学习工具包.zip"包含了学习Lucene所需的重要资料和资源,旨在帮助开发者深入理解和掌握Lucene的核心概念、功能...
通过这些学习资料,读者可以系统地学习搜索引擎的理论基础,掌握Lucene的核心功能,同时也能了解到如何在实际项目中应用这些技术,提升搜索系统的性能和用户体验。这些知识对于从事信息检索、网站开发、大数据分析等...