`

Lucene学习笔记之四:lucene入门实例

阅读更多

根据Lucene学习笔记之三:全文搜索详解,搭建lucene入门实例。主要内容包括建立索引和搜索,分词贯穿其中。

 

lucene建立索引

信息源

   要采集,必须有信息源,在这里我们就以读取硬盘中一个文件夹下所有的文件(File)充当信息源。

  File f= newFile("E:/lucene/example");

加工

   要把采集的信息,以lucene规定的形式存放到索引库中,所以要创建相应的文档(Document)对象。在这个文档中,我们要存放哪些信息才能达到完整且辟免垃圾信息,例如网页,我们可以要存储的是他的标题、内容、URL等,那些广告是不用存储的。在这里我们用到Field来存储各项目内容。

注:Document包含一系列的(域名)Field:

   List<Fieldable>fields = newArrayList<Fieldable>();

分词

   对于加工好的了文档,对其进行分词。用什么分词器呢?对英文和中文使用的分词器有可能不一样吧,这个得看后续分解了。在这里我们就用lucene提供的标准的分词器(StandardAnalyzer
索引库

   要把文档写入到索引库,并且根据分词器进行分词、建立索引,这得建索引库吧,在lucene中对应的是Directory,它可以建立在内存中,也可以建立在硬盘中。

   //Directory directory=newRAMDirectory();//建立在内存中

 

   Directorydirectory=FSDirectory.open(newFile("E:/lucene/index01"));

建立索引的完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public void index(){
    IndexWriter writer=null;
    try {
    //1.创建Directory:创建索引的保存地址
    //Directory directory=new RAMDirectory();//建立在内存中
    Directory directory=FSDirectory.open(
                            new File("E:/lucene/index01"));
    //2.创建IndexWriter, 是用来操作(增、删、改)索引库的
    IndexWriterConfig iwc=new IndexWriterConfig(
            Version.LUCENE_36,
            new StandardAnalyzer(Version.LUCENE_36));
    writer=new IndexWriter(directory, iwc);
    //3.创建Document对象
    Document doc=null;
    //4.为Document添加Field
    File f= new File("E:/lucene/example");
    for(File file:f.listFiles()){
        doc=new Document();
        doc.add(new Field("content"new FileReader(file)));
        doc.add(new Field("fileName",file.getName(),
                    Field.Store.YES,Field.Index.NOT_ANALYZED));
        doc.add(new Field("path",file.getAbsolutePath(),
                    Field.Store.YES,Field.Index.NOT_ANALYZED));
        //5.通过IndexWriter添加文档到索引中
        writer.addDocument(doc);
    }
    catch (CorruptIndexException e) {
    e.printStackTrace();
    catch (LockObtainFailedException e) {
    e.printStackTrace();
    catch (IOException e) {
    e.printStackTrace();
    }finally{
    if(writer!=null)
        try {
        writer.close();
        catch (CorruptIndexException e) {
        e.printStackTrace();
        catch (IOException e) {
        e.printStackTrace();
        }
    }
}


根据创建好的索引进行搜索

创建好了索引之后,接下来就是搜索了。按照搜索关键字(下例的关键字是“java”),在指定域(content)与分词器(StandardAnalyzer),通过IndexReader输入流读取索引库中的文档进行搜索。然后遍历搜索到的文档,把他的文件名和路径输出到控制台。


搜索的完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public void searcher(){
    try {
    //1.创建Directory:去哪里搜索
    Directory directory=FSDirectory.open(
                            new File("E:/lucene/index01"));
    //2.创建IndexReader
    IndexReader reader=IndexReader.open(directory);
    //3.根据IndexReader创建IndexSearcher
    IndexSearcher searcher=new IndexSearcher(reader);
    //4.创建搜索的Query
    //创建parser来确定要搜索文件的内容,第二个参数表示搜索的域
    QueryParser parser=new QueryParser(Version.LUCENE_36,
                    "content",
                    new StandardAnalyzer(Version.LUCENE_36));
    //创建Query,表示搜索域为content中包含java的文档
    Query query=parser.parse("java");
    //5.根据searcher搜索并且返回TopDocs
    TopDocs tds=searcher.search(query,2);
        System.out.println("总共有【" + tds.totalHits + "】条匹配结果");
    //6.根据TopDocs获取ScoreDoc对象
    ScoreDoc[] sds=tds.scoreDocs;
    for(ScoreDoc sd:sds){
        //7.根据searcher和TopDocs对象获取Document对象
        Document d = searcher.doc(sd.doc); //sd.doc:文档内部编号
        //8.根据Document对象获取需要的值
        System.out.println(d.get("fileName")+
                                "["+d.get("path")+"]");
    }
    //9.关闭reader
    reader.close();
    catch (CorruptIndexException e) {
    e.printStackTrace();
    catch (IOException e) {
    e.printStackTrace();
    catch (ParseException e) {
    e.printStackTrace();
    
}

 

本文链接:Lucene学习笔记之四:lucene入门实例,本文由huangyineng原创,转载请注明出处

分享到:
评论
1 楼 showtimes52007 2012-12-12  
哈哈,楼主的lucene例子只包括创建索引以及搜索,关于lucene的删除,可以看看这篇文章哦:
http://www.sujunqiang.com/archives/149.html

相关推荐

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

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

    lucene学习笔记

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

    Lucene 学习笔记 1

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

    lucene2.4+nutch学习笔记三:lucene 在多个文本文档里找出包含一些关键字的文档

    《Lucene 2.4与Nutch学习笔记:在多文本文档中搜索关键词》 Lucene是一个高性能、全文本搜索引擎库,它为开发者提供了在Java应用程序中实现全文搜索功能的基本工具。Nutch则是一个开源的网络爬虫项目,用于抓取...

    Lucene学习笔记

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

    本人的Lucene2.9学习笔记

    四、Lucene模块详解 1. analysis模块:包含了词法分析器,如StandardAnalyzer,用于将文本分解成Term。 2. index模块:处理索引的读写,包括IndexWriter(用于写入索引)和IndexReader(用于读取索引)。 3. store...

    [HeyJava][传智播客]全文检索Lucene源码

    1. **全文检索Lucene.pdf**:这可能是一个详细的教程或者课程笔记,涵盖了Lucene的基本概念、架构、核心类的解析,以及如何利用Lucene进行全文检索的实例。你可能会在这里找到关于如何创建索引、查询执行、结果排序...

    ElasticSearch学习笔记

    ElasticSearch学习笔记 ElasticSearch是基于Apache Lucene的搜索和数据分析引擎,提供了RESTful API用于数据的索引、搜索和分析。本笔记将对ElasticSearch的基本概念、架构、应用场景和实现细节进行详细介绍。 一...

    Compass原理深入学习笔记

    【Compass原理深入学习笔记】 Compass是一款基于Apache Lucene的全文搜索引擎框架,它为开发者提供了更高级别的抽象层,简化了搜索引擎的集成工作。在理解Compass之前,我们需要先了解全文检索的基本概念和原理。 ...

    学习笔记(ElasticSearch)(实战)

    **Elasticsearch实战学习笔记** Elasticsearch是一个开源的全文搜索引擎,基于Lucene构建,设计为分布式的实时文档存储和搜索系统。它不仅提供搜索功能,还具备数据分析、日志收集和监控等多种用途。在本学习笔记中...

    es学习笔记.zip

    Elasticsearch(ES)是一种基于Lucene的开源全文搜索引擎,以其高效、可扩展性以及实时分析能力,在大数据时代中扮演着重要角色。它不仅是一个搜索引擎,更是一个分布式、RESTful风格的搜索和数据分析引擎,能够处理...

    solr 学习笔记

    solr 学习笔记主要涵盖了 Solr 的基本安装与配置,以及 Solr 服务器复制的配置,这些都是初学者需要掌握的基础知识。 Solr 是一款基于 Lucene 的全文搜索引擎,广泛应用于大数据检索和文本分析。在安装 Solr 时,...

    jt14日常笔记

    ### 全文检索技术及其应用 #### 知识点一:全文检索与倒排索引的概念 ...通过上述知识点的学习和理解,我们可以更好地掌握全文检索技术的核心原理和应用场景,特别是在电子商务、搜索引擎等领域中的实际应用案例。

    elasticsearch基础知识,从小白到入门

    ### Elasticsearch基础知识,从小白到入门 #### 一、概念与背景 **搜索引擎基础:** - **倒排索引**:倒排索引是搜索引擎的核心技术之一,它将文档中的关键词与文档之间的对应关系建立索引,使得根据关键词快速...

    Elasticsearch核心技术与实战 笔记

    ### Elasticsearch核心技术与实战笔记知识点概览 #### 一、ELK Stack概述 - **定义**:ELK Stack是由Elasticsearch、Logstash和Kibana组成的开源软件集合,旨在提供全面的数据抽取、搜索分析和数据可视化解决方案。...

    javaee笔记

    18. **Lucene**:Lucene是Apache的一个全文检索库,可以用于构建搜索引擎,支持文本分析、索引和搜索。 19. **Linux**:Linux是一种广泛使用的开源操作系统,对于服务器端的JavaEE应用开发,了解Linux命令行操作和...

    es..kibana相关笔记-.zip

    Elasticsearch(ES)是基于Lucene的分布式搜索引擎,它以高效、可扩展性和实时性著称,广泛用于大数据分析和日志管理。Kibana是Elastic Stack(也称为ELK Stack,包括Elasticsearch、Logstash和Kibana)的一部分,...

Global site tag (gtag.js) - Google Analytics