zoukankan      html  css  js  c++  java
  • Lucene 源代码剖析-2 Lucene是什么

    转载自 http://download.csdn.net/source/858994

    源地址下是 Word 文档,这里转换成HTML 格式

     

     

    1           Lucene是什么

    Apache Lucene是一个高性能(high-performance)的全能的全文检索(full-featured text search engine)的搜索引擎框架库,完全(entirely)使用Java开发。它是一种技术(technology),适合于(suitable for)几乎(nearly)任何一种需要全文检索(full-text search)的应用,特别是跨平台(cross-platform)的应用。

     

    Lucene 通过一些简单的接口(simple API)提供了强大的特征(powerful features):

     

    可扩展的高性能的索引能力(Scalable, High-Performance Indexing

    •               超过20M/分钟的处理能力(Pentium M 1.5GHz
    •               很少的RAM内存需求,只需要1MB heap
    •               增量索引(incremental indexing)的速度与批量索引(batch indexing)的速度一样快
    •                索引的大小粗略(roughly)为被索引的文本大小的20-30%

      

    强大的精确的高效率的检索算法(< /strong>Powerful, Accurate and Efficient Search Algorithms

                  分级检索(ranked searching)能力,最好的结果优先推出在前面
                  很多强大的query种类:phrase queries, wildcard queries, proximity queries, range queries
                  支持域检索(fielded searching),如标题、作者、正文等
                  支持日期范围检索(date-range searching
                  可以按任意域排序(sorting by any field
                  支持多个索引的检索(multiple-index searching)并合并结果集(merged results
                  允许更新和检索(update and searching)并发进行(simultaneous

         

    跨平台解决方案(Cross-Platform Solution

                  Open Source方式提供并遵循Apache License,允许你可以在即包括商业应用也包括Open Source程序中使用Lucene
                  100%-pure Java(纯Java实现)
                   提供其他开发语言的实现版本并且它们的索引文件是兼容的

     

    Lucene API被分成(divide into)如下几种包(package

       

                        org.apache.lucene.analysis     

    定义了一个抽象的Analyser API,用于将text文本从一个java.io.Reader转换成一个TokenStream,即包括一些Tokens的枚举容器(enumeration)。一个TokenStream的组成(compose)是通过在一个Tokenizer的输出的结果上再应用TokenFilters生成的。一些少量的Analysers实现已经提供,包括StopAnalyzer和基于语法(gramar-based)分析的StandardAnalyzer     

                       org.apache.lucene.document  

    提供一个简单的Document类,一个document只不过包括一系列的命名了(named)的Fields(域),它们的内容可以是文本(strings)也可以是一个java.io.Reader的实例。     

                         org.apache.lucene.index         

    提供两个主要类,一个是IndexWriter用于创建索引并添加文档(document),另一个是IndexReader用于访问索引中的数据。      

                        org.apache.lucene.search        

    提供数据结构(data structures)来呈现(represent)查询(queries):TermQuery用于单个的词(individual words),PhraseQuery用于短语,BooleanQuery用于通过boolean关系组合(combinations)在一起的queries。而抽象的Searcher用于转变queries为命中的结果(hits)。IndexSearcher实现了在一个单独(single)的IndexReader上检索。      

                         org.apache.lucene.queryParser      

    使用JavaCC实现一个QueryParser     

                         org.apache.lucene.store          

    定义了一个抽象的类用于存储呈现的数据(storing persistent data),即Directory(目录),一个收集器(collection)包含了一些命名了的文件(named files),它们通过一个IndexOutput来写入,以及一个IndexInput来读取。提供了两个实现,FSDirectory使用一个文件系统目录来存储文件,而另一个RAMDirectory则实现了将文件当作驻留内存的数据结构(memory-resident data structures)。      

                         org.apache.lucene.util              

    包含了一小部分有用(handy)的数据结构,如BitVectorPriorityQueue等。

         

    2           Hello World!

    下面是一段简单的代码展示如何使用Lucene来进行索引和检索(使用JUnit来检查结果是否是我们预期的):

     

    复制代码
        // Store the index in memory:
        Directory directory = new RAMDirectory();
        
    // To store an index on disk, use this instead:
        
    //Directory directory = FSDirectory.getDirectory(”/tmp/testindex”);
        IndexWriter iwriter = new IndexWriter(directory, analyzer, true);
        iwriter.setMaxFieldLength(
    25000);
        Document doc 
    = new Document();
        String text 
    = “This is the text to be indexed.“;
        doc.add(
    new Field(“fieldname“, text, Field.Store.YES,
            Field.Index.TOKENIZED));
        iwriter.addDocument(doc);
        iwriter.optimize();
        iwriter.close();
        
        
    // Now search the index:
        IndexSearcher isearcher = new IndexSearcher(directory);
        
    // Parse a simple query that searches for ”text”:
        QueryParser parser = new QueryParser(“fieldname“, analyzer);
        Query query 
    = parser.parse(“text“);
        Hits hits 
    = isearcher.search(query);
        assertEquals(
    1, hits.length());
        
    // Iterate through the results:
        for (int i = 0; i < hits.length(); i++{
          Document hitDoc 
    = hits.doc(i);
          assertEquals(“This 
    is the text to be indexed.“, hitDoc.get(“fieldname“));
        }

        isearcher.close();
        directory.close(); 
    复制代码

    为了使用Lucene,一个应用程序需要做如下几件事:

    1.          通过添加一系列Fields来创建一批Documents对象。

    2.          创建一个IndexWriter对象,并且调用它的AddDocument()方法来添加进Documents

    3.          调用QueryParser.parse()处理一段文本(string)来建造一个查询(query)对象。

    4.          创建一个IndexReader对象并将查询对象传入到它的search()方法中。

       

       

    3           Lucene Roadmap

          

               

                

     

  • 相关阅读:
    request.getParameter() 、 request.getInputStream()和request.getReader() 使用体会
    HTTP之Content-Length
    关于spring3中No Session found for current thread!and Transaction的配置和管理(转)
    Java数据类型和MySql数据类型对应一览
    Spring MVC 解读——View,ViewResolver(转)
    LeetCode 441. Arranging Coins
    LeetCode 415. Add Strings
    LeetCode 400. Nth Digit
    LeetCode 367. Valid Perfect Square
    LeetCode 326. Power of Three
  • 原文地址:https://www.cnblogs.com/daichangya/p/12958545.html
Copyright © 2011-2022 走看看