`
liqita
  • 浏览: 287441 次
  • 性别: 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 所需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

    Lucene 3.6.1 API CHM 格式

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

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

    lucene3.6.1文件关键字搜索代码(附加核心包),就是一个入门级的JAVA全局文件夹搜索案例、对于初学lucene很有帮助。

    lucene3.6.1

    lucene core contrib包。core是lucene的核心包、contrib中有关键词高亮、各种语言分析器等辅助工具包

    Lucene全文检索案例

    Lucene全文检索案例Lucene全文检索案例Lucene全文检索案例Lucene全文检索案例

    lucene_3.6.1_API

    这个压缩包包含lucene_3.6.1_API,后缀格式为chm. .;...

    lucene-3.6.1-src

    lucene-3.6.1-src

    lucene.net+完全入门教程

    Lucene.Net是Lucene在dot net平台上的移植版本。它的功能与Lucene一样,都是用来提供一组API,让我们能快速开发自己的搜索引擎,当然,是全文搜索。

    lucene-analyzers-3.6.1.jar

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

    lucene全文检索案例源码

    lucene全文检索案例源码 lucene全文检索案例源码

    lucene3.6.1学习

    NULL 博文链接:https://lijunlong.iteye.com/blog/1667037

    lucene-3.6.1

    lucene-3.6.1源代码及jar包,需要的可以直接下载~~~~~~~

    lucene-highlighter-3.6.1.jar

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

    lucene3.6.1源码

    lucene是强大全文检索引擎工具,该源码有助于开发人员深入的了解lucene实现机制。

    lucene-core-3.6.1.jar

    lucene-core-3.6.1.jar

    lucene.net 完全入门教程

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

    lucene-3.6.1.tgz

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放...Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

    lucene3.6的入门案例

    说明: 例子是根据lucene3.6写的,也可以说是直接copy别人的。 包括参考文章的代码,以及修改部分之后的代码

Global site tag (gtag.js) - Google Analytics