`
tmj_159
  • 浏览: 705873 次
  • 性别: Icon_minigender_1
  • 来自: 永州
社区版块
存档分类
最新评论

Lucene

 
阅读更多

Lucene 是apache软件基金会的一个开源项目,它是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,以及文本分析引擎,它可以很方便的让开发人员在自己的项目中实现全文检索的功能。

 

很久前都听说过lucene,也简单的了解过,但是项目没有需要就一直没有仔细研究下,现在刚好有这个需求,本来应该研究Solr的,但是Solr是基于Lucene的扩展,不了解Lucene就直接开始看Solr就算能看懂也是很浅层次的,于是开始行动,我选择的lucene版本是新的4.10.3。

 

说到这里,扫盲下什么全文检索。

全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法。

 

我的一句话理解是:通过建立的文本文件索引去快速查找文本内容的一种技术。

所以,简单来看这种技术有两种动作,一、建索引,二,根据索引查找。

 

今天想了解的,是两者都会用到的中间结果-索引文件,放哪里和如何使用。

除了官网文档之外没有多余的电子文档,也没有书,只是去下了源码,塞到eclipse去跑了下例子。

接下来直接看源码和文档。

 

看网上有很多讨论各种中文分词器的时候,在项目中看到了有ChineseAnalyzer,以为标准的 StandarAnalyzer不支持中文呢,结果经过测试发现已经支持了,只是要注意你的中文文档的编码,API文档上也说明了,怪自己偷懒 。

 

例子中的IndexFiles 和SearchFiles已经很强大,也写的很清楚了。接口很简单,给个文档路径告诉lucene给那个文件夹下的文档建立索引,然后再个文件夹告诉lucene索引文件放哪个文件夹下就算配置完了。

 

有了Eclipse 和源码,不喜欢用命令行的方式运行例子的方法,相反我写了一个简单的类去跑这两个例子。

package org.apache.lucene.demo;

public class MyTest {
	static final String index_path = "D:\\workspace\\lucene_index";
	static final String docs_path = "D:\\workspace\\lucene_docs";

	public static void main(String[] args) {
		indexTest();
		searchTest();
	}

	public static void indexTest() {
		IndexFiles.main(new String[] { "-docs", docs_path, "-index",
				index_path, "-update" });

	}

	public static void searchTest() {
		try {
			SearchFiles.main(new String[] { "-query", "contents:王重阳", "-index",
					index_path });
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

如果专注于索引文件的存储,会发现例子中用了FSDirectory的类来完成索引文件的存放。看看API 文档找出相关的类和说明。

 1. Directory 顶层的抽象类

public abstract class Directory extends Object implements Closeable

 Directory 系列的根类,定义了最基本的行为。

//删除文件
public abstract void deleteFile(String name)
       throws IOException;

//创建一个新的,空的文件,返回一个文件输出流(写文件)
public abstract IndexOutput createOutput(String name, IOContext context)
       throws IOException;

//返回一个文件的输入流(读文件)
public abstract IndexInput openInput(String name, IOContext context) throws IOException;

 

2. BaseDirectory 

    Directory 的基本实现, 后面还有分支。

public abstract class BaseDirectory extends Directory

    其实里面只实现了有关Lock的东西,其它的基本没有做。 

 

3. FilterDirectory

    Directory 的扩展分支,被用来对已经存在的Directory类添加限制,比如说rate, limiting。

public class FilterDirectory extends Directory

    子类先不讨论//TODO

 

4. CompoundFileDirectory

    访问组合的流。//TODO

public final class CompoundFileDirectory extends BaseDirectory

 

5. FileSwitchDirectory

    可以在两个不同的Directory实例中做switch文件

public class FileSwitchDirectory extends BaseDirectory

    听起来不错,什么情况下会用呢?

 

6. FSDirectory

    在文件系统中存储索引文件的一种方法,是目前使用的最多的,有以下三个子类。

    6.1 SimpleFSDirectory

    利用java.io.RandomAccessFile来实现的,但是在多线程并发读文件的时候性能不好。

    6.2 NIOFSDirectory

    利用java.nio FileChannel 的Positional io来实现的异步IO的读取,不幸的是在Windows下的SUM JRE有个BUG表示这不是一种好的方法,但是在其它平台来看的话是首选。

    6.3 MMapDirectory

    利用memory-mapped 来完成读文件,如果你有大量的虚拟内存的话(和你的索引大小相当),这将是一个好的选择。

 

    因为不同的系统的特殊性,没有一个可以覆盖所有情况的实现,所以添加了一个open(java.io.Fle)的方法来让Lucene来根据你的环境选择一个最好的Directory实现,所以建议对使用lucene的开发人员来说,没有理由去自己选择一个特殊的实现。

 

分享到:
评论

相关推荐

    Lucene时间区间搜索

    Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及...

    lucene,lucene教程,lucene讲解

    lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....

    lucene-4.7.0全套jar包

    【Lucene 4.7.0 全套JAR包详解】 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。它提供了一个高级、灵活的文本搜索API,允许开发者轻松地在应用程序中实现复杂的搜索功能。这次提供的“lucene-...

    Lucene3.5源码jar包

    本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...

    Lucene示例 BM25相似度计算

    在IT领域,搜索引擎技术是至关重要的,而Lucene作为一个开源全文搜索引擎库,广泛应用于各种文本检索系统中。本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、...

    lucene in action 2nd edition, lucene in action 第二版 PDF

    《Lucene in Action 第二版》是一本深入探讨Apache Lucene全文检索库的专业书籍,它在Java开发领域具有很高的权威性。这本书详细介绍了如何利用Lucene进行高效的文本搜索和索引构建,是Java开发者和信息检索爱好者的...

    Lucene与关系型数据库对比

    《Lucene与关系型数据库对比:深度解析与应用探索》 在信息爆炸的时代,数据管理和检索成为了企业乃至个人日常工作中不可或缺的部分。随着技术的发展,不同的数据处理方式应运而生,其中Lucene与关系型数据库作为两...

    计算机专业外文翻译(lucene相关)

    "计算机专业外文翻译(lucene相关)" 本文翻译了论文"Scale-up x Scale-out: A Case Study using Nutch/Lucene",介绍了计算机专业领域中关于Lucene相关的知识点。 Scale-up vs Scale-out 论文中讨论了两个相对...

    lucene-core-7.2.1-API文档-中文版.zip

    赠送jar包:lucene-core-7.2.1.jar; 赠送原API文档:lucene-core-7.2.1-javadoc.jar; 赠送源代码:lucene-core-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.2.1.pom; 包含翻译后的API文档:lucene...

    lucene.NET 中文分词

    **Lucene.NET 中文分词技术详解** Lucene.NET 是一个高性能、全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个开源的搜索引擎框架,Lucene.NET为开发者提供了强大的文本搜索功能。而在处理中文文档...

    lucene-core-7.7.0-API文档-中文版.zip

    赠送jar包:lucene-core-7.7.0.jar; 赠送原API文档:lucene-core-7.7.0-javadoc.jar; 赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene...

    lucene3源码分析

    ### Lucene3源码分析知识点概述 #### 一、全文检索的基本原理 ##### 1. 总论 全文检索系统是一种高效的信息检索技术,能够帮助用户在海量文档中快速找到包含特定关键词的信息。Lucene是Java领域内最受欢迎的全文...

    lucene所有的jar包

    《全面解析Lucene jar包:从基础到应用》 在信息技术高速发展的今天,搜索引擎已经成为我们获取信息不可或缺的工具。在Java领域,Lucene作为一个强大的全文搜索引擎库,深受开发者喜爱。本文将详细介绍“lucene所有...

    Lucene中的FST算法描述

    在信息检索和存储系统中,Lucene是一个开源的全文搜索引擎库,广泛应用于各种需要全文搜索功能的软件项目中。为了高效地处理和检索存储的词项(term),Lucene使用了FST(有限状态转换器,Finite State Transducer)...

    Lucene 5 主要jar包

    Apache Lucene是一个开源全文搜索引擎库,它为Java开发者提供了强大的文本搜索功能。在这个"Lucene 5 主要jar包"中,我们找到了一系列与Lucene 5.0.0相关的jar文件,这些文件是构建和运行基于Lucene的搜索应用程序的...

    Lucene的原理完整版pdf

    **Lucene原理详解** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单但功能强大的API,用于索引和搜索文本数据,使得开发者可以轻松地在...

    lucene实例lucene实例

    《Lucene实战:深入解析与应用》 Lucene,作为Apache软件基金会的开源全文检索库,是Java领域中广泛使用的搜索引擎框架。它提供了强大的文本分析、索引和搜索功能,被许多大型项目采用,如Elasticsearch、Solr等。...

    基于lucene技术的增量索引

    **基于Lucene技术的增量索引** 在信息技术领域,全文搜索引擎是处理大量数据查询的关键工具。Apache Lucene是一个开源的全文检索库,被广泛应用于构建高效、可扩展的搜索功能。本文将深入探讨如何利用Lucene实现...

    lucene 对 xml建立索引

    ### Lucene对XML文档建立索引的技术解析与实践 #### 一、引言 随着互联网技术的迅猛发展,非结构化数据(如XML文档)在企业和组织中的应用日益广泛。如何高效地处理这些非结构化的数据,特别是进行快速检索成为了一...

Global site tag (gtag.js) - Google Analytics