`
twh1224
  • 浏览: 96018 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Lucene学习(2)

阅读更多
IndexWriter是一个非常重要的工具。建立索引必须从它开始。而且,从它的构造函数开始。

Document和Field是Lucene中两个最重要的概念。在建立索引的时候,也就是实例化一个索引器IndexWriter的之前,必须通过已经建立好的Document逻辑文件,将Document的对象添加到IndexWriter实例中,才能算是建立索引。

Document汇集数据源,这个数据源是通过Field来构造的。构造好Field之后,将每个Field对象加入到Document之中,可以通过Document来管理Field,然后将聚集的Document加入到IndexWriter中,建立索引,写入指定的Directory,为检索做准备。

写一个建立索引,然后读取索引的例子,代码如下:
package org.shirdrn.lucene; 
 
import java.io.File; 
import java.io.IOException; 
 
import org.apache.lucene.analysis.standard.StandardAnalyzer; 
import org.apache.lucene.document.Document; 
import org.apache.lucene.document.Field; 
import org.apache.lucene.index.CorruptIndexException; 
import org.apache.lucene.index.IndexReader; 
import org.apache.lucene.index.IndexWriter; 
import org.apache.lucene.store.LockObtainFailedException; 
 
public class MyIndexWriter { 
public static void main(String[] args){ 
   File myFile = new File("E:\\Lucene\\myindex"); 
   try { 
    Document myDoc = new Document(); 
    Field myFieldNo = new Field("myNo","SN-BH-19830119",Field.Store.YES,Field.Index.UN_TOKENIZED); 
    Field myFieldName = new Field("myName","家园使者",Field.Store.YES,Field.Index.UN_TOKENIZED); 
    Field myFieldGender = new Field("myGender","男",Field.Store.YES,Field.Index.UN_TOKENIZED); 
    Field myFieldDescb = new Field("myDescb","家园族长",Field.Store.YES,Field.Index.UN_TOKENIZED); 
    myDoc.add(myFieldNo); 
    myDoc.add(myFieldName); 
    myDoc.add(myFieldGender); 
    myDoc.add(myFieldDescb); 
    Field hisFieldNo = new Field("hisNo","SN-BH-19860101",Field.Store.YES,Field.Index.UN_TOKENIZED); 
    Field hisFieldName = new Field("hisName","爱刮的风",Field.Store.YES,Field.Index.UN_TOKENIZED); 
    Field hisFieldGender = new Field("hisGender","女",Field.Store.YES,Field.Index.UN_TOKENIZED); 
    Field hisFieldDescb = new Field("hisDescb","风尘族长",Field.Store.YES,Field.Index.UN_TOKENIZED); 
    myDoc.add(hisFieldNo); 
    myDoc.add(hisFieldName); 
    myDoc.add(hisFieldGender); 
    myDoc.add(hisFieldDescb); 
    IndexWriter myWriter = new IndexWriter(myFile,new StandardAnalyzer(),true);    //   构造一个索引器,true指定了:向已经存在的索引中追加索引 
    myWriter.addDocument(myDoc); 
    myWriter.close();    // 关闭索引器,将追加的索引文件写入到索引目录中 
    IndexReader myReader = IndexReader.open(myFile);    // 读取索引 
    for(int i=0;i<myReader.numDocs();i++){ 
     System.out.println(myReader.document(i));    //   输出索引文件的信息 
    } 
   } catch (CorruptIndexException e) { 
    e.printStackTrace(); 
   } catch (LockObtainFailedException e) { 
    e.printStackTrace(); 
   } catch (IOException e) { 
    e.printStackTrace(); 
   } 
} 
 
} 

这里,使用File myFile = new File("E:\\Lucene\\myindex");作为一个参数来构造一个索引器。

运行程序,可以在目录E:\Lucene\myindex下看到生成的索引文件,一共有三个文件:

_0.cfs

segments.gen

segments_3

第一个是.cfs格式的,成为复合索引格式;第三个segments_3是一个索引段。

因为上面程序中使用了IndexReader,先打开索引文件,然后通过IndexReader的document()来读取索引文件的内容。

Field是由Document来管理维护的,上面的那个构造方法,第一个参数是Field的名称,如果没有这样一个标识,Document怎么找到它从而对它维护呢。

第二个参数是该Field的内容(一般来说是文本),可能在建立索引的时候对其处理,比如分词就是很重要的一项(是否分词要看第三、四个参数如何设置)。

后面的参数数关于该Field是否存储,以及是否分词。

现在只是将Field添加到Document中进行预处理,离建立索引还很远。真正建立索引是从一个Document添加到IndexWriter中开始的,即在此基础上IndexWriter初始化,这时,便调用了它的init方法,在init方法中调用了DocumentWiter类的 addDocument()方法,才开始建立索引了。

Lucene建立索引的过程是相当复杂的,它要把已经添加到Document中的Field在内存中调出来,通过FieldInfos来实现进一步的处理。
分享到:
评论

相关推荐

    lucene学习pdf2

    "lucene学习pdf2" 提供的文档,无疑是对Lucene深入理解的一把钥匙,它涵盖了Lucene的核心概念、操作流程以及高级特性。 首先,Lucene的基础知识是必不可少的。Lucene的核心在于索引和搜索,它将非结构化的文本数据...

    lucene学习资料收集

    【标题】:“Lucene学习资料收集” 【描述】:Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发。这个资料集可能包含了关于如何理解和使用Lucene的各种资源,特别是通过博主huanglz19871030在iteye上的...

    Lucene的的学习资料及案例

    **Lucene学习指南** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单的API,使得开发者能够方便地在应用中实现全文检索功能。本篇文章将...

    lucene学习

    2、Lucene实现全文检索的流程 a) 创建索引 b) 查询索引 3、配置开发环境 4、创建索引库 5、查询索引库 6、分析器的分析过程 a) 测试分析器的分词效果 b) 第三方中文分析器 7、索引库的维护 a) 添加文档 b) 删除文档 ...

    Lucene学习源码.rar

    本文将主要围绕Java Lucene进行深入探讨,并基于提供的“Lucene学习源码.rar”文件中的“Lucene视频教程_讲解部分源码”展开讨论。 一、Lucene核心概念 1. 文档(Document):Lucene中的基本单位,用于存储待检索...

    lucene学习资料

    《Lucene学习资料》 Lucene是一个开源的全文搜索引擎库,由Apache软件基金会维护。它提供了高级的文本分析和索引功能,使得开发者能够轻松地在应用程序中集成强大的搜索功能。这个资料包中的《Lucene in Action_2nd...

    Lucene-2.0学习文档

    本篇文章将围绕"Lucene-2.0学习文档"的主题,结合Indexer.java、MyScoreDocComparator.java和MySortComparatorSource.java这三个关键文件,深入探讨Lucene的核心概念和实际应用。 首先,我们来看`Indexer.java`。这...

    Lucene3.3.0学习Demo

    **Lucene 3.3.0 学习Demo** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发。在3.3.0版本中,Lucene提供了强大的文本搜索功能,包括分词、索引创建、查询解析和结果排序等。这个"Lucene3.3.0学习Demo...

    lucene学习-02

    【标题】:“Lucene学习-02” 在深入探讨“Lucene学习-02”这一主题之前,我们先来理解一下Lucene的核心概念。Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,广泛应用于各种搜索引擎和信息检索系统。...

    Lucene.net学习帮助文档

    **Lucene.net学习帮助文档** Lucene.net是一个开源全文搜索引擎库,它是Apache Lucene项目的一部分,专门针对.NET Framework进行了优化。这个压缩包包含了Lucene.net的源码和中文学习文档,旨在帮助开发者深入理解...

    【大搜集:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子程序.txt 关于lucene2.0...

    Lucene 3.6 学习笔记

    【Lucene 3.6 学习笔记】 Lucene 是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发。本文将深入探讨Lucene 3.6版本中的关键概念、功能以及实现方法。 ### 第一章 Lucene 基础 #### 1.1 索引部分的核心...

    lucene4.8学习资料和案例

    2. 代码示例:通过分析提供的"lucene4.8学习资料和案例"压缩包,可以深入了解Lucene的实践操作,如创建索引、执行查询、处理结果等。 3. 在线教程:网络上有许多优秀的Lucene教程,如《Lucene in Action》一书的在线...

    Lucene学习工具包.zip

    **Lucene学习工具包** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。这个"Lucene学习工具包.zip"包含了学习Lucene所需的重要资料和资源,旨在帮助开发者深入理解和掌握Lucene的核心概念、功能...

    搜索引擎lucene学习资料

    通过这些学习资料,读者可以系统地学习搜索引擎的理论基础,掌握Lucene的核心功能,同时也能了解到如何在实际项目中应用这些技术,提升搜索系统的性能和用户体验。这些知识对于从事信息检索、网站开发、大数据分析等...

    lucene学习总结

    **Lucene学习总结** 在深入理解Lucene之前,我们首先需要了解什么是全文检索。全文检索是一种从大量文本数据中快速查找所需信息的技术。它通过建立索引来实现高效的搜索,而Lucene正是Java环境下最著名的全文搜索...

Global site tag (gtag.js) - Google Analytics