package cn.lucene.tramp;
import java.io.File;
import java.io.FileReader;
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.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
/**
* ClassName:HelloLucene <br/>
* Function: TODO ADD FUNCTION. <br/>
* Reason: TODO ADD REASON. <br/>
* Date: 2014年2月5日 下午12:59:10 <br/>
* @author zhangzhaoyu
* @version
* @since JDK 1.7
* @see
*/
public class HelloLucene {
/**
*
* index:<br />
* 建立索引
*
* @author zhangzhaoyu
*/
public void index() {
IndexWriter writer = null;
try {
// 1. 创建 directory
// Directory directory = new RAMDirectory(); // 建立在内存中
Directory directory = FSDirectory.open(new File("E:\\BaiduYunDownload\\lucene\\index01"));
// 2. 创建 IndexWriter
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
writer = new IndexWriter(directory, config);
// 3. 创建Document 对象
Document document = null;
// 4. 为Document 添加Field
File f = new File("E:\\BaiduYunDownload\\lucene\\example");
System.out.println("filesize: " + f.listFiles().length);
for (File file : f.listFiles()) {
document = new Document();
document.add(new Field("content", new FileReader(file)));
document.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED));
document.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED));
// 5. 通过IndexWriter 添加文档到索引中
writer.addDocument(document);
}
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
*
* searcher:<br />
* 搜索
*
* @author zhangzhaoyu
*/
public void searcher() {
try {
// 1. 创建 Directory
Directory directory = FSDirectory.open(new File("E:\\BaiduYunDownload\\lucene\\index01"));
// 2. 创建 IndexReader
IndexReader reader = IndexReader.open(directory);
// 3. 根据 IndexReader 创建 IndexSearcher
IndexSearcher searcher = new IndexSearcher(reader);
// 4. 创建搜索的 Query
// 创建parser 来确定搜索文件的内容,第二个参数表示搜索的域
QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
// 创建 query, 表示搜索域为content中包含的java 文档
Query query = parser.parse("dojo");
// 5. 根据 searcher搜索并返回 TopDocs
TopDocs topDocs = searcher.search(query, 10);
// 6. 根据 TopDocs 获取 SocreDoc 对象
ScoreDoc[] sds = topDocs.scoreDocs;
for (ScoreDoc sd : sds) {
// 7. 根据 searcher 和 SocreDoc对象获取具体的 Document对象
Document d = searcher.doc(sd.doc);
// 8. 根据 Document 对象获取需要的值
System.out.println(d.get("filename") + ": " + d.get("path"));
}
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
public class TestLucene {
@Ignore
public void testIndex() {
HelloLucene lucene = new HelloLucene();
lucene.index();
}
@Test
public void testSearch() {
HelloLucene lucene = new HelloLucene();
lucene.searcher();
}
}
分享到:
相关推荐
Lucene 简单入门程序实例
NULL 博文链接:https://kylinsoong.iteye.com/blog/719415
lucene3.6入门实例教程 完整代码示例,lucene入门学习很好的资料
lucene 3.0 入门实例项目,迅速教会你怎么使用3.0API
Lucene 创建索引查询的入门实例,可以直接导入工具
lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...
根据lucene demo 写的一个入门小例子,很小,希望对你有所帮助,不好别骂!
介绍Lucene的原理,处理流程,以及实例代码,全面分析介绍!
一个关于lucene实例初学者入门的好东东
Eclipse工程文件,全文检索 lucene-5.2.1 入门Eclipse工程实例,福利放送,与lucene3结果比对
Lucene3.0和Lucene2.0API有多处改动,该实例用Luence3.0实现
包含最新lucene5.2.1的入门经典案例,以及程序中所需的lucene-core-5.2.1.jar、lucene-analyzers-common-5.2.1.jar等几个jar包。代码可运行。
NULL 博文链接:https://cuics-100.iteye.com/blog/1057266
Lucene的功能请打,方法众多。主要介绍了Lucene的功能模块及其调用代码,实际使用中可以具体修改。最后还有一个常见的Lucene实例与解析。
这是一个朋友的学习成果,传到网上,大家分享,方便自己,方便别人. 作者:xiexie
这是一份Lncene快速入门的文档,文档里包括入门的代码实例以及工作原理和查询设置等一些常用到的Lucene知识
NULL 博文链接:https://never-forget.iteye.com/blog/1282200
java工程的形式,lucene2.1.0的包也打在里面。 有注释的代码,向原有索引中追加内容,检索以查看。 适合初学者入门使用。
基于lucene5.3.1的项目实例 lucene创建索引,删除索引,更新索引,查找索引。
非常珍贵的Lucene入门实例,让你在最短时间内掌握Lucene快速创建索引,中文分词查询的技巧。 内赠送lucene驱动包,物超所值哦!!