`
liqita
  • 浏览: 291336 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

lucene3.6.1 经典案例 入门教程

阅读更多

第一步:下载lucene的核心包

lucene-core-3.6.1-javadoc.jar (3.5 MB) 

lucene-core-3.6.1.jar (1.5 MB) 

拷贝到项目的lib 文件夹里

 

第二步:

在C盘下建立source文件夹   (C:\source)

source文件夹存放待索引的文件,例如,建立两个文件,名称为 test1.txt  test2.txt  。

test1.txt文件内容为:欢迎来到绝对秋香的博客。

test2.txt文件内容为:绝对秋香引领你走向潮流。

在C盘下再建立index文件夹,存放索引文件 (C:\index)

 

第三步,建立索引类 TextFileIndexer ,并运行主函数

package com.newtouchone.lucene;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
  
public class TextFileIndexer {  
    public static void main(String[] args) throws Exception {  
        /* 指明要索引文件夹的位置,这里是C盘的source文件夹下 */  
        File fileDir = new File("C:\\source");  
  
        /* 这里放索引文件的位置 */  
        File indexDir = new File("C:\\index");  
        Directory dir = FSDirectory.open(indexDir);
        Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_36);
        IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_36,luceneAnalyzer);
        iwc.setOpenMode(OpenMode.CREATE);
        IndexWriter indexWriter = new IndexWriter(dir,iwc);  
        File[] textFiles = fileDir.listFiles();  
        long startTime = new Date().getTime();  
          
        //增加document到索引去  
        for (int i = 0; i < textFiles.length; i++) {  
            if (textFiles[i].isFile()  
                    && textFiles[i].getName().endsWith(".txt")) {  
                System.out.println("File " + textFiles[i].getCanonicalPath()  
                        + "正在被索引....");  
                String temp = FileReaderAll(textFiles[i].getCanonicalPath(),  
                        "GBK");  
                System.out.println(temp);  
                Document document = new Document();  
                Field FieldPath = new Field("path", textFiles[i].getPath(),  
                        Field.Store.YES, Field.Index.NO);  
                Field FieldBody = new Field("body", temp, Field.Store.YES,  
                        Field.Index.ANALYZED,  
                        Field.TermVector.WITH_POSITIONS_OFFSETS);  
                document.add(FieldPath);  
                document.add(FieldBody);  
                indexWriter.addDocument(document);  
            }  
        }  
        indexWriter.close();  
          
        //测试一下索引的时间  
        long endTime = new Date().getTime();  
        System.out  
                .println("这花费了"  
                        + (endTime - startTime)  
                        + " 毫秒来把文档增加到索引里面去!"  
                        + fileDir.getPath());  
    }  
  
    public static String FileReaderAll(String FileName, String charset)  
            throws IOException {  
        BufferedReader reader = new BufferedReader(new InputStreamReader(  
                new FileInputStream(FileName), charset));  
        String line = new String();  
        String temp = new String();  
          
        while ((line = reader.readLine()) != null) {  
            temp += line;  
        }  
        reader.close();  
        return temp;  
    }  
}  

 输出结果为:

File C:\source\test1.txt正在被索引....
欢迎来到绝对秋香的博客。
File C:\source\test2.txt正在被索引....
绝对秋香引领你走向潮流。
这花费了641 毫秒来把文档增加到索引里面去!C:\source
 

第四步,建立测试类TestQuery,并运行主函数,输出测试结果

package com.newtouchone.lucene;
import java.io.File;
import java.io.IOException;  

import org.apache.lucene.analysis.Analyzer;  
import org.apache.lucene.analysis.standard.StandardAnalyzer;  
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.ParseException;  
import org.apache.lucene.queryParser.QueryParser;  
import org.apache.lucene.search.IndexSearcher;  
import org.apache.lucene.search.Query;  
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
  
public class TestQuery {  
    public static void main(String[] args) throws IOException, ParseException {  
    	String index = "C:\\index";         //搜索的索引路径
        IndexReader reader = IndexReader.open(FSDirectory.open(new File(index)));
        IndexSearcher searcher = new IndexSearcher(reader);  
        
    	ScoreDoc[] hits = null;  
        String queryString = "绝对秋香";   //搜索的关键词
        Query query = null;  
        
  
        Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);  
        try {  
            QueryParser qp = new QueryParser(Version.LUCENE_36,"body", analyzer);  
            query = qp.parse(queryString);  
        } catch (ParseException e) {  
        }  
        if (searcher != null) {  
            TopDocs results = searcher.search(query,10);    //返回最多为10条记录
            hits = results.scoreDocs;
            if (hits.length > 0) {  
                System.out.println("找到:" + hits.length + " 个结果!");  
            }  
            searcher.close();
        } 
       
    }  
  
}  

 测试输出结果为:

找到:2 个结果!

附件homework.rar为项目文件,解压部署则可运行该lucene案例

12
2
分享到:
评论
13 楼 2047699523 2015-04-02  
apache lucene开源框架demo使用实例教程源代码下载:http://www.zuidaima.com/share/klucene-p1-s1.htm
12 楼 semimi1002 2015-01-06  
我直接将项目导入然后运行,报错:Exception in thread "main" org.apache.lucene.index.IndexNotFoundException: no segments* file found in org.apache.lucene.store.MMapDirectory@C:\index lockFactory=org.apache.lucene.store.NativeFSLockFactory@d8a7efd: files: [],能告知一下么
11 楼 adanbaron 2014-10-30  
很容易看懂,不像其他那里的,什么都说不清楚
10 楼 王鹏程 2014-10-02  
好,非常好
9 楼 love521myself 2014-07-01  
同意5楼的说法,楼主给解释一下哈
8 楼 Godlovequan 2014-01-06  
感谢,不知道最新的4.6版本怎么弄!
7 楼 lvwenwen 2013-09-01  
哥们不错,有可以跑的工程,有些就贴出代码,还要到处找包,麻烦,你这效率高
6 楼 guyanliang 2013-06-01  
谢谢分享 
5 楼 asdfasdf 2013-05-30  
索引好多,总是检索出来一个结果!一个hit不知道为啥?
4 楼 liqita 2012-09-14  
过奖,
这是一个lucene简单的测试,以后还要整合到自己的项目去的
3 楼 mingsheng0310 2012-09-14  
看了这么多乱七八糟的文档,就这个文档最直接了,非常感谢
2 楼 liqita 2012-09-13  
3Q
1 楼 AlvinCross 2012-09-12  

相关推荐

    Lucene 3.6.1完整案例

    Lucene 3.6.1: 中文分词、创建索引库、排序、多字段分页查询以及高亮显示源 希望对大家有帮助, 我自己建立的mysql数据库 使用了IKAnalyzer分词器源代码,大家可以自己设置停词,也可以自己改写算法

    lucene3.6.1

    首先,Lucene的核心包(core)是整个框架的基础,它包含了许多关键组件,如索引构建、查询解析、文档检索等。在这个版本中,Lucene的核心功能有了显著的增强,包括: 1. **索引优化**:Lucene 3.6.1在索引过程中...

    lucene3.6.1 所需jar整合包

    lucene3.6.1 所需jar整合包里面包括 lucene-highlighter-3.6.1.jar lucene-core-3.6.0.jar lucene-analyzers-3.6.1.jar IKAnalyzer2012_u6.jar

    lucene3.6.1文件关键字搜索代码(附加核心包)

    总的来说,Lucene 3.6.1是一个强大的工具,尽管现在版本已经更新到更高级别,但这个早期版本的案例仍然对理解Lucene的工作原理有很大帮助。对于初学者来说,从这个案例入手,逐步深入学习Lucene的高级特性和优化策略...

    Lucene 3.6.1 API CHM 格式

    Lucene 3.6.1 API chm格式带全文索引方便携带和查询。 从之前发布其他chm文件下载用户的反映看,有不少朋友反映下载后打开无法显示,这一般不是chm文件的问题,这里统一说明一下解决办法: 如果文件打开看不到右边...

    lucene_3.6.1_API

    尽管本压缩包只包含Lucene 3.6.1的API文档,但在学习这些API时,可以结合Solr或Elasticsearch的实践案例,以加深理解。 总的来说,Lucene 3.6.1 API是一个强大且灵活的搜索工具,涵盖了文本分析、索引构建、查询...

    lucene-3.6.1

    《深入剖析Lucene 3.6.1:搜索引擎构建的核心技术》 Apache Lucene是一个开源全文检索库,被广泛应用于各种信息检索系统中。这里我们聚焦于Lucene 3.6.1版本,一个在2011年发布的稳定版本,它在当时的搜索引擎领域...

    lucene3.6.1学习

    《Lucene 3.6.1 学习指南:深入解析源码与工具应用》 Lucene 是一个高性能、全文本搜索库,被广泛应用于各种搜索引擎的开发中。本学习资料主要聚焦于 Lucene 3.6.1 版本,这个版本在当时具有稳定性和功能性的良好...

    lucene3.6.1源码

    《深入剖析Lucene 3.6.1源码:全文检索引擎的核心技术解析》 Lucene,这个强大的全文检索引擎工具,一直以来都是开发者们研究和应用的重要对象。它以其高效、灵活的特点,广泛应用于信息检索、搜索引擎等领域。本文...

    lucene-3.6.1-src

    《Apache Lucene 3.6.1 源代码解析》 Apache Lucene 是一个开源全文搜索引擎库,它为开发者提供了强大的文本搜索功能。在这个"lucene-3.6.1-src"压缩包中,包含了Lucene 3.6.1版本的源代码,这个版本在当时是一个...

    lucene.net+完全入门教程

    **正文** Lucene.Net是一个基于Apache Lucene的开源全文搜索引擎库,它被移植到...教程可能涵盖从安装步骤、基本概念介绍,到实战案例的详细讲解,帮助初学者快速入门并熟练运用Lucene.Net进行全文搜索引擎的开发。

    lucene-analyzers-3.6.1.jar

    实现中文分词的lucene-analyzers-3.6.1.jar的jar 包

    lucene-highlighter-3.6.1.jar

    实现中文分词的jar包:lucene-highlighter-3.6.1.jar

    lucene-core-3.6.1.jar

    lucene-core-3.6.1.jar

    lucene全文检索案例源码

    《深入剖析Lucene全文检索案例源码》 在信息技术领域,全文检索技术是搜索引擎的核心,而Lucene作为Java平台上的一个开源全文检索库,被广泛应用于各种搜索应用中。本篇将围绕“lucene全文检索案例源码”展开,深入...

    lucene3.6的入门案例

    **Lucene 3.6 入门案例** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了完整的搜索功能,包括索引、查询、评分等,广泛应用于各种项目和产品中。在这个入门案例中,我们将深入理解如何...

    lucence3.6.1 示例完整包

    本文将深入探讨Lucene 3.6.1版本,结合“庖丁解牛”分词器以及其在数据库表索引、文件索引及分页搜索的应用,为初学者提供一套完整的入门教程。 一、Lucene 3.6.1 概述 Lucene 3.6.1是Apache软件基金会的开源项目...

    lucene.net 完全入门教程

    lucene.net 完全入门教程,包括 lucene.net 介绍, lucene.net工作模式, lucene.net分词方法和中文分词方法, lucene.net索引的建立详解, lucene.net搜索详解, lucene.net的下载方法, lucene.net搜索结果实现...

Global site tag (gtag.js) - Google Analytics