初识Lucene 4.5.0 全文搜索--(二)

上一篇文章初识Lucene 4.5.0--(一)已经介绍了如何创建索引与检索索引。接下来就是删除与更新啦~

一、删除索引。

原本3.x版本时 IndexWriter 与 IndexReader 都是有删除方法的,让我们先来看看lucene 3.6 api文档中的IndexReader的描述:

从4.0开始已经被删除了,所以现在只能用IndexWriter中的方法来进行删除。有哪些方法呢?继续看文档(lucene 4.5 api):

除了上面的六个外还有一个方法tryDeleteDocument(IndexReader reader,int docID),但这个方法是有限制的( NOTE: this method can only delete documents visible to the currently open NRT reader. If you need to delete documents indexed after opening the NRT reader you must use the other deleteDocument methods.)我们最常用的就是deleteDocuments(),不同的参数方法被重载了四次。我以deleteDocuments(Term term)为例做个Demo演示:

/**
  * 删除索引
  * @param id
  */
 public void delete(String id){
  IndexWriter indexWriter = IndexUtil.getIndexWriter();
  //Term 为最小的单元相当于是对应着field的字段
  Term term = new Term("id",id);
  try {
   //参数可以使一个选项,也可以是个query或者term(精确查找值)
   indexWriter.deleteDocuments(term);
   indexWriter.commit();  
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   if(null!=indexWriter){
    try {
     indexWriter.close();
    } catch (IOException e) {
     e.printStackTrace();
    }         
   }
  }
 }

嗯~这样就能准确的删除掉你所指定要删的索引文件了。这里又出现了不同之处,之前版本删除了的索引并不是真的被删除,而是把索引文件存入 .del文件中(像我们windows一样把文件存入垃圾箱)。然后还可以通过undeleteAll()方法来进行恢复,但是4.0版本后这个方法也被移除了,并且没有新的方法可替代。

二、更新索引

/**
  * 更新(lucene提供的并不是真实的更新方法,实际是先删除后再添加)
  * @param lb
  * @return
  */
 public boolean update(LuceneBeans lb){
  boolean result = false;
  IndexWriter indexWriter = IndexUtil.getIndexWriter();
  try {
   Term term = new Term("id",lb.getId());
   Document doc = new Document();
   doc.add(new StringField("id",lb.getId(),Store.YES));
   doc.add(new TextField("title",lb.getTitle(),Store.YES));
   doc.add(new TextField("introduce",lb.getIntroduce(),Store.YES));
   doc.add(new StringField("addtime",lb.getAddtime(),Store.YES));
   doc.add(new StringField("category",lb.getCategory(),Store.YES));
   //参数一需要删除的索引字段、参数二将要更新的新数据
   indexWriter.updateDocument(term, doc);
   indexWriter.commit();  
   result=true;
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   if(null!=indexWriter){
    try {
     indexWriter.close();
    } catch (IOException e) {
     e.printStackTrace();
    }         
   }
  }
  return result;
 }

更新操作没什么改变,同样也是传入不同参数重载方法实现更新操作。

结语:lucene 4.5的基本操作就先介绍到这里,后续还会再更新更多的lucene博文。文中若有不准确或不正确之处还望指正,一起交流一起进步!菜鸟的天空,只要努力,越飞越高!

初识Lucene 4.5.0 全文搜索--(二),布布扣,bubuko.com

时间: 2024-12-20 10:03:16

初识Lucene 4.5.0 全文搜索--(二)的相关文章

[Elasticsearch] 全文搜索 (二) - 多词查询及查询的合并

