一个lucene的例子 , 其它的就不多说了
package com.fei.lucene;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
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.SimpleFSDirectory;
import org.apache.lucene.util.Version;
/**
* test lucene
*
* @author
*
*/
public class TxtFileIndexer {
/**
* @param args
*/
public static void main(String[] args) throws IOException {
// 保存索引文件的地方
String indexDir = "E:\\indexDir";
// 将要搜索TXT文件的地方
String dataDir = "E:\\dataDir";
TxtFileIndexer ifi = new TxtFileIndexer();
ifi.createIndex(indexDir, dataDir);
try {
ifi.searchIndex(indexDir);
} catch (ParseException e) {
e.printStackTrace();
}
}
/**
* 通过索引查找
*
* @throws IOException
* @throws ParseException
*/
public void searchIndex(String indexDir) throws IOException, ParseException {
// 得到保存索引的Directory
Directory dir = new SimpleFSDirectory(new File(indexDir));
// IndexSearcher对象
IndexSearcher indexSearch = new IndexSearcher(dir);
StandardAnalyzer sa = new StandardAnalyzer(Version.LUCENE_31);
// 创建QueryParser对象,第二个表示搜索Field的字段
String[] fields = new String[] { "contents", "filename" };
QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_31,
fields, sa);
// QueryParser queryParser = new QueryParser(Version.LUCENE_31,
// "filename", sa);
// 生成Query对象
Query query = queryParser.parse("森");
// 搜索结果 TopDocs里面有scoreDocs[]数组,里面保存着索引值
TopDocs hits = indexSearch.search(query, 10);
// hits.totalHits表示一共搜到多少个
System.out.println("找到了" + hits.totalHits + "个");
// 循环hits.scoreDocs数据,并使用indexSearch.doc方法把Document还原
ScoreDoc[] scoreDocs = hits.scoreDocs;
int lenScoreDoc = scoreDocs.length;
for (int i = 0; i < lenScoreDoc; i++) {
ScoreDoc sdoc = scoreDocs[i];
Document doc = indexSearch.doc(sdoc.doc);
System.out.println(doc.get("filename"));
//不清楚这里怎么从doc里面拿出contents, 不过这里有文件文件名, 还有路径, 就可读取出文件的内容
System.out.println(doc.get("contents"));
Field ff = doc.getField("contents");
}
indexSearch.close();
}
/**
* 建索引
*
* @throws IOException
*/
public void createIndex(String indexDir, String dataDir) throws IOException {
IndexWriter indexWriter = null;
// 创建Directory对象
Directory dir = new SimpleFSDirectory(new File(indexDir));
// 创建IndexWriter对象, 第二个是分词器, 第三个表示是否是创建,false
// 为在此基础上面修改, 第四表示表示分词的最大值,比如说new MaxFieldLength(2), 就表示两个字一分,
// 一般用indexWriter.MaxFieldLength.LIMITED
indexWriter = new IndexWriter(dir, new StandardAnalyzer(
Version.LUCENE_31), true, IndexWriter.MaxFieldLength.UNLIMITED);
File[] files = new File(dataDir).listFiles();
for (int i = 0; i < files.length; i++) {
Document doc = new Document();
// 创建Field对象, 并放入doc对象中
doc.add(new Field("contents", new FileReader(files[i])));
// Field.Index.ANALYZED 建立index标识符通过分词器()
doc.add(new Field("filename", files[i].getName(), Field.Store.YES,
Field.Index.ANALYZED));
doc.add(new Field("indexDate", DateTools.dateToString(new Date(),
DateTools.Resolution.DAY), Field.Store.YES,
Field.Index.NOT_ANALYZED));
indexWriter.addDocument(doc);
}
System.out.println("numDocs:" + indexWriter.numDocs());
indexWriter.close();
}
}
分享到:
相关推荐
lucene入门小例子
lucene入门例子,有创建索引和检索。详情:http://blog.csdn.net/authorzhh/article/details/7869806
我自己写的一个lucene搜索引擎的简单入门例子源代码 对照lucene,相当的易懂。api我这也有,含JE分词器。
Lucene5.2.1 入门学习例子. 这是别人的例子源码。可以参考。内有使用说明。
Luene2.4版本在以前的基础上进行了不少的改动,性能上也提升了不少,这里边学习边写了一个简单的例子,给初学者行个方便!
Lucene的功能请打,方法众多。主要介绍了Lucene的功能模块及其调用代码,实际使用中可以具体修改。最后还有一个常见的Lucene实例与解析。
说明: 例子是根据lucene3.6写的,也可以说是直接copy别人的。 包括参考文章的代码,以及修改部分之后的代码
可用lucene demo 已经有入门级pdf学习
Lucene 例子,此例子简单易懂,而且注释详细,可以作为一个入门的例子。
lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子程序.txt 关于lucene2.0的创建、检索和删除功能的完整实现.doc web...
根据lucene demo 写的一个入门小例子,很小,希望对你有所帮助,不好别骂!
这是我本人学习时的笔记整理,是入门级的好教材,解释非常的详细!欢迎大家和我一起学习,讨论lucene,这个javaeye的制作的电子文档,有什么不明白去我的空间留言!
开发自己的搜索引擎《lucene2.0+heritrix》一书对应的源码资料,总共有30M,只上传了几个例子. ch2-lucene入门小例子 myReserch-可用的网络搜索引擎
lucene 3.6 的入门例子 代码简洁 注释清晰 是入门只必备啊 附带了ik中文分词器 支持 停用词 扩展词等
lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...
一个例子学懂搜索引擎(lucene).doc 中文搜索引擎技术揭密.doc 九大开源搜索引擎介绍.txt 基于Nutch的搜索引擎技术.pdf 基于开源工具搭建小型搜索引擎.pdf 整合开源工具的小型搜索引擎构建.pdf 用_Hadoop_进行分布式...
hibernate-search小例子,myeclipse工程文件,有jar包,只要有mysql和myeclipse就可以直接运行。文章在http://blog.csdn.net/hortond。对文件索引和数据库感兴趣的可以下来看看,lucene是个很强大的全文搜索引擎。
这个为一个lucene3.5所写的程序例子,有助于刚入门的学习lucene的人,更快的的进入到lucene的学习中去。
Lucene初级教程(入门经典资源,内附使用例子)
Lucene3.0从入门到精通,适合所有想做全文检索,垂直搜索方面的开发人员。从简单到深入,各种例子,各种注释很齐全。