`

lucene学习笔记5

阅读更多
下面介绍一下几个功能来完善一下:

1.索引格式

其实索引目录有两种格式,一种是除配置文件外,每一个Document独立成为一个文件(这种搜索起来会影响速度)。另一种是全部的Document

成一个文件,这样属于复合模式就快了。

2.索引文件可放的位置:索引可以存放在两个地方1.硬盘,2.内存

放在硬盘上可以用FSDirectory(),放在内存的用RAMDirectory()不过一关机就没了

FSDirectory.getDirectory(File file, boolean create)

FSDirectory.getDirectory(String path, boolean create)
两个工厂方法返回目录

New RAMDirectory()就直接可以

再和IndexWriter(Directory d, Analyzer a, boolean create)一配合就行了

如:

IndexWrtier indexWriter = new IndexWriter(FSDirectory.getDirectory(“c:\\\\index”,true),new StandardAnlyazer(),true);

IndexWrtier indexWriter = new IndexWriter(new RAMDirectory(),new StandardAnlyazer(),true);

3.索引的合并

这个可用IndexWriter.addIndexes(Directory[] dirs)将目录加进去

来看个例子:

public void UniteIndex() throws IOException{

     IndexWriter writerDisk = new IndexWriter(FSDirectory.getDirectory("c:\\\\indexDisk", true),new StandardAnalyzer(),true);

        Document docDisk = new Document();

        docDisk.add(new Field("name","程序员之家",Field.Store.YES,Field.Index.TOKENIZED));

        writerDisk.addDocument(docDisk);

        RAMDirectory ramDir = new RAMDirectory();

        IndexWriter writerRam = new IndexWriter(ramDir,new StandardAnalyzer(),true);

        Document docRam = new Document();

        docRam.add(new Field("name","程序员杂志",Field.Store.YES,Field.Index.TOKENIZED));

        writerRam.addDocument(docRam);

        writerRam.close();//这个方法非常重要,是必须调用的

        writerDisk.addIndexes(new Directory[]{ramDir});

        writerDisk.close();
    }

    public void UniteSearch() throws ParseException, IOException{

QueryParser queryParser = new QueryParser("name",new StandardAnalyzer());

Query query = queryParser.parse("程序员");

        IndexSearcher indexSearcher =new IndexSearcher("c:\\\\indexDisk");

        Hits hits = indexSearcher.search(query);

        System.out.println("找到了"+hits.length()+"结果");

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

            Document doc = hits.doc(i);

            System.out.println(doc.get("name"));

        }

    }




这个例子是将内存中的索引合并到硬盘上来.

注意:合并的时候一定要将被合并的那一方的IndexWriter的close()方法调用。

4.对索引的其它操作:

IndexReader类是用来操作索引的,它有对Document,Field的删除等操作。

下面一部分的内容是:全文的搜索

全文的搜索主要是用:IndexSearcher,Query,Hits,Document(都是Query的子类),有的时候用QueryParser

主要步骤:

1.new QueryParser(Field字段,new 分析器)

2.Query query = QueryParser.parser(“要查询的字串”);这个地方我们可以用反射api看一下query究竟是什么类型

3.new IndexSearcher(索引目录).search(query);返回Hits

4.用Hits.doc(n);可以遍历出Document

5.用Document可得到Field的具体信息了。

其实1 ,2两步就是为了弄出个Query 实例,究竟是什么类型的看分析器了。

拿以前的例子来说吧

QueryParser queryParser = new QueryParser("name",new StandardAnalyzer());

        Query query = queryParser.parse("程序员");

/*这里返回的就是org.apache.lucene.search.PhraseQuery*/

        IndexSearcher indexSearcher =new IndexSearcher("c:\\\\indexDisk");

        Hits hits = indexSearcher.search(query);

不管是什么类型,无非返回的就是Query的子类,我们完全可以不用这两步直接new个Query的子类的实例就ok了,不过一般还是用
这两步因为它返回的是PhraseQuery这个是非常强大的query子类它可以进行多字搜索用QueryParser可以设置各个关键字之间的关系
这个是最常用的了。

IndexSearcher:

**注意**:其实IndexSearcher它内部自带了一个IndexReader用来读取索引的,IndexSearcher有个close()方法,这个方法不是用来关闭IndexSearcher

的是用来关闭自带的IndexReader。

QueryParser呢可以用parser.setOperator()来设置各个关键字之间的关系(与还是)它可以自动通过空格从字串里面将关键字分离出来。

注意:用QueryParser搜索的时候分析器一定的和建立索引时候用的分析器是一样的。
分享到:
评论

相关推荐

    Lucene 学习笔记 1

    **Lucene 学习笔记 1** Lucene 是一个全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够在其应用程序中集成高级的搜索功能。本篇学习笔记将深入探讨 Lucene 的...

    Lucene学习笔记.doc

    【Lucene学习笔记】 Lucene是一个高性能、全文检索的开源库,完全用Java编写,能够帮助开发者在应用程序中实现复杂的搜索引擎功能。它提供了强大的索引和搜索机制,使得从大量文本数据中快速找到相关信息变得简单。...

    lucene学习笔记

    标题:Lucene学习笔记 描述:Lucene学习笔记,Lucene入门必备材料 知识点: 一、Lucene概述与文档管理策略 Lucene是一款高性能、全功能的文本搜索引擎库,广泛应用于文档检索、全文搜索等场景。为了提升搜索效率...

    Lucene 3.6 学习笔记

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

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

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

    Lucene学习笔记(一)Lucene入门实例

    NULL 博文链接:https://kylinsoong.iteye.com/blog/719415

    lucene3.5学习笔记

    ### Lucene 3.5 学习笔记 #### 一、Lucene 3.5 基本概念 ##### 1.1 Lucene 概述 **1.1.1 IndexWriter** `IndexWriter` 是 Lucene 中的核心类之一,用于创建或更新索引。它提供了添加文档、删除文档、优化索引等...

    Lucene学习笔记

    【Lucene学习笔记】 Lucene 是一款开源的全文检索框架,由Apache软件基金会维护,它提供了高效的、可扩展的搜索引擎功能。不同于一个完整的应用程序,Lucene 提供的是一个基础组件,开发者可以将其集成到自己的应用...

    lucene 3.5学习笔记

    《Lucene 3.5 学习笔记》 在信息技术高速发展的今天,搜索引擎技术成为了信息检索的核心工具。Apache Lucene,作为一个开源全文检索库,为开发者提供了强大的文本搜索功能。本文将深入探讨Lucene 3.5版本的相关知识...

    lucene3.0学习笔记(三)与paoding整合

    《Lucene 3.0 学习笔记(三)与Paoding整合》 在深入了解Lucene 3.0的过程中,我们经常会遇到如何将其与第三方工具进行整合的问题,以提升搜索性能和用户体验。这篇学习笔记主要关注的是将Lucene 3.0与Paoding搜索...

    lucene基础学习笔记&源码

    **Lucene 基础学习笔记与源码分析** **一、Lucene 概述** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它是一个 Java 开发的开源项目,被广泛应用于各种搜索引擎的构建,支持多种编程...

    本人的Lucene2.9学习笔记

    《深入理解Lucene 2.9.1:构建与搜索的全方位解析》 Lucene,作为一款开源的全文搜索引擎库,被广泛应用于各种信息检索场景。本文将详细讲解Lucene 2.9.1版本的核心概念、架构以及索引创建与搜索的流程。 一、...

Global site tag (gtag.js) - Google Analytics