`
damies
  • 浏览: 238432 次
  • 性别: 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  
好。多谢共享~~

相关推荐

    Lucene2.4完美样例+中文文档

    - **索引**:Lucene 的核心是创建索引,它将文本数据转换为可搜索的结构。索引过程包括分析、分词和倒排索引。 - **文档**:在 Lucene 中,每个要搜索的数据被视为一个文档,包含一个或多个字段,如标题、内容等。...

    lucene3 例子

    Lucene3包含了对文本的分词、标准化处理(如去除停用词、词干提取)以及建立倒排索引的能力,这些都是全文搜索的关键步骤。倒排索引允许快速定位包含特定关键词的文档,大大提高了搜索效率。 博文链接中提到的是一...

    lucene演示需要的数据

    在Lucene的工作流程中,数据通常指的是文本文件、数据库记录或其他形式的信息,这些信息需要被索引以便快速检索。这些数据首先会被读取,然后经过预处理步骤,如分词、去除停用词和词干提取,以转化为适合Lucene内部...

    paoding_analysis.rar_PaodingAnalysis_lucene paoding_paodi

    Lucene是一个开源的全文检索库,它提供了一套完整的搜索解决方案,包括索引创建、文档存储、查询解析、搜索结果排名等。其核心在于将文本数据转换为倒排索引,以便快速定位到包含特定关键词的文档。在英文环境中,...

    lucene_web项目应用实例

    在信息技术领域,搜索引擎技术是不可或缺的一部分,Apache Lucene作为一款开源全文搜索引擎库,为开发者提供了强大的文本检索能力。本文将深入探讨一个名为“lucene_web”的项目,它是基于Lucene实现的一个Web应用...

    lucene4.0简单的新增和查询

    总之,Lucene 4.0 提供了强大的文本索引和搜索功能,让开发者能够轻松地在应用程序中集成高级搜索功能。这个简单的示例是理解其工作原理和实践操作的一个良好起点。通过深入研究并结合自己的需求,开发者可以构建出...

    搜索引擎样例

    Apache Lucene是一个开源全文检索库,由Java编写,为开发者提供了构建高效、可扩展的搜索功能所需的各种工具。这个"LuceneTest"可能是一个简单的应用,演示了如何利用Lucene进行索引创建、查询执行以及结果返回等...

    je-analysis-1.5.3

    Je-analysis,作为一款基于Java的开源全文检索框架Lucene的中文分词组件,为开发者提供了强大的文本处理能力。本文将详细探讨je-analysis-1.5.3版本,揭示其核心功能、工作原理以及实际应用中的价值。 首先,我们来...

    LuceneNet开发实用参考样例

    LuceneNet 是 Apache Lucene 的 .NET 版本,它是一个高性能、全文本搜索库,适用于各种应用场景,包括网站搜索、文档检索、日志分析等。这个开发实用参考样例是针对 C# 开发者的,旨在帮助他们快速理解和应用 ...

    Solr 样例应用程序:j-solr1.zip

    Solr 提供了强大的全文检索、命中高亮、拼写检查、相关性排序等功能,广泛应用于网站、电子商务、企业内部文档搜索等多个场景。 "j-solr1.zip"这个压缩包文件,很可能是Solr的一个特定版本或者样例集合,用于帮助...

    Java桌面搜索 JDesktopSearch.7z

    Lucene是Java开发的全文检索库,它提供了强大的文本分析、索引构建和查询执行功能。 2. **文件解析**:为了进行内容搜索,JDesktopSearch需要解析不同类型的文件,这可能涉及到读取PDF、Word文档、电子邮件等格式的...

    struts2 spring lucene search 实例

    Lucene可以索引文本数据,并快速执行查询,返回相关的文档。在Web应用中,Lucene通常用于搜索用户输入的关键字,提高用户体验。在本项目中,你将看到如何将Lucene集成到Struts2和Spring框架中,创建一个能够进行全文...

    IKAnalyzer中文分词器V3.1.1使用手册

    该分析器采用了歧义分析算法来优化查询关键词的搜索排列组合,显著提高了Lucene检索的准确性。 ##### 1.2 特性 - **高速处理能力**:如上所述,IKAnalyzer采用了独特的算法设计,使得其能够以非常高的速度处理大量...

    我自己的demo例子

    Apache Lucene是一个高性能、全文检索库,广泛应用于搜索引擎和其他需要全文搜索功能的应用。这意味着这个示例项目可能涉及到使用Lucene进行信息检索或文本分析。 综合以上信息,这个压缩包可能包含一个使用Apache ...

    全局搜索Elasticsearch.zip

    分词器(Tokenizer)在Elasticsearch中的作用是将输入文本分割成独立的词语,这是全文检索的第一步。IK分词器(IK Analyzer)是一款针对中文的开源分词组件,特别适合处理中文文本。它支持多种分词模式,如精确模式...

    SOLR搭建企业搜索平台

    Apache Solr是一款强大的开源企业级全文搜索引擎,它基于Java且构建于Apache Lucene之上。Solr提供了高效、可扩展的搜索和导航功能,广泛应用于各种规模的企业环境中,用于处理大量数据的快速检索。本文将深入探讨...

    solr编写的搜索引擎

    它基于Java,并且能够处理大量的文本和其他类型的数据,提供高效、可扩展的全文检索、数据分析和分布式搜索服务。Solr是Lucene库的一个高度封装和优化的搜索服务器,具备丰富的功能和强大的性能。 在标题中提到的...

    solr 6.4.1 zip

    1. **全文搜索**:Solr的核心功能是进行高效的全文检索。它支持多种类型的字段类型,包括文本、数字、日期等,能够对文档内容进行分析和索引,使用户能够快速查找相关信息。 2. **Lucene库**:Solr基于高性能的全文...

    solr search

    1. 全文检索:Solr支持对文本进行分词,并建立倒排索引,实现快速的全文搜索。 2. 多字段搜索:用户可以指定多个字段进行搜索,提高查询灵活性。 3. 复杂查询:Solr支持多种查询语法,包括布尔逻辑、短语匹配、...

    Solr in Action -- Apache Solr 在比价系统中的应用

    这些特性使得Solr能够满足比价系统全文检索引擎的需求。 准备工作强调了如何设置和配置Solr,包括使用Solr提供的solr.war包作为样例,并采用Maven进行项目依赖管理。这样可以确保项目配置和依赖的准确性,同时便于...

Global site tag (gtag.js) - Google Analytics