多词查询(Multi-word Queries) 如果我们一次只能搜索一个词,那么全文搜索就会显得相当不灵活.幸运的是,通过match查询来实现多词查询也同样简单: GET /my_index/my_type/_search { "query": { "match": { "title": "BROWN DOG!" } } } 以上的查询会返回所有的四份文档: { "hits": [ { "_id

42、lucene和机器学习进行全文搜索,并排序

package com.lucene.test; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; i

初识Lucene 4.5全文搜索

近期想研究下lucene,但网络上的教程大多都是lucne 3.x版本的讲解.可是lucene版本的更新速度快的惊人,目前已经到了4.8版了,只好去查阅官方文档.虽然英文不大好,但稍微对比了下发现3.x版本至4.x版本的修改非常之大.接下来我就以4.5版来操作,分享下我对luence的初步认识. 先给大家看一张图(来至<Lucene  in  action>): 此图很形象的描述了lucene的基本流程,简而言之就是:1.创建索引:2.检索索引. 太深的道理与原理我目前也还是一知半解,所以就以

记一次企业级爬虫系统升级改造(五):基于JieBaNet+Lucene.Net实现全文搜索

实现效果: 上一篇文章有附全文搜索结果的设计图,下面截一张开发完成上线后的实图: 基本风格是模仿的百度搜索结果,绿色的分页略显小清新. 目前已采集并创建索引的文章约3W多篇,索引文件不算太大,查询速度非常棒. 刀不磨要生锈,人不学要落后.每天都要学一些新东西. 基本技术介绍: 还记得上一次做全文搜索是在2013年,主要核心设计与代码均是当时的架构师写的,自己只能算是全程参与. 当时使用的是经典搭配:盘古分词+Lucene.net. 前几篇文章有说到,盘古分词已经很多年不更新了,我在Support

Apache Solr采用Java开发、基于Lucene的全文搜索服务器

http://docs.spring.io/spring-data/solr/ 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Java开发.基于Lucene的全文搜索服务器,文档通过Http利用XML加到一个搜索集合中,查询该集合也是通过 http收到一个XML/JSON响应来实现.Solr 中存储的资源是以 Document 为对象进行存储的.每个文档由一系列的 Field 构成,每个 Field 表示资源的一个属性.Solr 中的每个 Doc

Lucene及全文搜索实现原理

Lucene及全文搜索实现原理 全文搜索 全文搜索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式.这个过程类似于通过字典中的检索字表查字的过程.全文搜索搜索引擎数据库中的数据. ????全文搜索的过程主要分为两个部分,索引的建立以及索引的搜索. 国内外的全文搜索常用的检索模型主要有向量模型,布尔模型等. 布尔模型 布尔模型是第一个信息检索的模型,可能也是最

基于JieBaNet+Lucene.Net实现全文搜索

实现效果: 上一篇文章有附全文搜索结果的设计图,下面截一张开发完成上线后的实图: 基本风格是模仿的百度搜索结果,绿色的分页略显小清新. 目前已采集并创建索引的文章约3W多篇,索引文件不算太大,查询速度非常棒. 刀不磨要生锈,人不学要落后.每天都要学一些新东西. 基本技术介绍: 还记得上一次做全文搜索是在2013年,主要核心设计与代码均是当时的架构师写的,自己只能算是全程参与. 当时使用的是经典搭配:盘古分词+Lucene.net. 前几篇文章有说到,盘古分词已经很多年不更新了,我在Support

Lucene全文搜索原理与使用

本文中主要是对于Lucene全文搜索的基础原理进行简单的分析,以及Lucene实现全文搜索的流程,之后就是Lucene在Java中的最简单使用:创建索引,查询索引库: 本文中使用的Lucene主要是4.10.3和6.0.0,两个版本的原理相同,但是API的使用并不相同: 1.结构化数据与非结构化数据 2.非结构化数据搜索 3.全文搜索 4.搜索如何实现 5.Lucene实现全文搜索流程 6.Lucene的API使用 1.结构化数据与非结构化数据 结构化数据:指具有固定格式或有限长度的数据,如数据

lucene.net 3.0.3、结合盘古分词进行搜索的小例子(转)

lucene.net 3.0.3.结合盘古分词进行搜索的小例子(分页功能) 添加:2013-12-25 更新:2013-12-26 新增分页功能. 更新:2013-12-27 新增按分类查询功能,调整索引行新增记录的图片字段. //封装类 [csharp] view plaincopyprint? using System; using System.Collections.Generic; using System.Linq; using System.Web; using Lucene.Ne