一、代码分析

/*** Lucene入门* 操作索引*/
public class ManageIndex {public IndexWriter getIndexWriter() throws Exception {//设置索引库的位置Directory directory = FSDirectory.open(new File("E:\\zhanghaoBF\\luceneSolr\\indexLibrary").toPath());Analyzer analyzer = new StandardAnalyzer();//创建分词器对象(官方推荐标准分词器)IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);//设置使用的分词器return new IndexWriter(directory, indexWriterConfig);//索引对象
    }/*** 全删除(PS:索引里面的文档也会删掉)** @throws Exception*/@Testpublic void deleteAllIndex() throws Exception {IndexWriter indexWriter = getIndexWriter();//获取索引的流对象indexWriter.deleteAll();//删除全部索引indexWriter.close();//关流
    }/*** 按条件删除(PS:索引里面的文档也会删掉)** @throws Exception*/@Testpublic void deleteIndex() throws Exception {IndexWriter indexWriter = getIndexWriter();//获取索引的流对象Query query = new TermQuery(new Term("fileContent", "lucene"));//PS:TermQuery为精准匹配indexWriter.deleteDocuments(query);//按条件删除索引indexWriter.close();//关流
    }/*** 修改(PS:先删除后新增,与数据库里面的修改不一样,注意区分)** @throws Exception*/@Testpublic void updateIndex() throws Exception {//获取索引的流对象IndexWriter indexWriter = getIndexWriter();//构建一个文档对象Document doc = new Document();doc.add(new TextField("fileName", "新的文件名称", Field.Store.YES));doc.add(new TextField("fileContent", "新的文件内容", Field.Store.YES));//调用更新操作,先把符合条件的索引删掉(包括term和存在索引库的文档),然后把刚才新增的文档对象加入到索引库中indexWriter.updateDocument(new Term("fileName", "是"), doc);//按条件删除索引,再加入新的索引//PS:删掉的文档还是会占用对应的文档ID,新增的文档排在最后(和数据库ID自增时的删除再添加一个道理)//关流
        indexWriter.close();}
}

二、注意事项

1、删除的时候,索引库里对应ID下的term和文档都会删除

2、修改操作其实是先把符合条件的term和文档都会删掉,然后再加入新的文档。

3、删掉的文档,文档ID不会释放,还是被占用的。

4、流用完一定要记得关。

转载于:https://www.cnblogs.com/riches/p/11450606.html

搜索引擎学习(五)Lucene操作索引相关推荐

  1. Inside Lucene/超人气搜索引擎学习(2.0)-读取索引

    上一节 下一节 Index in Practice 索引: 按图索骥 TermDoc从哪读取数据,自然是硬盘上已经建好的某个index, 具体说, 是从index中的某个文件读取. 要了解TermDo ...

  2. Lucene学习总结之三:Lucene的索引文件格式(1)

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  3. C#多线程学习(五) 多线程的自动管理(定时器) (转载系列)——继续搜索引擎研究...

    Timer类:设置一个定时器,定时执行用户指定的函数.               定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. 初始化一个Timer对象: Timer timer ...

  4. python复制指定字符串_python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)...

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  5. Lucene.Net无障碍学习和使用:索引篇

    项目中可能需要再次用到Lucene.Net,利用空闲时间写了个demo,主要涉及到索引的创建.删除.更新和一个简单查询.在本文示例中,Lucene.Net的版本是2.4.0,某些类和方法与最新版本或者 ...

  6. 微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI 索引库 DSL查询 RestClient 黑马旅游

    分布式搜索引擎01 -- elasticsearch基础 0.学习目标 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是 ...

  7. ElasticSearch入门简介、安装ES(安装Kibana和IK分词器)使用 Postman连接ES进行测、ESRestAPI(操作索引CRUD操作文档CRUD)、练习

    要理解倒排索引 要能够使用DSL命令操作索引库 要能够使用DSL命令操作文档 要能够使用RestAPI操作索引库.文档 一.ES简介 理解倒排索引的概念和作用 理解es和MySql的区别和使用场景 1 ...

  8. Lucene.Net---1索引的建立

    转载地址:http://blog.csdn.net/xuezhongsong/article/details/4388241 在建立索引前,先了解下lucene中的一些与索引相关的重要类. 为了对文档 ...

  9. Hbase深入学习(五) 命令及查看状态

    Hbase深入学习(五) ―― 命令及查看状态 HBase是Apache Hadoop中的一个子项目,Hbase依托于Hadoop的HDFS作为最基本存储基础单元,通过使用hadoop的DFS工具就可 ...

最新文章

  1. pmp考试标准有哪些?
  2. 解决nginx使用proxy_pass反向代理时,session丢失的问题
  3. 字节跳动每一轮都会考算法吗?已拿Offer的兄弟分享经验!
  4. mongodb[三] 文档操作:插入、更新、删除
  5. TensorFlow 笔记4--使用tensorboard
  6. (转)yi_meng linux 下 ifcfg-eth0 配置 以及ifconfig、ifup、ifdown区别
  7. MySQL中整型和字符串类型指定长度的含义
  8. 案例详解:Linux文件系统异常导致数据库文件无法访问
  9. 【SQL】日期型函数
  10. mac和linux系统配置git tab自动补全
  11. 计算机的cpu故障,计算机cpu常见故障
  12. win10计算机文件夹隐藏,Win10此电脑6个文件夹隐藏方法
  13. mysql分页中offset作用_mysql中分页查询(LIMIT和OFFSET关键字讲解)一语道破天机
  14. 设计模式(十一)策略模式
  15. 有效 TCP RST
  16. 水水水水水水水水水水水水水水水水水水水
  17. 视频教程-Java进阶高手课-Spring精讲精练-Java
  18. Golang type assertion 类型断言
  19. WAS以及weblogic日志说明
  20. 用GIF图片来告诉大家程序猿的真实生活 ————“你熬了一整夜、耗了一整天,开始调试代码时:” 那张最有感觉了,你们感受一下。。。

热门文章

  1. pdfminer3k 官方文档_IPFS官方周报112期
  2. linux测试怎样看,linux入门篇:如何查看centos版本
  3. exfat linux 驱动_(实例)Linux 内核添加exfat驱动
  4. mediumtext 长度_InnoDB表行长度超限问题的处理和思考
  5. 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...
  6. 每天一道LeetCode-----根据先序遍历和中序遍历还原二叉树
  7. VC++ ipaddress控件的使用
  8. linux中fork和exec
  9. 牛客小白9 换个角度思考(离线+树状数组)
  10. 8.了解如何把vector和string数据传给旧的API