package org.itat.test;

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.ParseException;
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; public class HelloLucene
{
/**
* 建立索引
* @throws IOException
* @throws CorruptIndexException
*/
public void index() throws CorruptIndexException, IOException
{
//1. 创建Directory
Directory directory = new RAMDirectory();//建立在内存中的
//Directory directory = FSDirectory.open(new File("d:/lucene1/index01")); //2. 创建indexWriter
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
IndexWriter writer = null; try
{
writer = new IndexWriter(directory, iwc);
//3. 创建document对象
Document doc = null; //4. 为document添加Field
File f = new File("D:/lucene"); for(File file : f.listFiles())
{
doc = new Document();
doc.add(new Field("content", new FileReader(file)));
doc.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("path",file.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED));
//5. 通过IndexWriter添加文档到索引中 writer.addDocument(doc);
} }
catch (CorruptIndexException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
catch (LockObtainFailedException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
catch (IOException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
finally
{
if(writer != null)
{
writer.close();
}
}
} @SuppressWarnings("resource")
public void search() throws ParseException
{ //1. 创建Directory
Directory directory;
IndexReader reader;
try
{
directory = FSDirectory.open(new File("d:/lucene1/index01"));
//2. 创建indexReader
reader = IndexReader.open(directory);
//3. 根据indexReader 创建IndexSearcher
//4. 创建搜索的Query
QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
//创建parser来确定要搜索文件的内容,第二个参数 表示搜索的域
//创建query,表示搜索域为content中包含java的文档
Query query = parser.parse("com");
//5. 根据sea人撤人搜索并且返回TopDocs
TopDocs tds = new IndexSearcher(reader).search(query, 100);
//6. 根据TopDocs 获取ScoreDOc对象
ScoreDoc[] sds = tds.scoreDocs;
for(ScoreDoc sd : sds)
{
//7. 根据searcher和scoreDoc对象获取具体的Document对象
Document d = new IndexSearcher(reader).doc(sd.doc);
//8. 根据Document对象获取需要的值
System.out.println(d.get("filename") + "[" + d.get("path") + "]");
} //9. 关闭reader
reader.close(); }
catch (IOException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}

测试类:

package org.itat.test;

import java.io.IOException;

import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.queryParser.ParseException;
import org.junit.Test; public class TestLucene
{
@Test
public void testIndex() throws CorruptIndexException, IOException, ParseException
{ HelloLucene hl = new HelloLucene();
hl.index();
} @Test
public void testSearcher() throws ParseException
{
HelloLucene hl = new HelloLucene();
// hl.index();
hl.search();
}
}

Lucene小例子的更多相关文章

  1. lucene.net 3.0.3、结合盘古分词进行搜索的小例子(转)

    lucene.net 3.0.3.结合盘古分词进行搜索的小例子(分页功能)   添加:2013-12-25 更新:2013-12-26 新增分页功能. 更新:2013-12-27 新增按分类查询功能, ...

  2. 2、Lucene 最简单的使用(小例子)

    在了解了Lucene以后,我打算亲手来做一个Lucene的小例子,这个例子只是Lucene最简单的应用:使用Lucene实现标准的英文搜索: 1.下载Lucene 下载Lucene,到Lucene的官 ...

  3. springmvc入门的第一个小例子

    今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...

  4. java即时通信小例子

    学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...

  5. Runtime的几个小例子(含Demo)

    一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.)           1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);  [runti ...

  6. bootstrap 模态 modal 小例子

    bootstrap 模态 modal  小例子 <html> <head> <meta charset="utf-8" /> <title ...

  7. INI配置文件分析小例子

    随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...

  8. JavaScript小例子:复选框全选

    JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...

  9. 【zTree】 zTree使用的 小例子

    使用zTree树不是第一次了  但是 还是翻阅着之前做的 对照着 使用起来比较方便  这里就把小例子列出来   总结一下使用步骤 这样方便下次使用起来方便一点 使用zTree树的步骤: 1.首先  在 ...

随机推荐

  1. 迅雷在P2P网络中的另类上传速度

    如上图,我们一般在下载BT时,一般P2P是边下载边上传. 但是迅雷在自己的软件中可以设置上传速度,反而在展示时却把P2P协议的速度不在上传那么显示,而是使用协议速度来进行展示:并且这个速度无法设置. ...

  2. 获取非行间样式getComputedStyle

    有如下代码: 1 2 3 div {     width: 200px; } 1 2 3 <div id="aa" style="height: 100px;&qu ...

  3. android特效集合

    https://github.com/Trinea/android-open-project http://www.cnblogs.com/hawkon/p/3593709.html http://i ...

  4. AngularJS:实现动态添加输入控件功能

    功能要求如下:1.    点击加号可以增加输入框.2.    点击减号可以减少输入框.3.    当输入框只有一个的时候,不能再减少输入框.效果图如下:只有一个输入框有多个输入框 要实现这个功能,可以 ...

  5. 详解RocketMQ中的consumer

    上述就是MQ中有关Consumer的类图,下面来介绍一下每个类 1.MQAdmin:底层类,上篇博客已经提过,就不再此重提 2.MQConsumer:Consumer公共的接口,常用的方法如下 如果消 ...

  6. Redis绑定多个ip地址

    Redis绑定多个ip地址 学习了:https://www.zhihu.com/question/20346112/answer/17157379 注意,用空格进行分隔 bind 127.0.0.1 ...

  7. js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式

    js replace 全局替换   js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...

  8. 数据挖掘 与 Web开发何去何从

    (0)引子 以下以现实生活中的一个实例引出本博客的探究点.或许类似的情况正发生在你的身边. 小弟工作5年了,近期有点迷茫. 上一份工作在一家比較大的门户站点做web开发和移动互联网数据挖掘(人手比較紧 ...

  9. Java获取本机MAC地址[转]

    原文地址:https://www.cnblogs.com/hxsyl/p/3422191.html Java获取本机MAC地址   为什么写这个呢?因为前几天看见网上有采用windows命令获取局域网 ...

  10. response响应和User-Agent历史

    返回百度的源码,没有任何伪装: response是服务器响应的类文件,除了支持文件操作的方法以外,还支持以下方法: