lucene索引的更新和删除
索引的删除:
IndexReader和IndexWriter都由删除索引的功能,但这两者是有区别的,
使用IndexReader删除索引时,索引会马上被删除,其有两种方法,可以删除索引deleteDocument(int docNum)和deleteDocument(Term term)前者会删除编号为docNum的document,后者会删除带有term的document。但是用这个类删除有局限性,当用此类打开的索引后来修改后会报StaleReaderException异常,并且当其他writer已经打开此索引时也会报异常。
IndexWriter可以根据多种情况进行删除deleteAll()删除所有的document、deleteDocuments(Query… queries)删除多个查询出来的document,deleteDocuments(Query query)删除query查询出来的document等等,但用Indexwriter执行删除的话一定要进行关闭,否则删除不会立马生效。
- Directory directory = FSDirectory.open(new File("d:\\lucene"));
- IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_34, new StandardAnalyzer(Version.LUCENE_34));
- //最大缓存文档数,控制写入一个新的segment前内存中保存的document的数目
- config.setMaxBufferedDocs(100);
- //控制一个segment中可以保存的最大document数目,值较大有利于追加索引的速度,默认Integer.MAX_VALUE,无需修改。
- config.setMaxBufferedDocs(Integer.MAX_VALUE);
- IndexWriter indexWriter = new IndexWriter(directory, config);
- indexWriter.deleteDocuments(new Term("id",index));
- //这两句一定要执行
- indexWriter.optimize();
- indexWriter.close();
索引的更新:
IndexWriter可以更新索引。
更新索引实际上是把要更新的document删除,然后把修改过的document加入到索引中,其方法是document(Term term,Document doc),第一个参数是删除含有term的document,第二个参数是更新后的document。
- Directory directory = FSDirectory.open(new File("d:\\lucene"));
- IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_34, new StandardAnalyzer(Version.LUCENE_34));
- //最大缓存文档数,控制写入一个新的segment前内存中保存的document的数目
- config.setMaxBufferedDocs(100);
- //控制一个segment中可以保存的最大document数目,值较大有利于追加索引的速度,默认Integer.MAX_VALUE,无需修改。
- config.setMaxBufferedDocs(Integer.MAX_VALUE);
- IndexWriter indexWriter = new IndexWriter(directory, config);
- Document doc = new Document();
- //设置Field的name是为了搜索时更精确,比如只想在title中搜索。
- Field idField = new Field("id", blog2.getId() + "", Field.Store.YES, Field.Index.NOT_ANALYZED);
- Field titleField = new Field("title", blog2.getTitle(), Field.Store.YES, Field.Index.ANALYZED);
- Field contentField = new Field("content", blog2.getContent(), Field.Store.NO, Field.Index.ANALYZED);
- Field dateField = new Field("date", blog2.getDate(), Field.Store.YES, Field.Index.NO);
- doc.add(titleField);
- doc.add(contentField);
- doc.add(idField);
- doc.add(dateField);
- indexWriter.updateDocument(new Term("id", blog2.getId() + ""), doc);
- //这两句一定要执行,不然的话,更新不会马上执行。
- indexWriter.optimize();
- indexWriter.close();
lucene索引的更新和删除的更多相关文章
- ELK学习总结(2-4)bulk 批量操作-实现多个文档的创建、索引、更新和删除
bulk 批量操作-实现多个文档的创建.索引.更新和删除 ----------------------------------------------------------------------- ...
- pymongo创建索引、更新、删除
pymongo创建索引.更新.删除 索引创建 ## collection 为数据集合collection.create_Index({'需创建索引字段': 1})collection.ensu ...
- Lucene教程(四) 索引的更新和删除
这篇文章是基于上一篇文章来写的,使用的是IndexUtil类,下面的例子不在贴出整个类的内容,只贴出具体的方法内容. 3.5版本: 先写了一个check()方法来查看索引文件的变化: /** ...
- Elasticsearch 索引、更新、删除文档
一.Elasticsearch 索引(新建)一个文档的命令: curl XPUT ' http://localhost:9200/test_es_order_index/test_es_order_t ...
- Lucene——索引的创建、删除、修改
package cn.tz.lucene; import java.io.File; import java.util.ArrayList; import java.util.List; import ...
- Lucene系列五:Lucene索引详解(IndexWriter详解、Document详解、索引更新)
一.IndexWriter详解 问题1:索引创建过程完成什么事? 分词.存储到反向索引中 1. 回顾Lucene架构图: 介绍我们编写的应用程序要完成数据的收集,再将数据以document的形式用lu ...
- Lucene 更新、删除、分页操作以及IndexWriter优化
更新操作如下: 注意:通过lukeall-1.0.0.jar 查看软件,我们可以看到,更新其实是先删除在插入, 前面我们知道索引库中有两部分的内容组成,一个是索引文件,另一个是目录文件, 目前我们更新 ...
- SQL Server索引进阶:第十三级,插入,更新,删除
在第十级到十二级中,我们看了索引的内部结构,以及改变结构造成的影响.在本文中,继续查看Insert,update,delete和merge造成的影响.首先,我们单独看一下这四个命令. 插入INSERT ...
- MongoDB的第二天(更新,删除,查询,索引)
Mongodb的更新方式有三种 update函数,操作符更新,save函数 update: 语法格式:db.COLLECTION_NAME.update({查询条件},{更新内容},{更新参数(可选) ...
随机推荐
- artZoom 图片可放大旋转
资源下载:http://www.sucaijiayuan.com/Js/TuPianDaiMa/774.html 第一步:引入文件 <link rel="stylesheet" ...
- 进程组&Session
[进程组] 1. getpgrp(), getpgid(0) 可获取进程组id, 进程组长的pid等于pgid. 如果进程组长exit, 则进程组依旧存在, 组内其它进程的组ID仍然是之前的ID, 即 ...
- 根据车辆品牌获取品牌所属公司,车标logo,创建年份等基本信息
接口:http://api.besttool.cn/?c=Car&a=brand 请求方式:post 参数: appid 请联系博主QQ987332767获取,注明车标接口,测试appid: ...
- code1105 过河
dp方程很简单: f[i] = min{ f[i-j] } + stone[i] 但是数据10^9太大了,超时超空间,这样只能过30% 来自:http://blog.csdn.net/w1996070 ...
- ajax数据流传参
- dedecms实例化对象
1.建表 2.创建实体类 4.tc文件加载该实体类 5.用的时候,引入tc.php文件,并实例化
- 文字如何实现完美UI?文本排版设计告诉你
一部手机,电量充足,网络通畅,就足以让我们打发一天的时光,尽情沉浸在手机时代的缤纷世界里.这个信息资源无穷尽的手机网络世界,是设计师和开发者们在不停的探索中一路一步精心打造.如何进一步美化这个世界,优 ...
- mongo学习- 副本集 大多数原则
副本集中有一个重要的概念“大多数”,意思是说,选择主节点需要大多数决定(本人亲自做了实验) 步骤: 1.开启副本集(如果没有配置好 副本集的 亲参考我的上篇文章 https://www.cnblog ...
- ADO.net开放式并发
https://docs.microsoft.com/zh-cn/dotnet/framework/data/adonet/optimistic-concurrency 在多用户环境中,有两种用于更新 ...
- 机器学习—集成学习(GBDT)
一.原理部分: 图片形式~ 二.sklearn实现: 可以看看这个:https://blog.csdn.net/han_xiaoyang/article/details/52663170 1.分类: ...