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

Lucene全文检索样例(解决大文本建索引)

阅读更多

建索引:

package  com.pccw;   
  
 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;   
  
 /** */ /**   
 * author Shane in PCCW
 *
  */   
 public   class  TextFileIndexer   {   
     public   static   void  main(String[] args)  throws  Exception   {   
         /**/ /*  指明要索引文件夹的位置,这里是C盘的S文件夹下  */   
        File fileDir  =   new  File( "c:\\s" );   
  
         /**/ /*  这里放索引文件的位置  */   
        File indexDir  =   new  File( "c:\\index" );   
        Analyzer luceneAnalyzer  =   new  StandardAnalyzer();   
        IndexWriter indexWriter  =   new  IndexWriter(indexDir, luceneAnalyzer,   
                 true );
        indexWriter.setMaxFieldLength(99999999);//增加内存域长度限制(非常重要)
        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.TOKENIZED,   
                        Field.TermVector.WITH_POSITIONS_OFFSETS);   
                document.add(FieldPath);   
                document.add(FieldBody);   
                indexWriter.addDocument(document);   
            }    
        }    
         // optimize()方法是对索引进行优化    
         indexWriter.optimize();   
        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 + "\n";   
        }    
        reader.close();   
         return  temp;   
    }    
}   

查询:

package  com.pccw;   
  
 import  java.io.IOException;   
  
 import  org.apache.lucene.analysis.Analyzer;   
 import  org.apache.lucene.analysis.standard.StandardAnalyzer;   
 import  org.apache.lucene.queryParser.ParseException;   
 import  org.apache.lucene.queryParser.QueryParser;   
 import  org.apache.lucene.search.Hits;   
 import  org.apache.lucene.search.IndexSearcher;   
 import  org.apache.lucene.search.Query;   
  
 public   class  TestQuery   {   
     public   static   void  main(String[] args)  throws  IOException, ParseException   {   
        Hits hits  =   null ;   
        String queryString  =   "中华" ;   
        Query query  =   null ;   
        IndexSearcher searcher  =   new  IndexSearcher( " c:\\index " );   
  
        Analyzer analyzer  =   new  StandardAnalyzer();   
         try    {   
            QueryParser qp  =   new  QueryParser( " body " , analyzer);   
            query  =  qp.parse(queryString);   
        }   catch  (ParseException e)   {   
        }    
         if  (searcher  !=   null )   {   
            hits  =  searcher.search(query);   
             if  (hits.length()  >   0 )   {   
                System.out.println( " 找到: "   +  hits.length()  +   "  个结果! " );   
            }    
        }    
    }  
  
}   

 

 

分享到:
评论
4 楼 sunzongbao2007 2011-03-04  
1G的文件 必死无疑
3 楼 凤凰山 2009-04-19  
非常感谢分享,呵呵
2 楼 eonn 2009-04-08  
确实讲的不错,蛮详细的
1 楼 cjc19762338 2008-12-28  
好。多谢共享~~

相关推荐

    lucene全文检索需要jar包

    lucene全文检索需要的三个jar包:lucene-analyzers-3.6.1.jar lucene-core-3.6.1.jar lucene-highlighter-3.6.1.jar

    lucene全文检索简单索引和搜索实例

    基于lucene 2.4简单的一个索引和搜索实例

    lucene全文检索全面教程

    lucene全文检索全面教程,基于JAVA的lucene全文检索全面教程。www.288158.com

    Lucene全文检索案例

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

    lucene 全文检索

    lucene 全文检索 ,内含对word,excel,ppt,pdf封装接口,全文检索demo

    Lucene全文检索引擎

    NULL 博文链接:https://1151461406.iteye.com/blog/2388343

    Lucene检索文本,建立索引

    用Lucene检索文本,建立索引,用struts构建web程序框架

    超系统学习Lucene全文检索技术视频教程

    视频详细讲解,需要的小伙伴自行网盘下载,链接见附件,永久有效。 目前业界流行的ElasticSearch和Solr搜索...系统的学习Lucene全文检索技术,全面掌握搜索原理和底层知识,为学习其他应用层面搜索技术打下坚实的基础。

    lucene全文检索引擎资料包(有项目)

    lucene全文检索引擎资料包(有项目)lucene全文检索引擎资料包(有项目)lucene全文检索引擎资料包(有项目)

    使用lucene全文检索数据库

    使用lucene编程实现全文检索数据库内容,程序使用lucene-core-2.4.0以及access数据库

    lucene全文检索案例源码

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

    lucene全文检索

    采用lucene全文检索技术,对文档进行全文检索,支持.java,.txt,.xml,.xls等文件的检索。采用mysql数据库。数据库并不包含在系统中,需要用户自己创建,数据库的配置在config/DB.properties文件中。能够检索出字符串...

    Lucene全文检索引擎简介

    建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词==&gt;文章映射关系,利用这样的映射关系索引:...

    lucene全文检索word2007

    资源全免费,我的博客有相关的说明,这个是一个eclipse项目,是一个使用lucene全文检索word2007的例子,可以直接运行,但是需要在数据目录下放入word文件 才能创建索引.

    Lucene.Net 实现全文检索

    本案例通过.Net MVC4基础上,针对Lucene.Net实现全文检索的应用。通过查询数据表中数据,创建索引,通过统一输入框进行全文检索。可以进行对索引的增删改查功能。

    Lucene实现全文检索

    Lucene实现全文检索

    Lucene全文检索Java实例工程

    Lucene是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎...

    lucene全文检索-javademo.rar

    lukeall.jar---双击,然后选择索引文件的位置,就可以看见里面的文件了! hello.java 是对文档的内容检索 ...TeacherIndex 是采用ssh框架的模式对数据库里面的表创建索引、添加增量索引、检索文件操作

Global site tag (gtag.js) - Google Analytics