`
农村哥们
  • 浏览: 293303 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Lucene学习一

阅读更多
Lucene是apache组织的一个用java实现全文搜索引擎的开源项目。其功能非常的强大,api也很简单。总得来说用Lucene来进行建立 和搜索和操作数据库是差不多的(有点像),Document可以看作是数据库的一行记录,Field可以看作是数据库的字段。用lucene实 现搜索引擎就像用JDBC实现连接数据库一样简单。

Lucene2.0,它与以前广泛应用和介绍的Lucene 1.4.3并不兼容。 Lucene2.0的下载地址是http://apache.justdn.org/lucene/java/


例子一 :

1、在windows系统下的的C盘,建一个名叫s的文件夹,在该文件夹里面随便建三个txt文件,随便起名啦,就叫"1.txt","2.txt"和"3.txt"啦
其中1.txt的内容如下:

中华人民共和国  
全国人民  
2006年  
而"2.txt"和"3.txt"的内容也可以随便写几写,这里懒写,就复制一个和1.txt文件的内容一样吧

2、下载lucene包,放在classpath路径中
建立索引:

package  lighter.iteye.com;  
 
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 lighter date 2006-8-7 
  */  
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 );  
        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;  
        }   
        reader.close();  
         return  temp;  
    }   
}  
索引的结果:

File C:\s\ 1 .txt正在被索引.  
中华人民共和国全国人民2006年  
File C:\s\ 2 .txt正在被索引.  
中华人民共和国全国人民2006年  
File C:\s\ 3 .txt正在被索引.  
中华人民共和国全国人民2006年  
这花费了297 毫秒来把文档增加到索引里面去 ! c:\s  

3、建立了索引之后,查询啦....

package  lighter.iteye.com;  
 
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()  +   "  个结果! " );  
            }   
        }   
    } 
 
}  

其运行结果:


找到: 3  个结果 !


Lucene 其实很简单的,它最主要就是做两件事:建立索引和进行搜索
来看一些在lucene中使用的术语,这里并不打算作详细的介绍,只是点一下而已----因为这一个世界有一种好东西,叫搜索。

IndexWriter:lucene中最重要的的类之一,它主要是用来将文档加入索引,同时控制索引过程中的一些参数使用。

Analyzer:分析器,主要用于分析搜索引擎遇到的各种文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。

Directory:索引存放的位置;lucene提供了两种索引存放的位置,一种是磁盘,一种是内存。一般情况将索引放在磁盘上;相应地lucene提供了FSDirectory和RAMDirectory两个类。

Document:文档;Document相当于一个要进行索引的单元,任何可以想要被索引的文件都必须转化为Document对象才能进行索引。

Field:字段。

IndexSearcher:是lucene中最基本的检索工具,所有的检索都会用到IndexSearcher工具;

Query:查询,lucene中支持模糊查询,语义查询,短语查询,组合查询等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些类。

QueryParser: 是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成Query对象。

Hits:在搜索完成之后,需要把搜索结果返回并显示给用户,只有这样才算是完成搜索的目的。在lucene中,搜索的结果的集合是用Hits类的实例来表示的。

上面作了一大堆名词解释,下面就看几个简单的实例吧:
1、简单的的StandardAnalyzer测试例子



package  lighter.iteye.com;  
 
import  java.io.IOException;  
import  java.io.StringReader;  
 
import  org.apache.lucene.analysis.Analyzer;  
import  org.apache.lucene.analysis.Token;  
import  org.apache.lucene.analysis.TokenStream;  
import  org.apache.lucene.analysis.standard.StandardAnalyzer;  
 
public   class  StandardAnalyzerTest   
  {  
     // 构造函数,   
      public  StandardAnalyzerTest()  
      {  
    }   
     public   static   void  main(String[] args)   
      {  
         // 生成一个StandardAnalyzer对象   
         Analyzer aAnalyzer  =   new  StandardAnalyzer();  
         // 测试字符串   
         StringReader sr  =   new  StringReader( " lighter javaeye com is the are on " );  
         // 生成TokenStream对象   
         TokenStream ts  =  aAnalyzer.tokenStream( " name " , sr);   
         try    {  
             int  i = 0 ;  
            Token t  =  ts.next();  
             while (t != null )  
              {  
                 // 辅助输出时显示行号   
                 i ++ ;  
                 // 输出处理后的字符   
                 System.out.println( " 第 " + i + " 行: " + t.termText());  
                 // 取得下一个字符   
                 t = ts.next();  
            }   
        }  
分享到:
评论

相关推荐

    lucene学习资料收集

    【标题】:“Lucene学习资料收集” 【描述】:Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发。这个资料集可能包含了关于如何理解和使用Lucene的各种资源,特别是通过博主huanglz19871030在iteye上的...

    Lucene的的学习资料及案例

    **Lucene学习指南** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单的API,使得开发者能够方便地在应用中实现全文检索功能。本篇文章将...

    lucene学习lucene学习

    2. 创建索引:清单 1 展示了一个简单的 Java 示例,演示如何使用 Lucene 对一个目录中的 .txt 文件创建索引。在这个例子中,`fileDir` 指定包含待索引文本文件的目录,`indexDir` 是存储 Lucene 索引文件的位置。`...

    lucene学习pdf2

    "lucene学习pdf2" 提供的文档,无疑是对Lucene深入理解的一把钥匙,它涵盖了Lucene的核心概念、操作流程以及高级特性。 首先,Lucene的基础知识是必不可少的。Lucene的核心在于索引和搜索,它将非结构化的文本数据...

    Lucene学习源码.rar

    本文将主要围绕Java Lucene进行深入探讨,并基于提供的“Lucene学习源码.rar”文件中的“Lucene视频教程_讲解部分源码”展开讨论。 一、Lucene核心概念 1. 文档(Document):Lucene中的基本单位,用于存储待检索...

    lucene学习资料

    《Lucene学习资料》 Lucene是一个开源的全文搜索引擎库,由Apache软件基金会维护。它提供了高级的文本分析和索引功能,使得开发者能够轻松地在应用程序中集成强大的搜索功能。这个资料包中的《Lucene in Action_2nd...

    Lucene-2.0学习文档

    本篇文章将围绕"Lucene-2.0学习文档"的主题,结合Indexer.java、MyScoreDocComparator.java和MySortComparatorSource.java这三个关键文件,深入探讨Lucene的核心概念和实际应用。 首先,我们来看`Indexer.java`。这...

    lucene学习-02

    在深入探讨“Lucene学习-02”这一主题之前,我们先来理解一下Lucene的核心概念。Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,广泛应用于各种搜索引擎和信息检索系统。它提供了文本分析、索引构建、...

    Lucene3.3.0学习Demo

    1. **分词**:Lucene通过Analyzer处理输入的文本,将其分解为一系列的关键词(Token)。默认的StandardAnalyzer会处理英文文本,但可以自定义Analyzer来适应其他语言或特定需求。 2. **索引创建**:将分词后的...

    【大搜集:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子...

    Lucene.net学习帮助文档

    总之,Lucene.net是一个强大的全文搜索引擎工具,通过深入学习其源码和相关文档,开发者可以构建出满足各种需求的搜索解决方案。无论你是.NET开发者还是对全文检索技术感兴趣,Lucene.net都是一个值得投入时间和精力...

    Lucene 3.6 学习笔记

    【Lucene 3.6 学习笔记】 Lucene 是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发。本文将深入探讨Lucene 3.6版本中的关键概念、功能以及实现方法。 ### 第一章 Lucene 基础 #### 1.1 索引部分的核心...

    lucene4.8学习资料和案例

    本文将深入探讨Lucene 4.8的核心特性、使用方法以及相关的学习资料和案例,旨在帮助读者更好地理解和应用这一技术。 一、Lucene 4.8基础概念 1. 文档(Document):Lucene中的基本单位,用于存储信息,可以理解为...

    Lucene学习工具包.zip

    通过"Lucene学习工具包.zip",你可以系统地学习和实践,逐步成为一名熟练的全文搜索引擎开发者。不断深入,你会发现Lucene不仅在搜索引擎领域有广泛的应用,还能在日志分析、推荐系统等多个场景中发挥重要作用。

    lucene学习总结

    **Lucene学习总结** 在深入理解Lucene之前,我们首先需要了解什么是全文检索。全文检索是一种从大量文本数据中快速查找所需信息的技术。它通过建立索引来实现高效的搜索,而Lucene正是Java环境下最著名的全文搜索...

    Lucene 3.0 原理与代码分析PDF

    Lucene学习总结之一:全文检索的基本原理 Lucene学习总结之二:Lucene的总体架构 Lucene学习总结之三:Lucene的索引文件格式(1) Lucene学习总结之三:Lucene的索引文件格式(2) Lucene学习总结之三:Lucene的...

Global site tag (gtag.js) - Google Analytics