Lucene学习笔记2-Lucene的CRUD(V7.1)
在进行CRUD的时候请注意IndexWriterConfig的设置。
public class IndexCRUD {
private String ids[]={"","",""};
private String citys[]={"jining","suzhou","shanghai"};
private String desc[]={
"Qingdao is a beautiful city.",
"Nanjing is a city of culture.",
"Shanghai is a bustling city."
};
private Directory dir;
private IndexWriter getWriter()throws Exception{
dir= FSDirectory.open(Paths.get(LuceneConstants.IndexDir01));
Analyzer analyzer=new StandardAnalyzer();
IndexWriterConfig config=new IndexWriterConfig(analyzer);
//config.setOpenMode(IndexWriterConfig.OpenMode.CREATE);//删除和修改的时候不能把OpenMode设为CREATE,否则会忽略term全部删除
IndexWriter indexWriter=new IndexWriter(dir,config);
return indexWriter;
}
//建立索引
public void createUpIndex() throws Exception{
IndexWriter indexWriter=getWriter();
for(int i=;i<ids.length;i++){
Document document=new Document();
document.add(new StringField("id",ids[i], Field.Store.YES));
document.add(new StringField("city",citys[i],Field.Store.YES));
document.add(new TextField("desc",desc[i],Field.Store.YES));
indexWriter.addDocument(document);
}
indexWriter.close();
}
//删除
public void deleteWithoutMerge()throws Exception {
IndexWriter writer = getWriter();
System.out.println("删除前:" + writer.numDocs());
writer.deleteDocuments(new Term("id", ""));// 强制删除此时删除的文档并不会被完全删除,而是存储在一个回收站中的,可以恢复
writer.commit(); //更改索引要提交,和提交数据库事务一个概念,真正的删除
System.out.println("writer.maxDoc():" + writer.maxDoc());
System.out.println("writer.numDocs():" + writer.numDocs());
writer.close();
}
//删除后合并索引
public void DeleteWithMerge()throws Exception{
IndexWriter writer=getWriter();
System.out.println("删除前:"+writer.numDocs());
writer.deleteDocuments(new Term("id",""));// 强制删除此时删除的文档并不会被完全删除,而是存储在一个回收站中的,可以恢复
writer.forceMergeDeletes(); //强制合并删除的索引信息,索引量大的时候不推荐使用,真正的删除
writer.commit();
System.out.println("writer.maxDoc():"+writer.maxDoc());
System.out.println("writer.numDocs():"+writer.numDocs());
writer.close();
}
public void update()throws Exception{
IndexWriter writer=getWriter();
Document doc=new Document();
doc.add(new StringField("id", "", Field.Store.YES));
doc.add(new StringField("city","qingdao",Field.Store.YES));
doc.add(new TextField("desc", "It's a dressed city.", Field.Store.YES));
writer.updateDocument(new Term("id",""), doc);
writer.close();
}
public List<String> Search() throws Exception{
QueryParser queryParser=new QueryParser("desc",new StandardAnalyzer());
Query query=queryParser.parse("city");
if (null==dir) dir= FSDirectory.open(Paths.get(LuceneConstants.IndexDir01));
IndexReader reader=DirectoryReader.open(dir);
IndexSearcher searcher=new IndexSearcher(reader);
TopDocs topDocs=searcher.search(query,);
List<String> list=new ArrayList<String>();
for (ScoreDoc scoreDoc:topDocs.scoreDocs) {
Document document = searcher.doc(scoreDoc.doc);
list.add(document.get("id")+document.get("city")+":"+document.get("desc"));
}
reader.close();
return list;
}
}
Lucene学习笔记2-Lucene的CRUD(V7.1)的更多相关文章
- Lucene学习笔记(更新)
1.Lucene学习笔记 http://www.cnblogs.com/hanganglin/articles/3453415.html
- MongoDB学习笔记:文档Crud Shell
MongoDB学习笔记:文档Crud Shell 文档插入 一.插入语法 db.collection.insertOne() 将单个文档插入到集合中.db.collection.insertMan ...
- Lucene学习笔记1(V7.1)
Lucene是一个搜索类库,solr.nutch和elasticsearch都是基于Lucene.个人感觉学习高级搜索引擎应用程序之前 有必要了解Lucene. 开发环境:idea maven spr ...
- Lucene学习笔记一
Lucene课件 1.全文检索 1.1常见的全文检索 在window系统中,可以指定磁盘中的某一个位置来搜索你想要得到的东西.这个功能是windows比较常用的功能.在这个界面中能搜索的内容有*.*, ...
- Apache Lucene学习笔记
Hadoop概述 Apache lucene: 全球第一个开源的全文检索引擎工具包 完整的查询引擎和搜索引擎 部分文本分析引擎 开发人员在此基础建立完整的全文检索引擎 以下为转载:http://www ...
- Lucene学习笔记
师兄推荐我学习Lucene这门技术,用了两天时间,大概整理了一下相关知识点. 一.什么是Lucene Lucene即全文检索.全文检索是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明 ...
- Lucene学习笔记: 四,Lucene索引过程分析
对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后 ...
- Lucene学习笔记:基础
Lucence是Apache的一个全文检索引擎工具包.可以将采集的数据存储到索引库中,然后在根据查询条件从索引库中取出结果.索引库可以存在内存中或者存在硬盘上. 本文主要是参考了这篇博客进行学习的,原 ...
- Lucene学习笔记: 五,Lucene搜索过程解析
一.Lucene搜索过程总论 搜索的过程总的来说就是将词典及倒排表信息从索引中读出来,根据用户输入的查询语句合并倒排表,得到结果文档集并对文档进行打分的过程. 其可用如下图示: 总共包括以下几个过程: ...
随机推荐
- Qt编写导航按钮
做各种各样的界面的时候,经常需要做一排按钮用于切换到对应界面,俗称导航按钮或者导航菜单,参照过各种各样的主界面导航布局,特意编写导航按钮自定义控件,结合各种情况,继承自QPushButton.已集成在 ...
- js获取字符串最后一位方法
方法一:运用String对象下的charAt方法 charAt() 方法可返回指定位置的字符. str.charAt(str.length – 1) 请注意,JavaScript 并没有一种有别于字符 ...
- 麻瓜之我要学sql,啦啦啦啦
四张表 学生表:编号,姓名,性别,班级,生日 CREATE TABLE IF NOT EXISTS student( sno TINYINT UNSIGNED NOT NULL, sname ) NO ...
- jquery中this和event.target的区别
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python中的if __name__=='__main__': main()解析
python中我们会看到一段代码是这样的: if __name__=='__main__': main() 这段代码的什么意思,我们可以知道代码的意思是如果__name__=='__main__'为T ...
- EditTable-V1.0--续集
上一个功能有点少,这个V1.0版本是最小集合的. ================================= 双击单元格编辑,可以添加,删除单元格.并且保持相邻单元格不同的背景色. 引用了“M ...
- 【CSS初识】
一.CSS是什么? CSS是一种样式表语言,用于为HTML文档定义布局.例如,CSS涉及字体.颜色.边距.高度.宽度.背景图像.高级定位等方面. HTML用于结构化内容:CSS用于格式化结构化的内容. ...
- [Spark內核] 第41课:Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解
本课主题 Checkpoint 运行原理图 Checkpoint 源码解析 引言 Checkpoint 到底是什么和需要用 Checkpoint 解决什么问题: Spark 在生产环境下经常会面临 T ...
- vue-父子组件嵌套的示例
组件注册: // 注册组件 Vue.component('my-component', { template: '<div>A custom component!</div>' ...
- 巧用CSS实现宝马LOGO
某天突然遇到一个有趣的面试题,需用CSS实现一个宝马的Logo,第一反应就是这不是老生常谈的八卦图的小变形吗,只需用伪元素就可轻易的实现啦,但是细看要求说只能在一个标签里写样式,所以呜呜呜...请教下 ...