`
jefferson
  • 浏览: 277931 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Lucene简单介绍

阅读更多
使用Lucene作为搜索引擎,应用系统需要做两件事情:
(1)建立索引文件。下面给一个接口SearchManager来定义一般要用到的方法。
SearchManager代码如下:
java 代码
  1. public interface SearchManager {   
  2.     public boolean isSearchEnabled();   
  3.     public void setSearchEnabled(boolean searchEnabled);   
  4.     /**   
  5.     //如果SearchManage正在工作,返回真   
  6.     public boolean isBusy();   
  7.     //返回索引完成率   
  8.     public int getPercentComplete();   
  9.     //是否自动建立索引   
  10.     //通过TaskEngine.scheduleTask方法实现定期自动索引   
  11.     public boolean isAutoIndexEnabled();   
  12.     public void setAutoIndexEnabled(boolean value);   
  13.     //自动索引间隔的分钟数   
  14.     public int getAutoIndexInterval();   
  15.     public void setAutoIndexInterval(int minutes);   
  16.     //获得上次建立索引的时间   
  17.     public Date getLastIndexedDate();   
  18. //在实时建立索引时,将当前帖子加入索引   
  19.     public void addToIndex(ForumMessage message);   
  20.     public void removeFromIndex(ForumMessage message);   
  21.     //手动更新自上次建立索引后的新内容   
  22.     public void updateIndex();   
  23.     //手动重新建立全部的索引   
  24.     public void rebuildIndex();   
  25.     //优化   
  26.     public void optimize();   
  27. }   
    
   ·       IndexWriter用户建立新的索引,当然也可以将文档加入已经存在的索引。
在文本被索引之前,它必须通过一个分析器Analyzer。分析器Analyzer 负责从文本中分离出索引关键字。Lucene有几种不同类型的分析器:
·          SimpleAnalyzer是将英文转换为小写字母,按空格和标点符号切分出英文单词,
如I am Java这一句,使用SimpleAnalyzer切词就会切分出下列词语:
token1=I
token2=am
token3=Java
·          StandardAnalyzer是对英文进行了较为复杂的处理。除了按词语建立索引关键字(token)外,还能够为特殊名称、邮件地址、缩写格式等建立索引单元,而且对“and”、“ the”等词语做了过滤。
·          ChineseAnalyzer是专门用来分析中文的索引的。关于中文分析器,有很多尝试,如车东的http://sourceforge.net/projects/weblucene/;等,该问题将在后面章节继续讨论。
一个索引是由一系列Document组成,每个Document是由一个或多个Field组成,每个Field都有一个名字和值,可以把Document作为关系数据库中一条记录,而Field则是记录中某列字段。一般建立索引如下:
java 代码
  1. //指定将在哪个目录建立索引   
  2. String indexDir = "/home/";     
  3. //指定将要建立索引的文本   
  4. String text = "welcom here, I am Java,";         
  5. Analyzer analyzer = new StandardAnalyzer();   //使用StandardAnalyzer   
  6. //建立一个IndexWriter   
  7. IndexWriter writer = new IndexWriter(indexDir, analyzer, true);   
  8. //建立Document   
  9. Document document  = new Document();   
  10. //进行切词、索引   
  11. document.add(Field.Text("fieldname", text));   
  12. //加入索引中   
  13. writer.addDocument(document);   
  14. writer.close();   
其中,Field根据具体要求有不同用法,Lucene提供4种类型的Field: Keyword、 UnIndexed、 UnStored和 Text。
·          Keyword 不实现切词,逐字地保存在索引中,这种类型适合一些如URL、日期、个人姓名、社会安全号码、电话号码等需要原封不动保留的词语。
·          UnIndexed既不实现切词也不索引,但是其值是一个词一个词地保存在索引中,这不适合很大很长的词语,适合于显示一些不经过直接搜索的结果值。
·          UnStored与UnIndexed正好相反,将被切词和索引,但是不保存在索引中,这适合巨大文本,如帖子内容、页面内容等。
·          Text是实现切词、索引,并且保存在索引中。
上面是建立或者添加索引,那么如何删除索引呢?
建立索引后,每个所有对应一个org.apache.lucene.index.Term对象,那么可以根据索引的KEYWORD创建一个Term对象,
  1. Term messageIDTerm =new Term("mID", Long.toString(indexId));  

 

然后:

IndexReader reader = IndexReader.open(indexDir);

通过IndexReader的delete方法删除指定的索引

reader.delete(messageIDTerm);

 这里,建立索引的时候,keyword名称指定为mID

(2)建立完成后,就可以直接搜索特定的词语了。搜索语句一般代码如下:
Searcher searcher = new IndexSearcher((indexDir);  //创建一个搜索器
也可以这样创建:
  1. Directory searchDirectory = FSDirectory.getDirectory(indexPath, false);   
  2.  IndexReader reader = IndexReader.open(searchDirectory);   
  3.   Searcher searcher = new IndexSearcher(reader);  
//使用和索引同样的语言分析器
Query query = QueryParser.parse(queryString, "body", new StandardAnalyzer());
//搜索结果使用Hits存储
Hits hits = searcher.search(query);
//通过hits得到相应字段的数据和查询的匹配度
for (int i=0; i
      System.out.println(hits.doc(i).get("fieldname "));
};
分享到:
评论
1 楼 jefferson 2006-11-16  
继续,过滤器的使用
1、field的过滤器:
Filter.add(new FieldFilter("字段名", 字段值));
2、日期的过滤器:
a、
Filter.add(new DateFilter("creationDate", beforeDate, afterDate));

b、
Filter.add(DateFilter.After("creationDate", afterDate));
c、
Filter.add(DateFilter.Before("creationDate", beforeDate));
最后,将过滤器作为参数传入查询方法:
searcher.search(query, Filter);

相关推荐

    lucene简单介绍及solr搭建使用

    标题“lucene简单介绍及solr搭建使用”涉及了两个主要的开源搜索技术:Lucene和Solr。Lucene是Java开发的一个全文检索库,而Solr则是基于Lucene构建的企业级搜索平台,提供了更高级的功能和管理界面。 **Lucene简介...

    Lucene的简单介绍

    Lucene的目标是为软件开发人员提供简单易用的工具包,方便地在目标系统中实现全文搜索功能或构建一个完整的全文搜索引擎。 Lucene的主要优点包括: 1. 索引文件格式独立于应用平台:Lucene定义了一套以8位字节为...

    lucene的简单介绍以及使用

    **Lucene 简介** Lucene 是一个开源的全文搜索框架,由 Apache 软件基金会维护。它不是一个可以直接使用的应用程序,而是一个为开发者提供构建全文搜索功能的底层库,核心库为 lucene-core-2.2.0.jar。Lucene 提供了...

    Lucene简介.介绍

    与传统数据库相比,Lucene 更专注于全文检索,而不仅仅是简单的模糊匹配。在数据库中,`LIKE "%keyword%"` 查询可能效率低下,因为它需要扫描整个表。而在 Lucene 中,索引是预排序的,因此搜索速度更快。Lucene 的...

    Lucene介绍的PPT

    【Lucene介绍】 Lucene是一个基于Java的全文检索库,由Apache软件基金会的Jakarta项目维护。它不是一个完整的全文搜索引擎,而是一个可嵌入到其他应用程序中的库,用于实现高效、快速的全文检索功能。Lucene的目标...

    lucene索引简单介绍

    Lucene是Apache软件基金会的一个开源项目,它是一个高性能、全文检索库,被广泛应用于各种搜索引擎的开发。在本文中,我们将深入探讨Lucene的索引机制,理解其核心概念以及如何创建和使用索引。 首先,我们需要了解...

    经典的lucene实例代码及详细解析以及lucene结构流程介绍

    经典的Lucene实例代码及详细解析以及Lucene结构流程介绍 Lucene是一个功能强大且灵活的开源搜索引擎库,它提供了一个简单易用的API,允许开发者快速构建搜索应用程序。下面将对Lucene的实例代码和结构流程进行详细...

    Lucene 索引的简单使用

    以上就是关于“Lucene索引的简单使用”的详细介绍,包括其核心概念、创建和查询索引的步骤以及一些高级特性。希望对你理解和应用Lucene有所帮助。在实际开发中,可以根据需求选择合适的Analyzer,优化索引策略,以...

    Lucene 常用功能介绍视频详解

    **Lucene 常用功能介绍** Lucene 是一个高性能、全文检索库,由Apache软件基金会开发并维护。它提供了一个简单但功能强大的API,用于在各种应用中实现全文索引和搜索。以下是对Lucene常用功能的详细介绍: 1. **...

    使用compass+lucene实现简单的全文检索功能

    本文将详细介绍如何使用 Compass 和 Lucene 实现一个简单的全文检索功能。 首先,Lucene 是一个高性能、全功能的文本分析库,主要用于信息检索。它提供了索引和搜索大量文本数据的能力,包括分词、分析、存储和搜索...

    Lucene介绍视频教程

    x-oss-process=style/pnp8(39.97KB,下载次数:225)下载附件2019-10-2502:02上传〖课程介绍〗:Lucene是apache下的一个开放源代码的全文检索引擎工具包。提供了完整的查询引擎和索引引擎。Lucene的目的是为软件开发人员...

    开源搜索框架lucene介绍

    ### 开源搜索框架Lucene介绍 #### 一、Lucene简介 Lucene是一款非常优秀且成熟的开源全文索引检索工具包,它完全采用Java语言编写,由Doug Cutting于1999年创建,并于2001年10月捐赠给了Apache基金会,成为Apache...

    paoding+lucene实现全文检索功能简单实例

    本实例将介绍如何结合Paoding和Lucene来实现一个简单的全文检索系统,这在处理中文数据时尤其有效。 首先,让我们了解一下Paoding。Paoding是一款优秀的中文分词库,它针对中文的特点进行了优化,能有效地进行词语...

    Lucene介绍,全文检索

    **Lucene介绍** Lucene是一个基于Java的全文索引工具包,由Doug Cutting创建,最初在www.lucene.com发布,后来成为Apache基金会Jakarta项目的一部分。Lucene不是完整的全文搜索引擎应用,而是一个可嵌入到其他应用...

    lucene 简单例子

    本例子将介绍如何使用 Lucene 进行基本的索引和查询操作。 首先,我们需要引入 Lucene 的依赖。在 Java 项目中,你可以通过 Maven 或 Gradle 将 Lucene 添加到你的构建文件中。例如,如果你使用 Maven,可以在 `pom...

    lucene in action 第二版

    根据给定文件信息,这里将详细介绍关于《Lucene in Action 第二版》书籍的知识点。这本书是关于Java Lucene教程的,主要面向开发者学习使用Lucene进行搜索引擎开发。 ### 书名知识点: 《Lucene in Action 第二版...

    lucene所有的jar包

    本文将详细介绍“lucene所有的jar包”,特别是其中的“my的jar”和“ik的jar包”,以及它们在Lucene 4.9.0版本中的作用和使用方法。 一、Lucene简介 Lucene是Apache软件基金会的一个开放源代码项目,它提供了一个...

    lucene 对 xml建立索引

    本文将详细介绍如何利用Lucene对XML文档进行索引建立的过程,并通过示例代码具体阐述其实现方法。 #### 二、基础知识 1. **Lucene简介** - Lucene是一个开源的全文搜索引擎库,能够帮助开发者构建应用程序内的搜索...

Global site tag (gtag.js) - Google Analytics