一、实验名称:构建索引
二、实验日期: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 exceptione.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本书的documentDocument 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 exceptione.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就是使用一般索引(有多种文件的)//建立包含三个域值的documentDocument 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的兴趣!
八、备注或说明:
九、引用参考文献:
转载于:.html
本文发布于:2024-01-29 13:05:37,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170650474215489.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |