Lucene索引维护(添加、修改、删除)
1. Field域属性分类
添加文档的时候,我们文档当中包含多个域,那么域的类型是我们自定义的,上个案例使用的TextField域,那么这个域他会自动分词,然后存储
我们要根据数据类型和数据的用途合理的选择合适的域
Field类:
StringField(fieldName,fieldValue,Stroe.YES/NO) 存储的数据类型为字符串,包含索引,是否存储根据Stroe定义,不会经过分析器
StroeField(fieldName,fieldValue) 支持多种数据类型,不分析,不建立索引,默认保存到索引库当中
LongPoint(name,value) 会进行分析,会创建索引,但是不会保存到索引库当中
TextField(fieldName,fieldValue,Stroe.YES/NO) 会分析,会创建索引,是否保存取决Store
2. 添加索引
@Test
public void createDocument() throws IOException {
//创建IndexWriter对象 参数一:索引库位置 参数二:指定配置
IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("E:\\Y2学习\\Lucene\\索引库\\Index").toPath()),
new IndexWriterConfig(new IKAnalyzer()));
//创建一个文档对象
Document document=new Document();
document.add(new TextField("fieldName","hehe.txt", Field.Store.YES));
document.add(new StoredField("fieldPath","c://hehe.txt"));
document.add(new LongPoint("fieldSize",123));
document.add(new StoredField("fieldSize",123));
document.add(new TextField("fieldContent","ojdbc14和ikanalyzer的maven找不到的解决办法,手动发布oJdbc14到maven仓库,手动发布ikanalyzer到maven,同时本教程适用于所有jar包发布 下载 IKAnalyzer结合Lucene使用和单独使用例子 简单性能测试 11-26 阅读数 1890 IKAnalyzer是一个开源基于JAVA语言的 .", Field.Store.YES));
//创建索引,将文档添加到索引库当中
indexWriter.addDocument(document);
//关闭
indexWriter.close();
}

3. 修改索引:原理-先删除再添加
/**
* 索引修改,修改fieldName域中关键词匹配到全文检索的文档
* @throws IOException
*/
@Test
public void updateDocument() throws IOException {
//创建IndexWriter对象 参数一:索引库位置 参数二:指定配置
IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("E:\\Y2学习\\Lucene\\索引库\\Index").toPath()),
new IndexWriterConfig(new IKAnalyzer())); //创建文档
Document document=new Document();
document.add(new TextField("fieldName","new.txt", Field.Store.YES));
document.add(new StoredField("fieldPath","c://new.txt"));
document.add(new LongPoint("fieldSize",456));
document.add(new StoredField("fieldSize",456));
document.add(new TextField("fieldContent","修改fieldName为全文检索的文档,进行文档替换,先删除掉fieldName为全文检索的两个文档,再添加一个fileName为new的新文档", Field.Store.YES)); //修改 参数一为条件 参数二为修改的文档值
indexWriter.updateDocument(new Term("fieldName","全文检索"),document); //关闭
indexWriter.close();
}
4.删除索引
4.1 删除全部:慎用
@Test
public void deleteAllDocument() throws IOException {
//创建IndexWriter对象 参数一:索引库位置 参数二:指定配置
IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("E:\\Y2学习\\Lucene\\索引库\\Index").toPath()),
new IndexWriterConfig(new IKAnalyzer())); //删除索引
indexWriter.deleteAll();
//关闭
indexWriter.close();
}

4.2 根据域和关键词删除
/**
* 根据域和关键词进行删除
* @throws IOException
*/
@Test
public void deleteByFieldAndTermDocument() throws IOException {
//创建IndexWriter对象 参数一:索引库位置 参数二:指定配置
IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("E:\\Y2学习\\Lucene\\索引库\\Index").toPath()),
new IndexWriterConfig(new IKAnalyzer())); //定义一个删除条件,定义一个查询对象
Query query=new TermQuery(new Term("fieldName","全文检索"));
//删除
indexWriter.deleteDocuments(query); //关闭
indexWriter.close();
}
没有执行条件删除时一共15个文档

readIndex(全文检索) 搜索到俩个文档

执行条件删除后

Lucene索引维护(添加、修改、删除)的更多相关文章
- JavaWeb_day03_员工信息添加修改删除
day03员工的添加,修改,删除 修改功能 思路 : 点击修改员工数据之后,跳转到单行文本,查询要修改的员工id的全部信息,主键id设置为readonly,其余的都可以修改, 修改之后,提交按钮,提交 ...
- Web 1三级联动 下拉框 2添加修改删除 弹框
Web 三级联动 下拉框 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...
- 打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件
第三章 建议学习时间8小时 总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...
- SpringBoot定时任务升级篇(动态添加修改删除定时任务)
需求缘起:在发布了<Spring Boot定时任务升级篇>之后得到不少反馈,其中有一个反馈就是如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明: ...
- 【转】C#添加修改删除文件文件夹大全
[转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+& ...
- lucene索引的更新和删除
索引的删除: IndexReader和IndexWriter都由删除索引的功能,但这两者是有区别的, 使用IndexReader删除索引时,索引会马上被删除,其有两种方法,可以删除索引deleteDo ...
- Lucene——索引的创建、删除、修改
package cn.tz.lucene; import java.io.File; import java.util.ArrayList; import java.util.List; import ...
- Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)
1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...
- oracle 表字段添加 修改 删除语法
修改列名 alter table 表明 rename column rename 老列名 to 新列名添加 字段alter table 表名 add(字段名 类型):删除字段alter table 表 ...
随机推荐
- 深入理解windows 消息机制
深入理解Windows消息机制 今天我们来学一学Windows消息机制,我们知道在传统的C语音程序中,当我们需要打开一个文件时,我们可以调用fopen()函数,这个函数最后又会调用操作系统提供的函数以 ...
- ASP.NET Core on K8S 入门学习系列文章目录
一.关于这个系列 自从2018年底离开工作了3年的M公司加入X公司之后,开始了ASP.NET Core的实践,包括微服务架构与容器化等等.我们的实践是渐进的,当我们的微服务数量到了一定值时,发现运维工 ...
- PS-蒙版的深入解析
ps四大核心技术是什么?通道.蒙版.路径.选区 通道: 通道的详解,不过比较早的文章了. http://www.blueidea.com/tech/graph/2004/2056.asp PS通道快速 ...
- Codeforces 1087C Connect Three (思维+模拟)
题意: 网格图选中三个格,让你选中一些格子把这三个格子连起来,使得选中的格子总数最小.最后输出方案 网格范围为1000 思路: 首先两点间连起来最少需要的格子为他们的曼哈顿距离 然后连接方案一定是曼哈 ...
- Codeforces 922 C - Robot Vacuum Cleaner (贪心、数据结构、sort中的cmp)
题目链接:点击打开链接 Pushok the dog has been chasing Imp for a few hours already. Fortunately, Imp knows that ...
- 【题解】删数问题(Noip1994)
题目 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 11506 通过数: 3852 [题目描述] 输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序组成一个新 ...
- 如何在git搭建自己博客
1.安装Node.js和配置好Node.js环境,打开cmd命令行输入:node v.2.安装Git和配置好Git环境,打开cmd命令行输入:git --version.3.Github账户注册和新建 ...
- golang的timer一些坑
本文代码部分基于dive-to-gosync-workshop的代码 Golang 的NewTimer方法调用后,生成的timer会放入最小堆,一个后台goroutine会扫描这个堆,将到时的time ...
- Zookeeper 应用实例
配置管理 程序总是需要配置的,如果程序分散部署在多台机器上,要逐个改变配置就变得困难.好吧,现在把这些配置全部放到zookeeper上去,保存在 Zookeeper 的某个目录节点中,然后所有相关应用 ...
- Day6前端学习之路——布局
一.定位 1)静态定位 position:static(默认) 2)相对定位 position:relative(要配合top.bottom.left.right等属性来使用) 3)绝对定位 pos ...