`

Lucene建立索引搜索入门实例

阅读更多

   第一部分:Lucene建立索引
Lucene建立索引主要有以下两步:
第一步:建立索引器
第二步:添加索引文件
准备在f盘建立lucene文件夹,然后在lucene下建立文件夹test和index两个文件夹。
在test文件夹下建立如下四个txt文件
a.txt 内容:中华人民共和国
b.txt 内容:人民共和国
c.txt 内容:人民
d.txt 内容:共和国

这四个文件就是我们要建立索引的文件,
Index文件夹作为索引结果输出文件夹

准备工作完成以后,我们开始建立索引。
第一步:建立索引器,如下
IndexWriter writer = new IndexWriter("f:\\lucene\\index",
      new StandardAnalyzer(), true);
第二步:添加索引文件
writer.addDocument(..);
具体完整代码如下:
package com.peng.mylucene;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
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;
public class LuceneIndex {
public static void main(String[] args) {
   try {
    LuceneIndex index = new LuceneIndex();
    Date start = new Date();
    index.writeToIndex();
    Date end = new Date();
    System.out.println("建立索引用时" + (end.getTime() - start.getTime())+" 毫秒");
    index.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
}
//索引器
private IndexWriter writer = null;
public LuceneIndex() {
   try {
    //建立索引器,指定索引存放目录,分析器--new StandardAnalyzer()
    writer = new IndexWriter("f:\\lucene\\index",
      new StandardAnalyzer(), true);
   } catch (Exception e) {
    e.printStackTrace();
   }
}
private Document getDocument(File f) {
   //将要建立索引的文件构造成Document对象,并添加域content
   Document doc = new Document();
   BufferedReader bufReader = null;
   try {
    bufReader = new BufferedReader(new InputStreamReader(
      new FileInputStream(f)));
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   }
   //添加内容
   doc.add(Field.Text("contents", bufReader));
   doc.add(Field.Keyword("path", f.getAbsolutePath()));
   return doc;
}
private void writeToIndex() {
   //将目录f:\\lucene\\test下的文件,先通过getDocument(File)函数,
   //构造成Document, 然后添加到索引器writer
   File folder = new File("f:\\lucene\\test");
   if (folder.isDirectory()) {
    File[] list = folder.listFiles();
    for (File f : list) {
     Document doc = getDocument(f);
     try {
      System.out.println("建立索引:" + f);
      writer.addDocument(doc);
     } catch (IOException e) {
      e.printStackTrace();
     }
    }
   }
}
private void close() {
   try {//关闭索引器
    writer.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
}
}
最后,执行程序,结果如下:
建立索引:f:\lucene\test\a.txt
建立索引:f:\lucene\test\b.txt
建立索引:f:\lucene\test\c.txt
建立索引:f:\lucene\test\d.txt
建立索引用时63 毫秒
在f:\lucene\index下发现索引结果文件
_4.cfs deletable segments

                                     第二部分:在索引上搜索入门实例
在索引上搜索主要包括个步骤,使用两个对象—IndexSearcher和Query。
检索步骤:
第一步:创建索引器
searcher = new IndexSearcher(IndexReader.open("f:\\lucene\\index"));
第二步:将待检索关键字打包成Query对象
query = QueryParser.parse(key, "contents", new StandardAnalyzer());
第三步:使用索引器检索Query,得到检索结果Hits对象
Hits hit = searcher.search(query);
最后,将检索到的结果Hits打印出来:
for (int i = 0; i < h.length(); ++i) {
   Document doc = h.doc(i);
   System.out.println("这是第 " + i + " 个检索到的结果,文件名为:"
        + doc.get("path"));
}
全部程序如下:
package com.peng.mylucene;
import java.io.IOException;
import java.util.Date;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
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 LuceneSearch {
public static void main(String[] args) {
   LuceneSearch test = new LuceneSearch();
   Hits hit = null;// new Hits();
   hit = test.search("中华");
   test.dispalyResult(hit);
   hit = test.search("人民");
   test.dispalyResult(hit);
   hit = test.search("共和国");
   test.dispalyResult(hit);
}
public LuceneSearch() {
   try {// IndexReader.open()指名索引所在文件夹
    searcher = new IndexSearcher(IndexReader.open("f:\\lucene\\index"));
   } catch (IOException e) {
    e.printStackTrace();
   }
}
// 声明IndexSearcher对象
private IndexSearcher searcher = null;
// 声明Query对象
private Query query = null;
public Hits search(String key) {
   System.out.println("正在检索关键字:" + key);
   try {// 将关键字包装为Query对象
    query = QueryParser.parse(key, "contents", new StandardAnalyzer());
    Date start = new Date();
    Hits hit = searcher.search(query);
    Date end = new Date();
    System.out.println("检索完成,用时:" + (end.getTime() - start.getTime())
      + " 毫秒");
    return hit;
   } catch (Exception e) {
    e.printStackTrace();
   }
   return null;
}
public void dispalyResult(Hits h) {
   if (h.length() < 1) {
    System.out.println("no result !");
    return;
   } else {
    for (int i = 0; i < h.length(); ++i) {
     try {
      Document doc = h.doc(i);
      System.out.println("这是第 " + i + " 个检索到的结果,文件名为:"
        + doc.get("path"));
     } catch (IOException e) {
      e.printStackTrace();
     }
    }
    System.out.println("----------------------");
   }
}
}

在执行第一部分的程序得到索引后,执行搜索程序LuceneSearch,在控制台下得到结果如下:
(对比我们在f:\lucene\test下的四个文件可知,检索结果正确)
正在检索关键字:中华
检索完成,用时:47 毫秒
这是第 0 个检索到的结果,文件名为:f:\lucene\test\a.txt
----------------------
正在检索关键字:人民
检索完成,用时:0 毫秒
这是第 0 个检索到的结果,文件名为:f:\lucene\test\c.txt
这是第 1 个检索到的结果,文件名为:f:\lucene\test\b.txt
这是第 2 个检索到的结果,文件名为:f:\lucene\test\a.txt
----------------------
正在检索关键字:共和国
检索完成,用时:0 毫秒
这是第 0 个检索到的结果,文件名为:f:\lucene\test\d.txt
这是第 1 个检索到的结果,文件名为:f:\lucene\test\b.txt
这是第 2 个检索到的结果,文件名为:f:\lucene\test\a.txt
----------------------

总结
通过以上两篇文章我们看以看到使用lucene建立索引过程主要有一下4步:
1.提取文本
2.构建Document
3.分析
4.建立索引

参考《征服ajax+lucene构建搜索引擎》

分享到:
评论

相关推荐

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

    3. **索引(Index)**:Lucene通过建立索引来提高搜索速度。索引是一个结构化的数据存储,包含了文档的关键信息,便于快速查找。 4. **分析器(Analyzer)**:在建立索引前,Lucene会使用分析器对文本进行处理,如...

    Lucene建立索引

    本工程旨在为初学者提供一个入门Lucene建立索引的实例,帮助理解并掌握这一技术。 **正文:** 1. **Lucene简介** - Lucene是一个高性能、全文本搜索库,适用于Java开发者,可以嵌入到各种应用程序中,创建强大的...

    Lucene 的入门 实例 代码

    2. **建立索引**:通过`IndexWriter`类创建索引,指定索引路径和分析器(如`StandardAnalyzer`)。 3. **创建文档**:使用`Document`类表示要索引的数据,添加字段(如`Field`)并设置相应的属性。 4. **索引文档*...

    lucene搜索的简单入门例子源代码

    4. **建立索引**:完成所有文档的添加后,记得调用`commit()`方法保存索引。 5. **搜索索引**:使用`IndexSearcher`来执行查询。首先创建一个`QueryParser`,指定要搜索的字段和分词器,然后用`parse(String query)...

    Apache Lucene3.0 入门实例介绍

    这个入门实例将引导我们了解如何使用Lucene 3.0版本进行基本的索引和搜索操作。以下是对Lucene 3.0关键知识点的详细讲解: 1. **Lucene的架构**: Lucene的核心组件包括文档(Document)、字段(Field)、索引...

    Java搜索工具——Lucene实例总结(一)

    通过实例,我们可以创建一个简单的索引器,将文本文件或数据库内容导入Lucene索引,然后编写一个搜索引擎来查询这些内容。这通常涉及以下步骤: - 创建索引:定义Document结构,使用Analyzer处理Field,通过...

    Lucene简单实例记录

    ### Lucene的入门实例 #### 建立索引 1. **包导入**:首先,需要导入Lucene相关的包,包括`java.io`用于文件操作,`org.apache.lucene.analysis`用于文本分析,`org.apache.lucene.document`用于创建文档对象,...

    Lucene 3.0完成入门

    - **分词**:Lucene 使用分词器(Tokenizer)将文档拆分为单独的词汇项(Tokens),这是建立索引的基础。 - **字段**:每个文档可以包含多个字段,如标题、内容、作者等,每个字段都有独立的索引。 2. **Java 中...

    lucene.net+完全入门教程

    **Lucene.Net 全面入门教程** Lucene.Net是一个基于.NET框架的全文搜索引擎库,它为开发者提供了在.NET环境中构建高效、可扩展的全文检索应用的能力。Lucene最初由Apache软件基金会开发,是一个用Java编写的开源...

    全文搜索引擎lucene入门

    4. **建立索引(Indexing)**:创建一个结构化的数据结构,使得可以快速定位到包含特定词元的文档。 5. **查询解析(Query Parsing)**:将用户的查询转换为适合索引结构的表示。 6. **排名(Scoring)**:根据索引...

    Lucene 实时搜索视频详解

    1. **索引过程**:Lucene 的核心概念之一是建立索引,将原始文本数据转化为可快速查询的结构。这个过程包括分析(Analyzer)文本、分词、创建倒排索引等步骤。倒排索引允许我们快速定位包含特定词汇的文档。 2. **...

    Lucene 4.8全文检索引擎入门示例文档

    它通过分析输入文本,将文本拆分成词元(tokens),并为每个词元建立索引。索引包含每个词元的文档频率信息,使得搜索操作能够迅速定位到包含特定词元的文档。 二、主要组件 1. **Analyzer**:分析器负责将输入...

    Lucene4.7+IK Analyzer中文分词入门教程

    `LuceneIKUtil`则负责使用IK Analyzer对数据进行分词并建立索引。 分词是搜索引擎的关键步骤,IK Analyzer能够有效地处理中文词汇,如“银花感冒颗粒”、“感冒止咳糖浆”等,将其拆分为更小的有意义的单元,便于...

    搜索篇:Struts、Lucene的Web实例

    2. **Lucene入门**:解释Lucene的核心概念,如Document、Field、Analyzer和IndexWriter,以及如何建立和管理索引。 3. **Struts与Lucene整合**:演示如何在Struts的Action类中调用Lucene进行搜索,以及如何在JSP页面...

    搜索引擎 Lucene PPT 教程

    3. 建立索引:将处理后的关键词与文档元数据关联,形成倒排索引,便于快速查找相关文档。 4. 存储索引:索引被存储在磁盘上,可供后续查询使用。 5. 查询处理:用户输入查询后,Lucene解析查询语句,生成查询计划并...

    lucene简单介绍及solr搭建使用

    Solr是建立在Lucene之上,为大型企业级应用提供搜索服务的平台。它不仅包含了Lucene的所有搜索功能,还添加了集群、分布式搜索、缓存、负载均衡、结果高亮、拼写检查、近似搜索等特性。Solr通过XML或JSON等格式的...

    Lucene入门[参照].pdf

    对于需要索引的Field,Lucene会建立索引;对于需要存储的Field,会保存原始数据。最后,索引会被写入存储器,可以是内存或磁盘。 2. **读出(出)**:用户输入搜索关键词,同样经过Analyzer处理。然后,Lucene在...

    Lucene快速入门

    它通过建立索引来优化查询过程,以空间换时间的方式提升性能。 - **全文检索**: 对文件或字符流进行全文索引,检索时直接搜索索引而非原始数据。 - **效率对比**: 相比数据库的LIKE查询方式,Lucene在处理大量数据时...

Global site tag (gtag.js) - Google Analytics