Lucene的UpdateDocument

Lucene从根本上来讲,并不支持对Document的更新操作,它提供的UpdateDocument方法其实是先删除后新增。在实际使用过程中,发现该方法有如下限制:

1、设置的Term对应的Field必须是字符串类型

也就是如下的组合能正常执行:

Document document = new Document();
document.Add(new Field("serviceid", serviceQueryResult.ServiceId.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
document.Add(new NumericField("shopid", Field.Store.YES, true).SetIntValue(serviceQueryResult.ShopId));
document.Add(new Field("servicename", serviceQueryResult.ServiceName, Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
writer.AddDocument(document);

writer.UpdateDocument(new Term("serviceid", serviceQueryResult.ServiceId.ToString()), document);

若serviceid是整型的,则不能直接用UpdateDocument方法来更新必须先删除后创建,如下:

Document document = new Document();
document.Add(new NumericField("serviceid", Field.Store.YES, true).SetIntValue(serviceQueryResult.ServiceId));
document.Add(new NumericField("shopid", Field.Store.YES, true).SetIntValue(serviceQueryResult.ShopId));
document.Add(new Field("servicename", serviceQueryResult.ServiceName, Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
writer.AddDocument(document);

writer.DeleteDocuments(NumericRangeQuery.NewIntRange("serviceid", serviceQueryResult.ServiceId, serviceQueryResult.ServiceId, true, true));
writer.AddDocument(document);

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-03 01:58:11

Lucene的UpdateDocument的相关文章

ERROR org.hibernate.search.exception.impl.LogErrorHandler - HSEARCH000058: HSEARCH000183: Unable to index instance of type

2019-06-12 10:17:42 [Hibernate Search: entityloader-1] ERROR org.hibernate.search.exception.impl.LogErrorHandler - HSEARCH000058: HSEARCH000183: Unable to index instance of type net.shopxx.entity.Product while batch indexing: Entity of type net.shopx

Lucene add、updateDocument添加、更新与search查询(转)

package com.lucene; import java.io.IOException; 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; import org.a

全文检索技术---Lucene

1       Lucene介绍 1.1   什么是Lucene Lucene是apache下的一个开源的全文检索引擎工具包.它为软件开发人员提供一个简单易用的工具包(类库),以方便的在目标系统中实现全文检索的功能. 1.2   全文检索的应用场景 1.2.1  搜索引擎 ©注意: Lucene和搜索引擎是不同的,Lucene是一套用java或其它语言写的全文检索的工具包.它为应用程序提供了很多个api接口去调用,可以简单理解为是一套实现全文检索的类库.搜索引擎是一个全文检索系统,它是一个单独运

Lucene 4.X 全套教程

http://www.cnblogs.com/forfuture1978/category/300665.html Lucene 4.X 倒排索引原理与实现: (3) Term Dictionary和Index文件 (FST详细解析) 摘要: 我们来看最复杂的部分,就是Term Dictionary和Term Index文件,Term Dictionary文件的后缀名为tim,Term Index文件的后缀名是tip,格式如图所示.Term Dictionary文件首先是一个Header,接下来

lucene

Lucene 是apache下的一个开源的全文检索引擎工具包(类库).它的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能. 它只是一个工具包,并不是一个完整的搜索引擎 全文检索 全文检索首先将要查询的目标文档中的词提取出来,组成索引,通过查询索引达到搜索目标文档的目的.这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search). lucene全文检索流程 全文检索要搜索的数据信息格式是多种多样的,比如:搜索引擎(百度, googl

Lucene入门案例一

1. 配置开发环境 官方网站:http://lucene.apache.org/ Jdk要求:1.7以上 创建索引库必须的jar包(lucene-core-4.10.3.jar,lucene-analyzers-common-4.10.3.jar) 其他jar包(commons-io-2.4.jar , junit-4.9.jar) 2. 创建索引库 第一步:创建一个java工程,并导入jar包. 第二步:创建一个indexwriter对象. 1)指定索引库的存放位置Directory对象 2)

Lucene教程

一:简单的示例 1.1:生成索引 1.1.1:Field.Store和Field.Index 1.1.2:为数字生成索引 1.1.3:为索引加权 1.1.4:为日期生成索引 1.2:查询 1.2.1:介绍IndexReader 1.3:删除 1.3.1:还原删除的文档 1.3.2:清空回收站时面的数据 1.4:更新 前言:本教程用于Lucene3.5,Maven地址为 <dependency> <groupId>org.apache.lucene</groupId> &

【手把手教你全文检索】Lucene索引的【增、删、改、查】

    阅读目录 创建索引 增量添加索引 删除索引 更新索引 通过索引查询关键字 全部代码 参考资料 前言 搞检索的,应该多少都会了解Lucene一些,它开源而且简单上手,官方API足够编写些小DEMO.并且根据倒排索引,实现快速检索.本文就简单的实现增量添加索引,删除索引,通过关键字查询,以及更新索引等操作. 目前博猪使用的不爽的地方就是,读取文件内容进行全文检索时,需要自己编写读取过程(这个solr免费帮我们实现).而且创建索引的过程比较慢,还有很大的优化空间,这个就要细心下来研究了. 回到

【Lucene实验1】构建索引

一.实验名称:构建索引 二.实验日期:2013/9/21 三.实验目的: 1)        能理解Lucene中的Document-Field结构的数据建模过程: 2)        能编针对特定数据生成索引文件. 四.实验用的仪器和材料: MyEclipse 10,JDK 五.实验的步骤和方法: 题目一:在指定目录生成表示3本书的索引,要求建立3个document分别存放书名数据.把生成的索引文件截好图(复合索引与一般索引各生成一次) 图1:一般索引的截图 图2:复合索引的截图 题目二:修改