一、实验名称:构建索引

二、实验日期:2013/9/21

三、实验目的:

1)        能理解Lucene中的Document-Field结构的数据建模过程;

2)        能编针对特定数据生成索引文件。

实验用的仪器和材料

MyEclipse 10,JDK

实验的步骤和方法

题目一:在指定目录生成表示3本书的索引,要求建立3个document分别存放书名数据。把生成的索引文件截好图(复合索引与一般索引各生成一次)

图1:一般索引的截图

图2:复合索引的截图

题目二:修改题目一的代码,使用多值域在一个文档中存放3本书的书名值。

题目三:针对题目一的三个文档,分别做如下操作:根据书名在索引中删除一个值、修改一个文档的域值。

实验过程:

题目一源代码:

package lab02;

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.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version; public class GreatIndex {
public static void main(String[] args) {
GreatIndex GreateIndexobj=new GreatIndex();
try {
GreateIndexobj.setUp();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private String indexDir="E:/Users/Administrator/Workspaces/MyEclipse 10/mylucene/src/lab02/index";
private Directory directory; //表示索引存放的目录
public void setUp()throws Exception {
//directory =new RAMDirectory(); //索引存放在内存的RAM中
directory =FSDirectory.open((new File(indexDir))); //索引存放在物理硬盘的文件系统内(就是存放指定路径)
IndexWriter writer=new IndexWriter(directory,
new StandardAnalyzer(Version.LUCENE_30),true,IndexWriter.MaxFieldLength.UNLIMITED);
//write.setUseCompoundFile(false);//设置false就是使用一般索引(有多种文件的)
//建立3本书的document
Document doc1=new Document();
Document doc2=new Document();
Document doc3=new Document();
//建立名字叫“bookname”的field并添加域值到文档中,设置国域值存储到索引中,不被分词与加权
doc1.add(new Field("bookname", "伐清",
Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS));
doc2.add(new Field("bookname", "奥术神座",
Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS));
doc1.add(new Field("bookname", "冰与火之歌",
Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS));
writer.addDocument(doc1);
writer.addDocument(doc2);
writer.addDocument(doc3);
writer.close();
}
}

  

题目二源代码:

package lab02;

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.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version; public class GreatIndex {
public static void main(String[] args) {
GreatIndex GreateIndexobj=new GreatIndex();
try {
//GreateIndexobj.setUp();
GreateIndexobj.setUp2();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private String indexDir="E:/Users/Administrator/Workspaces/MyEclipse 10/mylucene/src/lab02/index";
private Directory directory; //表示索引存放的目录
private String[] booknames={"伐清","奥术神座","冰与火之歌"};
public void setUp2() throws Exception{
//directory =new RAMDirectory(); //索引存放在内存的RAM中
directory =FSDirectory.open((new File(indexDir))); //索引存放在物理硬盘的文件系统内(就是存放指定路径)
IndexWriter writer=new IndexWriter(directory,
new StandardAnalyzer(Version.LUCENE_30),true,IndexWriter.MaxFieldLength.UNLIMITED);
//writer.setUseCompoundFile(false);//设置false就是使用一般索引(有多种文件的)
//建立包含三个域值的document
Document doc=new Document();
for (String bookname:booknames) {
doc.add(new Field("bookname",bookname,Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS));
}
writer.addDocument(doc);
writer.close();
}
}

 

题目三源代码:

  //题目三
public void DeleteDocument()throws IOException{
IndexWriter writer=new IndexWriter(directory,
new StandardAnalyzer(Version.LUCENE_30),true,IndexWriter.MaxFieldLength.UNLIMITED);
writer.optimize();//使用优化策略删除文档(直接删除,不能回复)
writer.deleteDocuments(new Trem("bookname", "伐清"));
writer.close();
}
public void UpdateDocument() throws IOException{
IndexWriter writer=new IndexWriter(directory,
new StandardAnalyzer(Version.LUCENE_30),true,IndexWriter.MaxFieldLength.UNLIMITED);
//构建一个新的document用与替换
Document doc=new Document();
doc.add(new Field("bookname","Lucene实战第二版",
Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS));
writer.updateDocument(new Term("bookname","官仙"), doc);
writer.close();
}

  

六、数据记录和计算

项目的结构图:

七、实验结果或结论

总结:通过这次的实验,我基本理解Lucene中的Document-Field结构的数据建模过程, 能编针对特定数据生成索引文件.在这次的实验过程中,实验不是很顺利,这次实验让我感受到了Lucene的强大,增加我对Lucene的兴趣!

八、备注或说明

、引用参考文献

http://lucene.apache.org

 

【Lucene实验1】构建索引的更多相关文章

  1. 如何提高Lucene构建索引的速度

    如何提高Lucene构建索引的速度 hans(汉斯) 2013-01-27 10:12 对于Lucene>=2.3:IndexWriter可以自行根据内存使用来释放缓存.调用writer.set ...

  2. 【Lucene】Apache Lucene全文检索引擎架构之构建索引2

    上一篇博文中已经对全文检索有了一定的了解,这篇文章主要来总结一下全文检索的第一步:构建索引.其实上一篇博文中的示例程序已经对构建索引写了一段程序了,而且那个程序还是挺完善的.不过从知识点的完整性来考虑 ...

  3. 利用Lucene与Nutch构建简单的全文搜索引擎

    文章地址 1.简介 本次实现分为两个部分,第一个部分是利用Lucene构建一个全文的搜索引擎,另外一部分则是利用Nutch实现同样的功能.由于Lucene并不是一个可以直接运行的程序,且不具备爬虫和文 ...

  4. 构建NCBI本地BLAST数据库 (NR NT等) | blastx/diamond使用方法 | blast构建索引 | makeblastdb

    参考链接: FTP README 如何下载 NCBI NR NT数据库? 下载blast:ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+ 先了解 ...

  5. 【转】Lucene工作原理——反向索引

    原文链接:  http://my.oschina.net/wangfree/blog/77045 倒排索引 倒排索引(反向索引) 倒排索引源于实际应用中需要根据属性的值来查找记录.这种索引表中的每一项 ...

  6. 如何使用Spark大规模并行构建索引

    使用Spark构建索引非常简单,因为spark提供了更高级的抽象rdd分布式弹性数据集,相比以前的使用Hadoop的MapReduce来构建大规模索引,Spark具有更灵活的api操作,性能更高,语法 ...

  7. Lucene实战构建索引

    搭建lucene的步骤这里就不详细介绍了,无外乎就是下载相关jar包,在eclipse中新建java工程,引入相关的jar包即可 本文主要在没有剖析lucene的源码之前实战一下,通过实战来促进研究 ...

  8. Lucene构建索引时的一些概念和索引构建的过程

    在搜索文档内容之前要做的事情就是对从各种不同来源(网页,数据库,电子邮件等)的文档进行索引,索引的过程就是对内容进行提取,规范化(通过对内容进行建模来实现),然后存储. 在索引的过程中有几个基本的概念 ...

  9. lucene 3.0.2 + 多文件夹微博数据(时间,微博)构建索引

    package lia.meetlucene; import java.io.File; import java.io.IOException; import java.util.LinkedList ...

随机推荐

  1. 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...

  2. APMServ 配置记录

    下载版本是5.2.6,它采用压缩率更高的7zip 解压后拷贝到c盘 点击APMServ.exe就可以启动了 注意: 1. SSL 有时需要关掉,否则apache起不来 2. 多数时候我只用apache ...

  3. java :hello world

    练习java的基本语法. output hellow world. 需求:打包自身项目的bin目录文件为一个临时可运行的jar文件,执行完后删除. 使用process执行jar文件,返回输入流和错误流 ...

  4. ssis trainning

    1. 防止包打开后hang住,可以使用delay validation=false. 2.2008R2 configuration 起作用的优先级? 一是des ign time. 二是运行的时候指定 ...

  5. Java 如何有效地避免OOM:善于利用软引用和弱引用

    Java 如何有效地避免OOM:善于利用软引用和弱引用 想必很多朋友对OOM(OutOfMemory)这个错误不会陌生,而当遇到这种错误如何有效地解决这个问题呢?今天我们就来说一下如何利用软引用和弱引 ...

  6. 递归:codevs 1251 括号

    codevs 1251 括号  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 计算乘法时,我们可以添加括号,来改变相乘的顺 ...

  7. 该如何认识ZBrush中的2.5D绘画

    ZBrush不仅对3D行业进行了改革.让艺术家感到无约束自由创作的3D设计,同时它还是一个强大的绘画程序!基于强大的Pixol功能,ZBrush®将数字绘画提升到一个新的层次.如下图所示,插画功能主要 ...

  8. web前端笔试题总结

    em和rem的区别: 浏览器的默认字体高度是16px,1em=16px:大小可以自己设置调整,并且默认集成父级容器中文本的大小. rem是CSS3中新增的属性,默认情况下是文本尺寸的大小,不同的是它集 ...

  9. 合工大 OJ 1322 窗口

    窗口     Description 在某图形操作系统中,有N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域.窗口的边界上的点也属于该窗口.窗口之间有层次的区别,在多于一个窗口重叠的区域里, ...

  10. 用Python和摄像头制作简单的延时摄影

    “延时摄影(英语:Time-lapse photography)是以一种较低的帧率拍 下图像或者视频,然后用正常或者较快的速率播放画面的摄影技术.在一段延时摄影视频中,物体或者景物缓慢变化的过程被压缩 ...