Lucene是一套用于全文检索和搜寻的开放源码程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具;就其本身而论,Lucene是现在并且是这几年,最受欢迎的免费java资讯检索程式库。人们经常提到资讯检索程式库,就像是搜寻引擎,但是不应该将资讯检索程式库与网搜索引擎相混淆。
下面是一个简单的lucene索引创建及追加的代码
IndexWriter writer = null;
try{
File root = new File(indexPath);
if (root == null || root.listFiles() == null || root.listFiles().length == 0) {
System.out.println("----------begin index-----------");
writer = new IndexWriter(indexPath, new StandardAnalyzer(),
true);
} else {
System.out.println("----------append index-----------");
writer = new IndexWriter(indexPath, new StandardAnalyzer(),
false);
}
TopicDetail td = new TopicDetail();
Document doc = new Document();
doc.add(new Field("tid", String.valueOf(td.getTopicID()), Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("pid", String.valueOf(td.getPID()),Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("mtitle", td.getTopicTitle(), Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("mauthor", td.getTopicAuthor(), Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("mtime", td.getTopicPostTime(), Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.add(new Field("mcontent", td.getTopicContent(), Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("murl", td.getUrl(), Field.Store.YES, Field.Index.TOKENIZED));
writer.addDocument(doc);
System.out.println("正在对索引进行优化...");
writer.optimize();
System.out.println("优化完毕!");
System.out.println("正在关闭索引读写器...");
writer.close();
System.out.println("索引读写器已经关闭!");
}catch(Exception e){
e.printStackTrace();
}finally{
try {
writer.close();
} catch (CorruptIndexException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这段代码主要处理的是索引的创建以及追加的过程,如果只是平常的应用,我觉得有这些代码已经足够了。
在new 一个filed的时候,Field.Store 表示“是否存储”,即该Field内的信息是否要被原封不动的保存在索引中。
Field.Index 表示“是否索引”,即在这个Field中的数据是否在将来检索时需要被用户检索到,一个“不索引”的Field通常仅是提供辅助信息储存的功能。
Store
COMPRESS:压缩保存。用于长文本或二进制数据
YES:保存
NO:不保存
Index
NO:不建索引
TOKENIZED:分词,建索引
UN_TOKENIZED:不分词,建索引
NO_NORMS:不分词,建索引。但是Field的值不像通常那样被保存,而是只取一个byte,这样节约存储空间
需要注意的是,如果你查询的时候需要对某个字段进行排序,那么这个指定的字段必须为field.index.un_tokenized,否则查询会报错
分享到:
相关推荐
lucene
一、用Python创建一个新文件,内容是从0到9的整数, 每个数字占一行: 复制代码 代码如下: #python >>>f=open(‘f.txt’,’w’) # r只读,w可写,a追加 >>>for i in range(0,10):f.write(str(i)+’\n’) . . . >>...
开源全文搜索工具包Lucene2.9.1的使用。 1. 搭建Lucene的开发环境:在classpath中添加lucene-core-2.9.1.jar包 2. 全文搜索的两个工作: 建立索引文件,搜索索引. 3. Lucene的索引文件逻辑结构 1) 索引(Index)由...
在前面Lucene-2.2.0 源代码阅读学习(1)中,根据Lucene提供的一个Demo,详细分析研究一下索引器org.apache.lucene.index.IndexWriter类,看看它是如果定义的,掌握它建立索引的机制。 通过IndexWriter类的实现源代码...
public static String indexDirpath = "e:\\work\\zhzyk\\index";...第一次执行请把 indexWriter = new IndexWriter(indexDir, luceneAnalyzer, false);//true建立索引库,false追加索引库 false改为true
NULL 博文链接:https://quarterlifeforjava.iteye.com/blog/2124048
索引器从 [ input.csv ] 创建 [ index/dir ] 索引器从 [ input.csv ] 追加 [ index/dir ] 索引器从 [ input.csv ] 更新 [ index/dir ] 索引器删除 [索引/目录] 索引器查找 [ 全部 | n ] return [ "field1,field2 .....
node.js 追加写入 文件删除 打开与关闭 创建 读取 删除 修改
请问两个数据库之间如何进行数据追加? 问题: 例如: > 数据库A中有 BM,DWMC,BMMC等域,表单名TEST1 ...> 在数据库A中录入文档,进行一个操作同时完成两个事件(1.数据库A保存文档 2.向数据库B中追加 > 一条纪录)
使用文字线条轮廓创建窗体,C#源代码,设定文本输出质量,创建路径区域,向区域中追加文本, //使用文字线条轮廓创建窗体 this.BackgroundImage = Image.FromFile("Water lilies.jpg"); Graphics g = this....
java 追加文件内容 java 追加文件内容 java 追加文件内容
一个简单的提供覆盖式和追加式写文件功能的JAVA类,可调用其覆盖式方法创建新文件或重置老文件内容,调用其追加式方法在已有文件中增加新内容。
C# FileStream 追加写入字符串到文本中 C# FileStream 追加写入字符串到文本中 C# FileStream 追加写入字符串到文本中 C# FileStream 追加写入字符串到文本中
android ListView 动态追加数据 显示追加进度
本文实例讲述了PHP创建文件及写入数据(覆盖写入,追加写入)的方法。分享给大家供大家参考,具体如下: 这里主要介绍了PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码,需要的朋友可以参考下: 创建文件我们用到...
java工程的形式,lucene2.1.0的包也打在里面。 有注释的代码,向原有索引中追加内容,检索以查看。 适合初学者入门使用。
我们知道js中有三种动态创建元素的方法,...append 追加在父元素的最后一个子节点后面 prepend插入到父元素的第一个子节点前面 after在元素后面追加,同级 befor在元素的前面追加,同级 下面的代码可以很好的演示追加
该程序实现了链表的创建,销毁,清空,追加,插入,删除及遍历等操作。实现过程清晰、简洁,是很好的学习资源
主要介绍了基于Java向zip压缩包追加文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
请各位多看看给指点一下,初次做资料,如有不好,请指正