`

lucene的索引创建于搜索 初学Lucene(一)

阅读更多

创建索引

public static void createSearch()throws CorruptIndexException, LockObtainFailedException, IOException
 { 

 //文件的位置
  File fileDir=new File("C:\\lucenetest");
   //索引文件的位置
  File  indexDir=new File("C:\\luceneindex");
  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= "+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 read=new BufferedReader(new InputStreamReader(new FileInputStream   (FileName),charset));
     String line=new String();
     String temp=new String();
     
     while((line=read.readLine())!=null)
     {
      temp+=line;
     }
     read.close();
     return temp;
    }

读取文件目录下的所有文件

====================================================================

建立索引: 为了对文档进行索引,Lucene 提供了五个基础的类,他们分别是 Document, Field, IndexWriter, Analyzer, Directory

Document:

Document  是用来描述文档的,这里的文档可以指一个 HTML 页面,一封电子邮件,或者是一个文本文件。一个 Document 对象由多个 Field 对象组成的。可以把一个 Document 对象想象成数据库中的一个记录,而每个 Field 对象就是记录的一个字段。

 

Field:  Field 对象是用来描述一个文档的某个属性的,比如一封电子邮件的标题和内容可以用两个 Field 对象分别描述。

 

Analyzer: 在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是由 Analyzer 来做的。Analyzer 类是一个抽象类,它有多个实现。针对不同的语言和应用需要选择适合的 AnalyzerAnalyzer 把分词后的内容交给 IndexWriter 来建立索引。

 

IndexWriter:  IndexWriter Lucene 用来创建索引的一个核心的类,他的作用是把一个个的 Document 对象加到索引中来。

 

Directory:  这个类代表了 Lucene 的索引的存储的位置,这是一个抽象类,它目前有两个实现,第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置。第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。

 

索引查询:

利用Lucene进行搜索就像建立索引一样也是非常方便的。在上面一部分中,我们已经为一个目录下的文本文档建立好了索引,现在我们就要在这个索引上进行搜索以找到包含某个关键词或短语的文档。Lucene提供了几个基础的类来完成这个过程,它们分别是呢IndexSearcher, Term, Query, TermQuery, Hits. 下面我们分别介绍这几个类的功能。

 

Query:  这是一个抽象类,他有多个实现,比如TermQuery, BooleanQuery, PrefixQuery. 这个类的目的是把用户输入的查询字符串封装成Lucene能够识别的Query

 

Term:  Term是搜索的基本单位,一个Term对象有两个String类型的域组成。生成一个Term对象可以有如下一条语句来完成:Term term = new Term(“fieldName”,”queryWord”); 其中第一个参数代表了要在文档的哪一个Field上进行查找,第二个参数代表了要查询的关键词。

 

TermQuery: TermQuery是抽象类Query的一个子类,它同时也是Lucene支持的最为基本的一个查询类。生成一个TermQuery对象由如下语句完成: TermQuery termQuery = new TermQuery(new Term(“fieldName”,”queryWord”)); 它的构造函数只接受一个参数,那就是一个Term对象。

 

IndexSearch:  IndexSearcher是用来在建立好的索引上进行搜索的。它只能以只读的方式打开一个索引,所以可以有多个IndexSearcher的实例在一个索引上进行操作。

 

Hits:   hits是用来保存搜索的结果的。

 

public static void Search() throws CorruptIndexException, IOException, ParseException
 {
   //索引文件目录位置
      String filepath="C:\\luceneindex";
      File indexDir=new File(filepath);
      FSDirectory  directory=FSDirectory.getDirectory(indexDir);
      IndexReader reader=IndexReader.open(FSDirectory.getDirectory(new File(filepath)),false);
     
      IndexSearcher searcher=new IndexSearcher(directory);
      if(!indexDir.exists())
      {
         System.out.println("The Lucene index is not exist..");
         return ;
      }
      Term  term =new Term("body","中");
      TermQuery  luceneQuery=new TermQuery(term);
      Hits hit=searcher.search(luceneQuery);
      for(int i=0;i<hit.length();i++)
      {
       Document document=hit.doc(i);
       System.out.println("File: "+document.get("path"));
       System.out.println(document.get("body"));
      } 
      
 }

 

 

 

 

分享到:
评论
1 楼 liuzm 2010-05-19  
呵呵,写的很详细哦
学习了!
去年做了全文检索,现在差不多忘记了

相关推荐

    lucene索引查看程序及代码

    luke是一款开源的Lucene索引查看器,它允许用户以图形化界面的形式查看和操作Lucene索引。lukeall-0.8.1.jar是luke的运行文件,通过运行这个JAR文件,我们可以直接在Java环境中启动luke应用,进行索引的查看和分析。...

    Lucene索引和查询

    **Lucene索引和查询** Lucene是Apache软件基金会的开放源码全文...本项目提供了一个基础的实现示例,对于初学者来说,是学习Lucene索引和查询的绝佳起点。在实际应用中,可以进一步扩展和优化,以满足更复杂的需求。

    lucene索引查看工具luck7.4.0

    `Luck`,全称`Luke`,是一款强大的Lucene索引浏览器和分析器工具,可以帮助开发者、数据分析师以及对Lucene感兴趣的人员查看、理解和调试Lucene索引。 `Luke 7.4.0`是这款工具的一个特定版本,它专门设计用来与...

    Lucene5学习之创建索引入门示例

    本文将深入探讨如何使用Lucene5来创建一个基本的索引,帮助初学者入门。 首先,我们需要了解Lucene的基本概念。Lucene是一个开源的Java库,它提供了索引和搜索大量文本数据的能力。索引过程将文本转换为可搜索的...

    深入 Lucene 索引机制深入 Lucene 索引机制

    在索引过程中,Lucene会对输入的文本进行分词,创建一个词项到文档位置的映射。当进行查询时,系统会快速定位到包含查询词的文档,而不是像关系型数据库那样遍历所有记录进行匹配。这种方式特别适合处理大规模数据和...

    Lucene索引搜索简介以及入门实例源码.rar

    这个压缩包中的源码很可能是演示了如何构建和使用Lucene索引进行搜索的简单实例,对于初学者来说是一份很好的学习资料。通过阅读源码,你可以了解如何实际操作Lucene,从而加深对Lucene的理解。同时,实践是最好的...

    luke--- lucene索引数据查看器

    Luke是一款强大的Lucene索引浏览器,它为开发者和搜索引擎优化人员提供了一种直观的方式来查看和分析由Apache Lucene创建的索引。Lucene是一个开源全文检索库,广泛应用于各种搜索引擎的构建。通过Luke,用户可以...

    Lucene 索引图形化界面工具 LukeAll 3.5~4.0

    总的来说,LukeAll 提供了一个直观的图形化界面,使得 Lucene 索引的管理和调试变得更加简单,无论对于初学者还是经验丰富的开发者,都是一个不可或缺的工具。通过使用这些不同版本的 LukeAll 工具,我们可以更好地...

    lucene索引库查看器5.3.0

    总的来说,Luke 5.3.0作为一款强大的Lucene索引库查看器,不仅简化了索引的调试过程,也提高了开发者对Lucene搜索引擎的理解。无论是初学者还是经验丰富的开发者,都能从中受益匪浅,提升开发效率和搜索质量。

    Lucene索引建立和搜索

    主要将如何使用Lucene建立索引以及搜索进行了代码的实现,有利于初学者熟悉Lucene的基本功能。

    lucene搜索引擎项目

    "lucene搜索引擎项目"可能包含了从零开始构建一个简单搜索引擎的全程,从数据读取、索引构建,到查询处理和结果展示。这对于初学者来说,是一个极好的实践平台。 通过深入研究这个项目,开发者可以了解Lucene的...

    Lucene建立索引

    - Lucene是一个高性能、全文本搜索库,适用于Java开发者,可以嵌入到各种应用程序中,创建强大的搜索功能。 - 它不仅支持基本的关键词搜索,还提供了高级的搜索特性,如短语搜索、布尔逻辑操作、近似搜索、模糊...

    Lucene.NET结合Sql建立全文检索Demo源码

    Lucene.NET是一个开源的全文搜索引擎库,它是Apache Lucene项目的一部分,专为.NET Framework设计。这个项目的目标是提供一个高性能、可扩展且易于使用的全文检索API。在.NET环境中,它使得开发者能够快速地在自己的...

    lucene基本使用,适合初学者

    以下是一段简单的示例代码,演示如何使用Lucene创建索引并进行检索: ```java public class LuceneExample { private void createIndex(String indexPath) throws Exception { // 创建IndexWriter实例 ...

    lukeall-4.6.0.jar luke工具 lucene查看索引库工具

    尤其对于初学者,Luke是一个极其有价值的教育工具,因为它揭示了Lucene索引的内部运作机制。 总之,“lukeall-4.6.0.jar”作为一款强大的Lucene索引查看工具,为开发者提供了宝贵的洞察力,帮助他们更好地管理和...

    基于lucene的Swing全文索引构建于查询工具及源程序

    本项目以"基于lucene的Swing全文索引构建于查询工具及源程序"为主题,旨在帮助初学者理解和掌握如何利用Lucene和Swing来创建一个桌面应用程序,实现文件的全文索引和查询功能。 Lucene的核心概念包括以下几个部分:...

    供lucene初学者学习的几个类

    2. **IndexWriter**: 这个类负责创建和更新Lucene索引。通过`IndexWriter`,你可以添加、删除文档,并控制索引的物理结构,如段合并策略。使用`addDocument(Document doc)`方法可以向索引中添加新文档。 3. **...

    lucene做的桌面搜索

    Lucene,由Apache软件基金会开发,是一款开源全文检索库,广泛应用于各种搜索引擎的构建。它提供了丰富的API接口,使得开发者能够轻松地在自己的应用程序中集成全文检索功能。在这个Java桌面搜索程序中,Lucene起到...

    Lucene示例 BM25相似度计算

    在IT领域,搜索引擎技术是至关重要的,而Lucene作为一个开源全文搜索引擎库,广泛应用于各种文本检索系统中。本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、...

Global site tag (gtag.js) - Google Analytics