`
zm2011
  • 浏览: 39105 次
社区版块
存档分类
最新评论

lucene的创建索引

阅读更多
本人用的是lucene3.4,由于刚接触lucene不就,如果有不正当的地方请大家指出。

要想对数据进行检索,首先对数据进行索引,这样当搜索时才能够根据索引找到信息。
Directory directory = FSDirectory.open(new File("d:\\lucene"));
			//IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_34, new StandardAnalyzer(Version.LUCENE_34, stopWords)));
			IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_34, new StandardAnalyzer(Version.LUCENE_34));
			//最大缓存文档数,控制写入一个新的segment前内存中保存的document的数目
			config.setMaxBufferedDocs(100);
			//控制一个segment中可以保存的最大document数目,值较大有利于追加索引的速度,默认Integer.MAX_VALUE,无需修改。
			config.setMaxBufferedDocs(Integer.MAX_VALUE);
			IndexWriter indexWriter = new IndexWriter(directory, config);
			
			
			Document doc = new Document();
			
			//设置Field的name是为了搜索时更精确,比如只想在title中搜索。
			Field idField = new Field("id", blog.getId() + "", Field.Store.YES, Field.Index.NO);
			Field titleField = new Field("title", blog.getTitle(), Field.Store.YES, Field.Index.ANALYZED);
			Field contentField = new Field("content", blog.getContent(), Field.Store.NO, Field.Index.ANALYZED);
			Field dateField = new Field("date", blog.getDate(), Field.Store.YES, Field.Index.NO);
			
			doc.add(titleField);
			doc.add(contentField);
			doc.add(idField);
			doc.add(dateField);
			//将document加入到indexwriter中以便写入索引文件
			indexWriter.addDocument(doc);
			//对所有的segment做优化,使所有的segments合并为一个。
			indexWriter.optimize();
			indexWriter.close();

第一行是在本地磁盘创建一个索引文件所在的位置。FSDirectory是指在硬盘创建索引。
document代表一条记录,比如数据库中的一条记录。一条记录经过索引之后,就是以一个document的形式存储在索引文件中。
Field代表一个信息域,一个document可以包含多个信息域。Field有两个属性可选:存储和索引。Field.Store.NO :不保存到索引中,Field.Store.YES :保存到索引中。Field.Index.ANALYZED :分词,建立索引
这样一条记录索引就创建好了

以下是创建索引的一些API:

IndexWriter:用于创建和维持一个索引。
其构造函数中的参数”create”用于决定是否创建一个新的索引或者打开一个已经存在的索引。注意:即使有人正在访问一个索引你也可以通过设置create=true来打开一个索引。但先前的访问者只能访问你打开索引这个时间点以前的索引,而不恩那个访问最新的,除非他们再次打开。也有无create参数的构造方法,在这样的构造方法中会判断所设置的路径索引是否已经存在,如果存在则打开,如果不存在则创建。
使用addDocument方法增加document或调用deleteDocuments(Term)/deleteDocuments(Query)删除document,也可以调用updateDocument更新一个document,这个方法是把相应的document删除然后在增加指定的document。当执行完添加、删除或更新操作后应该调用close方法。
以上的方法引起的改变是缓存在内存中的并定期冲刷到目录里(Directory)。当上一次冲刷后所增加的document或所删除的document(setMaxBufferDeleteTerms(int))达到了所设置的缓存则一次新的冲刷被触发。对于添加来说,一次冲刷通过添加document的数量被处罚,或者通过设置RAM使用量(setRAMBufferSizeMB(double))被触发。默认的RAM使用量是16MB,应该设置RAM高点以提高检索速度。注意:冲刷仅仅是把IndexWriter内部的状态传到索引中,但是这些改变对IndexReader是不可见的,除非调用了commit()或close()。也就是说如果添加了一个document但是没有执行close方法,那么通过IndexReader检索时不能检索出刚添加的这个document。当一个或多个segment段合并时,一次冲刷也会被触发,但是是在后台线程执行,以免和addDocument冲突。
如果一次添加的document不多,又希望索引有更高的性能,可以在调用close方法前进行完全优化(optimize)或局部优化optimize(int)。
正在打开着的Indexwriter对索引目录创建了一个锁定文件。那么如果在同一个索引目录打开另一个IndexWriter会抛出LockObtionFailedException。同样的异常也会抛出,如果IndexReader试图在一个已经使用的索引目录中删除document。
IndexWriter是线程安全的,意味着你可以多个线程同时调用自己的方法。

IndexWriterConfig:存储IndexWriter的配置,应该实例化这个类然后传到IndexWriter内。如果需要事后设置属性可以调用IndexWriter.getConfig();所有设置属性的方法都会返回一个IndexWriterConfig对象,所以可以通过设置链进行多个属性的设置。例如conf.setter1().setter2();

Directory:是一个文件列表,当文件被创建的时候会被写入到此目录。

Document是索引或检索的单元。一个Document是一个fields集合。每个field有一个名字和一个文本值。一个field可以通过一个document存储,这时,field通过检索hits中的document返回,这样每个document包含只属于自己的一个或多个field。

Field:是document的一部分,包括一个name和一个值。值可以是自由文本、字符串、或Reader
分享到:
评论

相关推荐

    Lucene创建索引步骤

    Lucene创建索引步骤: 1、创建Directory(索引位置) 2、创建IndexWrite(写入索引) 3、创建Document对象 4、为Document添加Field(相当于添加属性:类似于表与字段的关系) 5、通过IndexWriter添加文档到索引中

    Lucene3.0创建索引

    ### Lucene3.0创建索引 在Lucene3.0中创建索引是一个关键功能,可以帮助用户快速地检索和管理大量的文本数据。本篇文章将详细介绍如何使用Lucene3.0来创建索引,并通过一个具体的例子来演示整个过程。 #### 一、...

    Lucene索引创建

    java创建Lucene索引

    lucene索引结构原理

    **Lucene索引结构原理** Lucene是Apache软件基金会的开放源代码全文搜索引擎库,它为Java开发人员提供了强大的文本搜索功能。理解Lucene的索引结构原理对于优化搜索性能和设计高效的搜索应用至关重要。 首先,我们...

    Lucene创建与搜索索引

    本文将重点介绍如何使用Lucene创建索引以及如何基于这些索引进行高效的搜索。 #### 二、创建索引 ##### 2.1 准备工作 在开始之前,我们需要做一些准备工作: - **安装Java环境**:Lucene基于Java开发,因此首先...

    Lucene结合Sql建立索引Demo源码.rar

    Lucene(这里用到的是Lucene.net版本也成为DotLucene)是一个信息检索的函数库(Library),利用它你可以为你的应用加上索引和搜索的功能. Lucene的使用者不需要深入了解有关全文检索的知识,仅仅学会使用库中的一个类,...

    Lucene建索引及查询关键字

    在Eclipse环境中运用java,Lucene建索引及查询关键字

    Lucene建立索引及查询包含“java”关键字 示例代码

    **Lucene创建索引与搜索"java"关键字的示例代码** Apache Lucene是一个高性能、全功能的文本搜索引擎库,广泛应用于各种系统中用于实现高效、精准的全文检索功能。这个示例代码将向我们展示如何使用Lucene来创建一...

    用LUCENE连击MYSQL建立索引并搜索的JAVA代码。

    在这个场景中,我们讨论的是如何结合Lucene和MySQL来实现一个Java应用程序,该程序能够从MySQL数据库中提取数据,创建索引,并进行高效的搜索。 首先,我们需要理解Lucene的工作原理。Lucene通过分析文本,将文档...

    如何将Lucene索引写入Hadoop?

    1. **数据预处理**:首先,需要将原始数据进行预处理,如分词、去除停用词等,然后使用Lucene创建索引。 2. **索引分割**:生成的Lucene索引可能非常大,不适合一次性加载到Hadoop集群。因此,通常会将其分割成多个...

    Lucene5学习之创建索引入门示例

    **Lucene5学习之创建索引入门示例** 在IT领域,搜索引擎的开发与优化是一项关键技术,而Apache Lucene作为一款高性能、全文本搜索库,是许多开发者进行文本检索的首选工具。本文将深入探讨如何使用Lucene5来创建一...

    lucene索引优化多线程多目录创建索引

    本教程主要探讨的是如何利用Lucene进行索引优化,特别是通过多线程和处理多个目录来提高索引创建效率。 首先,我们需要理解Lucene的索引原理。Lucene将文档分解为词项(tokens),并对每个词项创建倒排索引。倒排...

    lucene索引

    本篇文章将深入探讨 Lucene 创建索引的过程以及如何使用 Lucene 进行高效的全文搜索。 ### 1. Lucene 的基本概念 #### 1.1 文档(Document) 在 Lucene 中,文档是信息的基本单位,它可以是网页、电子邮件、数据库...

    Lucene 索引的简单使用

    创建索引 创建Lucene索引的步骤包括: 1. **初始化Directory**:选择存储索引的目录,如FSDirectory(文件系统)、RAMDirectory(内存)等。 2. **创建IndexWriter**:配置IndexWriter实例,指定Directory、...

    基于lucene创建实时索引基础jar包源码

    1) 提供实时索引的创建、管理 2) Query的创建 详细介绍参照博客:http://blog.csdn.net/xiaojimanman/article/details/20624739 中的介绍

    lucene 4.7.2 Demo

    首先,让我们了解如何利用Lucene 4.7.2创建索引。创建索引是全文检索的基础,它涉及将文本数据结构化为Lucene可以理解和查询的形式。开发者可以通过Analyzer类来处理输入的文本,进行分词、去除停用词等预处理步骤。...

    lucene索引的简单使用

    本篇文章将深入探讨如何使用Lucene创建索引以及进行查询,帮助你更好地理解和应用这个强大的工具。 ### 一、Lucene的基本概念 1. **文档(Document)**:在Lucene中,每个需要被搜索的信息单元被视为一个文档。...

    详解SpringBoot+Lucene案例介绍

    站内查询将使用Lucene创建索引,进行全文检索。 二、引入Lucene依赖 要使用Lucene,我们需要在pom文件中引入相关依赖。这些依赖包括: * lucene-core:Lucene的核心包,提供了基本的索引和搜索功能。 * lucene-...

    lucene实现索引查询

    创建索引是Lucene的核心过程,它涉及到以下步骤: 1. **定义索引目录**:首先,你需要指定一个目录来存储索引文件。这通常是一个文件夹,可以通过`File`对象表示,然后使用`FSDirectory.open()`方法打开。 2. **...

    基于lucene技术的增量索引

    - **首次创建索引**:首先,我们需要遍历整个数据源,创建每个文档的实例,然后将这些文档添加到Lucene的索引writer中。完成这一步后,就会生成一个完整的初始索引。 - **监控数据变更**:为了实现增量索引,我们...

Global site tag (gtag.js) - Google Analytics