`
trix
  • 浏览: 84877 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lucene 2.0 学习文档1

阅读更多
作者:Javafish(likunkun)

Email:javafish@sunxin.org

原帖:http://www.iteye.com/post/190334


Lucene是apache组织的一个用java实现全文搜索引擎的开源项目。

其功能非常的强大,api也很简单。总得来说用Lucene来进行建立

和搜索和操作数据库是差不多的(有点像),Document可以看作是

数据库的一行记录,Field可以看作是数据库的字段。用lucene实

现搜索引擎就像用JDBC实现连接数据库一样简单。




Lucene2.0,它与以前广泛应用和介绍的Lucene 1.4.3并不兼容。


Lucene2.0的下载地址是http://apache.justdn.org/lucene/java/


大家先看一个例子,通过这个例子来对lucene的一个大概的认识。

一个Junit测试用例:(为了让代码清晰好看,我们将异常都抛出)

a)    这是一个建立文件索引的例子

public void testIndexHello() throws IOException

    {

        Date date1 = new Date();

        //可以说是创建一个新的写入工具

        //第一个参数是要索引建立在哪个目录里

        //第二个参数是新建一个文本分析器,这里用的是标准的大家也可以自己写一个

        //第三个参数如果是true,在建立索引之前先将c:\\index目录清空。

        IndexWriter writer = new IndexWriter("c:\\index",new StandardAnalyzer(),true);

       

//      这个是数据源的文件夹

        File file = new File("c:\\file");

        /**

         * 例子主要是将C:\\file目录下的文件的内容进行建立索引,将文件路径作为搜索内容的附属.

         */

       

        if(file.isDirectory())

        {

            String[] fileList = file.list();

            for (int i = 0; i < fileList.length; i++)

            {

//              建立一个新的文档,它可以看作是数据库的一行记录

                Document doc = new Document();

                File f = new File(file,

                        fileList[i]);

                Reader reader = new BufferedReader(new FileReader(f));

                doc.add(new Field("file",reader));//为doument添加field

                doc.add(new Field("path",f.getAbsolutePath(),Field.Store.YES,Field.Index.NO));

                writer.addDocument(doc);

            }

           

        }

        writer.close();//这一步是必须的,只有这样数据才会被写入索引的目录里

        Date date2 = new Date();

        System.out.println("用时"+(date2.getTime()-date1.getTime())+"毫秒");

}

注意:因为建立索引本来就是费时,所以说最后输出的用时会比较长,请不要奇怪。

b)一个通过索引来全文检索的例子

public void HelloSearch() throws IOException, ParseException

    {

        IndexSearcher indexSearcher = new IndexSearcher("c:\\index");//和上面的IndexWriter一样是一个工具

        QueryParser queryParser = new QueryParser("file",//这是一个分词器

                new StandardAnalyzer());

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        Query query = queryParser.parse(br.readLine());//这个地方Query是抽象类大家也注意一下,下面会讲到的

        Hits hits = indexSearcher.search(query);

        Document doc = null;

        System.out.print("正搜索................");

        for (int i = 0; i < hits.length(); i++)

        {

            doc = hits.doc(i);

            System.out.println("内容是:"+doc.get("file"));//注意这里输出的是什么

            System.out.println("文件的路径是:" + doc.get("path"));

        }

    }

通过上面的两个例子应该可以看出Lucene还是比较简单的。

运行一下上面的两个例子,大家可能会说怎么doc.get(“file”);返回的是空呢,我们马上会讲到。

下面讲一下索引的建立

其实从上面的例子就可以看出建立索引就用到Document,IndexWriter,Field。

最简单的步骤就是:

首先分别new 一个Document,IndexWriter,Field

然后用Doument.add()方法加入Field,

其次用IndexWrtier.addDocument()方法加入Document。

最后调用一下IndexWriter.close()方法关闭输入索引,这一步非常的重要只有调用这个方法索引才会被写入索引的目录里,而这是被很多初学的人所忽略的。

Document没有什么好介绍的,把它的作用看成数据库中的一行记录就行。

Field是一个比较重要的也是比较复杂的:

看一下它的构造函数有5个:

Field(String name, byte[] value, Field.Store store)

Field(String name, Reader reader)

Field(String name, Reader reader, Field.TermVector termVector)

Field(String name, String value, Field.Store store, Field.Index index)

Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector)

在Field中有三个内部类:Field.Index,Field.Store,Field.termVector,而构造函数也用到了它们。

注意:termVector是Lucene 1.4新增的它提供一种向量机制来进行模糊查询的这个不常用,默认是false不过是什么对于一般查询无影响。

它们的不同的组合,在全文检索中有着不同的作用。看看下面的表吧:

Field.Index
Field.Store
说明

TOKENIZED(分词)
YES
文章的标题或内容(如果是内容的话不能太长)是可以被搜索的

TOKENIZED
NO
文章的标题或内容(内容可以很长)也是可以被看过的

NO
YES
这是不能被搜索的,它只是被搜索内容的附属物。如URL等

UN_TOKENIZED
YES/NO
不被分词,它作为一个整体被搜索,搜一部分是搜不出来的

NO
NO
没有这种用法


而对于Field(String name, Reader reader)

Field(String name, Reader reader, Field.TermVector termVector)

他们是Field.Index.TOKENIZED和Field.Store.NO的。这就是为什么我们在上面的例子中会出现文章的内容为null了。因为它只是被索引了,而并没有被存储下来。如果一定要看到文章的内容的话可以通过文章的路径得到毕竟文章的路径是作为搜索的附属物被搜索出来了。而我们在Web开发的时候一般是将大数据放在数据库中,不会放在文件系统中,更不会放在索引目录里,因为它太大了操作会加大服务器的负担。

下面介绍一下IndexWriter:

它就是一个写入索引的写入器,它的任务比较简单:

1.用addDocument()将已经准备好写入索引的document们加入

2.调用close()将索引写入索引目录

先看一下它的构造函数:

IndexWriter(Directory d, Analyzer a, boolean create)

分享到:
评论

相关推荐

    Lucene-2.0学习文档

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

    重要lucene2.0 学习文档

    2006 年 6 月 1 日发布的 Lucene 2.0,其下载地址是 http://apache.justdn.org/lucene/java/。 下面通过两个示例来进一步理解 Lucene 的工作原理: **建立文件索引:** ```java public void testIndexHello() ...

    lucene 2.0 api以及lucene 3.0 api

    同样,`lucene-2.0.CHM` 文件则提供了 Lucene 2.0 的 API 文档,尽管旧版本,但依然能为那些需要维护旧系统或对比学习的开发者提供参考。 总的来说,从 Lucene 2.0 进化到 3.0,主要变化在于性能提升、查询功能增强...

    lucene2.0与其分词工具包

    《Lucene 2.0及其分词工具包详解》 Lucene是一款由Apache软件基金会开发的全文搜索引擎库,专门用于信息检索。它以其强大的搜索功能和高效的性能在...尽管年代久远,Lucene 2.0仍不失为一个值得研究和学习的经典案例。

    开发自己的搜索引擎《lucene2.0+heritrix》一书对应的源码资料

    这里我们关注的是基于开源项目Lucene 2.0和Heritrix的一本书——《开发自己的搜索引擎》的源码资料。Lucene是一个高性能、全文本搜索库,而Heritrix则是一个强大的网页抓取工具,它们共同构成了搜索引擎的基础架构。...

    lucene2.0+Heritrix配套源码

    《lucene2.0+Heritrix配套源码》是一个针对搜索引擎开发的资源包,包含了构建自定义搜索引擎所需的关键组件。Lucene是一个流行的全文搜索引擎库,而Heritrix则是一个强大的网页抓取工具,用于收集互联网上的数据。这...

    开发自己的搜索引擎Lucene2.0+Heritrix

    ### 开发自己的搜索引擎:Lucene ...通过上述介绍,我们不仅了解了 Lucene 和 Heritrix 的基本功能,还学习了如何利用这两个工具构建一个完整的搜索引擎系统。这对于任何希望开发搜索引擎的人来说都是非常宝贵的资源。

    lucene-2.0

    该版本发布于2006年,虽然现在已经有了更新的版本,但Lucene 2.0仍然是许多遗留系统和学习全文检索技术的重要参考。 1. **Lucene的基本架构** Lucene的核心架构包括了索引和查询两个主要部分。索引阶段,Lucene将...

    Lucene2.0+Heritrix(源代码)

    总之,通过研究"Lucene2.0+Heritrix"的源代码,开发者不仅可以学习到搜索引擎的基础原理,还能掌握实际操作中的技巧和经验。这是一条通向构建个性化、高效搜索引擎的道路,对于从事信息检索、大数据分析和网站运营的...

    Lucene.2.0.API

    这份API文档以CHM(Compiled Help Manual)格式呈现,便于开发者快速查阅和学习。 在Lucene 2.0中,主要的知识点包括以下几个核心模块: 1. **索引模块**:这是Lucene的基础,用于构建和管理全文索引。主要包括`...

    《开发自己的搜索引擎-Lucene 2.0 Heritrix》cd(全)(下载地址)

    通过学习Lucene 2.0和Heritrix的相关知识,我们可以构建出一个简单的搜索引擎。首先使用Heritrix爬取目标网站的内容,然后通过Lucene 2.0对这些内容进行索引和搜索。虽然这只是一个基础框架,但它为理解搜索引擎的...

    Lucene 2.0+Heriterx书源代码-ch7lib

    1. Lucene的核心库:如lucene-core.jar,包含了Lucene的基本类和接口,如Document、Field、Analyzer和IndexWriter等。 2. 分析器库:如lucene-analyzers.jar,提供了各种语言的分词器,用于将文本拆分成可索引的单元...

    Lucene.Net 2.0 源码+文档

    总的来说,"Lucene.Net 2.0 源码+文档"是学习和研究全文检索技术的宝贵资料,无论是对.NET开发人员还是对信息检索感兴趣的人员,都能从中获益匪浅。通过深入研究源码和文档,你可以掌握如何利用Lucene.Net构建高效...

    Lucene2.0+Nutch0.8 API帮助文档(CHM格式)

    《Lucene2.0+Nutch0.8 API帮助文档》是一个综合性的技术资源,它包含了对Lucene 2.0和Nutch 0.8这两个关键的开源搜索引擎库的详细接口和功能说明。这两个组件在信息检索、全文搜索以及网络爬虫领域有着广泛的应用。 ...

    lucene2.0+heritrix 随书光盘

    《lucene2.0+heritrix 随书光盘》是针对搜索引擎技术的一个资源集合,其中包含了Lucene 2.0和Heritrix的相关示例及教程。Lucene是一款强大的全文检索库,而Heritrix则是一个互联网爬虫工具,它们在构建搜索引擎时起...

    Lucene2.0+Heritrix搜索引擎 随书光盘

    《Lucene2.0+Heritrix搜索引擎》随书光盘包含了两个重要的开源搜索技术——Apache Lucene 2.0和Heritrix的资源和教程。Lucene是Java开发的全文检索库,而Heritrix则是一个网络爬虫工具,它们在构建大规模搜索引擎和...

    Lucene2.0+Heritrix(ch4源代码)

    《深入理解Lucene 2.0与Heritrix:源码剖析及应用实践》 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。它提供了高效的索引和搜索功能,广泛应用于各种信息检索系统。Heritrix是互联网档案馆...

    Lucene2.0实例

    但作为入门实例,这个"Lucene2.0实例"应该会从最基本的层面教你如何启动并运行一个简单的搜索应用。通过学习并实践这些基础操作,你可以逐步掌握Lucene的核心功能,为进一步深入学习和开发更复杂的搜索系统奠定基础...

    【完整光盘24.5M】开发自己的搜索引擎-Lucene 2.0+Heritrix.zip

    1. **Lucene核心概念**:理解文档、字段、术语、倒排索引、Posting List、Term Dictionary等基本概念。 2. **文本分析**:学习如何使用Analyzer进行文本预处理,包括分词、去除停用词、词形还原等。 3. **索引构建**...

    Lucene.net 2.0 API + DLL 下载

    另外,`Lucene.Net-2.0.doc.zip`文件可能包含的是关于Lucene.NET 2.0的文档资料,可能包括API参考、用户指南、示例代码等,对于学习和掌握这个版本的API非常有帮助。通过阅读这些文档,开发者可以理解如何初始化搜索...

Global site tag (gtag.js) - Google Analytics