lucene学习笔记二(基于数组的lucene检索,索引删除)

构建数组:

private String[] ids = {"1","2","3","4","5","6"};
	private String[] emails = {"[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]	"};
	private String[] contents = {
			"welcome to visited the space",
			"hello,my name is scc",
			"the day is first",
			"tommorw",
			"hello world",
			"i like football"
			};
	private int [] attachs = {2,3,1,4,5,6};
	private String[] names = {"张三","李四","王五","jetty","mick","divid"};

创建Directory:

private Directory directory;
	public IndexUtil(){
		try {
			//创建Directory
			directory = FSDirectory.open(new File("D:/workspace/lucene/index02").toPath());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

创建文档,文档添加域:

public void index(){
		IndexWriter indexWriter = null;
		try {
			indexWriter = new IndexWriter(directory, new IndexWriterConfig(new StandardAnalyzer()));
			Document doc = null;
			for (int i = 0; i < ids.length; i++) {
				//创建文档(文档相当于数据库表中的每一条记录)
				doc = new Document();
				//为文档添加域(域相当于表中的每一个字段)
				doc.add(new TextField("id",ids[i],Field.Store.YES));
				doc.add(new TextField("email", emails[i],Field.Store.YES));
				TextField content = new TextField("content",contents[i],Field.Store.YES);
				content.tokenStream(new StandardAnalyzer(),null);
				doc.add(content);
				doc.add(new TextField("name", names[i],Field.Store.YES));
				//将文档写到索引中
				indexWriter.addDocument(doc);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(indexWriter!=null){
				try {
					indexWriter.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

查询索引:

/**
	 * 查询索引
	 */
	public void query(){
		IndexReader indexReader = null;
		try {
			indexReader = DirectoryReader.open(directory);
			//通过reader可以获取文档的数量
			System.out.println("numDosc:"+indexReader.numDocs());
			System.out.println("maxDocs:"+indexReader.maxDoc());
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(indexReader!=null)
				try {
					indexReader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}

	}

junit测试运行:

索引的删除:

	/**
	 * 删除索引
	 */
	public void deleteIndex(){
		IndexWriter indexWriter = null;
		try {
			indexWriter = new IndexWriter(directory, new IndexWriterConfig(new StandardAnalyzer()));
			//参数是一个选项,可以是一个Query,也可以是一个Term,Term是一个精确查找的值
			indexWriter.deleteDocuments(new Term("id","1"));
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(indexWriter!=null)
				try {
					indexWriter.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}
	}

junit测试:

当执行deleteIndex方法时,再执行查询索引

时间: 2024-10-13 22:26:04

lucene学习笔记二(基于数组的lucene检索,索引删除)的相关文章

lucene学习笔记(二)

package index; import java.io.File; 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.CorruptIn

Lucene学习笔记: 五,Lucene搜索过程解析

一.Lucene搜索过程总论 搜索的过程总的来说就是将词典及倒排表信息从索引中读出来,根据用户输入的查询语句合并倒排表,得到结果文档集并对文档进行打分的过程. 其可用如下图示: 总共包括以下几个过程: IndexReader打开索引文件,读取并打开指向索引文件的流. 用户输入查询语句 将查询语句转换为查询对象Query对象树 构造Weight对象树,用于计算词的权重Term Weight,也即计算打分公式中与仅与搜索语句相关与文档无关的部分(红色部分). 构造Scorer对象树,用于计算打分(T

lucene学习笔记(三)

好几天没更新了.更新一下,方便自己和大家学习. 这是最基本的代码 package index; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document;

Lucene学习笔记(1)

下载:http://lucene.apache.org lucene项目的Java子项目:http://lucene.apache.org/java Lucene学习笔记 查询者输入查询条件,条件之间可以通过特定运算符进行运算,比如查询希望查询到与“中国”和“北京”相关的记录,但不希望结果中包括“海淀区中关村”,于是输入条件为“中国+北京-海淀区中关村”: 把IndexWriter想象成让你可以对索引进行写操作的对象. 在一个文档被索引之前,首先需要对文档内容进行分词处理,并且而剔除一些冗余的词

angular学习笔记(二十八)-$http(6)-使用ngResource模块构建RESTful架构

ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入angular-resource.min.js文件 2.在模块中依赖ngResourece,在服务中注入$resource var HttpREST = angular.module('HttpREST',['ngResource']); HttpREST.factory('cardResource

Ajax学习笔记(二)

二.prototype库详解 1.prototype库的使用 //导入下载好的prototype.js文件 <script type="text/javascript" src="prototype.js"></script> //在自己的js中直接使用Prototype对象 <script type="text/javascript"> document.writeln("Prototype库的版本

小猪的数据结构学习笔记(二)

小猪的数据结构学习笔记(二) 线性表中的顺序表 本节引言: 在上个章节中,我们对数据结构与算法的相关概念进行了了解,知道数据结构的 逻辑结构与物理结构的区别,算法的特性以及设计要求;还学了如何去衡量一个算法 的好坏,以及时间复杂度的计算!在本节中我们将接触第一个数据结构--线性表; 而线性表有两种表现形式,分别是顺序表和链表;学好这一章很重要,是学习后面的基石; 这一节我们会重点学习下顺序表,在这里给大家一个忠告,学编程切忌眼高手低,看懂不代表自己 写得出来,给出的实现代码,自己要理解思路,自己

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

马哥学习笔记二十四——分布式复制快设备drbd

DRBD: 主从 primary: 可执行读.写操作 secondary: 文件系统不能挂载 DRBD: dual primay, 双主(基于集群文件系统的高可用集群) 磁盘调度器:合并读请求,合并写请求: Procotol:drbd数据同步协议 A: Async, 异步  数据发送到本机tcp/ip协议栈 B:semi sync, 半同步  数据发送到对方tcp/ip协议 C:sync, 同步  数据到达对方存储设备 DRBD Source: DRBD资源 资源名称:可以是除了空白字符外的任意