package cn.zhf.lucene;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
import org.apache.lucene.analysis.Analyzer;
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.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class TextFileIndexer {
public static void main(String[] args) throws IOException {
// 被索引的文件
File dirFile = new File("c:/users/zhf/desktop/toindex");
// 索引结果文件
File indexFile = new File("c:/users/zhf/desktop/indexed");
//索引文件的存放位置,由子类获取真实路径
Directory directory = FSDirectory.open(indexFile);
// 标准分析器
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_36,
analyzer);
iwc.setOpenMode(OpenMode.CREATE);
//写索引:是索引过程的核心组件,这个类负责创建新索引或打开已有的索引。提供索引文件的写入操作
IndexWriter iw = new IndexWriter(directory, iwc);
File[] files = dirFile.listFiles();//要索引的文件列表
long startTime = new Date().getTime();
//将索引文件添加到结果目录中(indexFile)
for (int i = 0; i < files.length; i++) {
if (files[i].isFile() && files[i].getName().endsWith(".txt")) {
System.out.println(files[i].getCanonicalPath() + "正在被索引");
String temp = readFile(files[i].getCanonicalPath(), "GBK");
System.out.println(temp);
//域的集合
Document document = new Document();
//创建路径域
Field fieldPath = new Field("path", files[i].getPath(),
Field.Store.YES, Field.Index.NO);
//创建文本域
Field fieldBody = new Field("body", temp, Field.Store.YES,
Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
document.add(fieldPath);
document.add(fieldBody);
iw.addDocument(document);
}
}
iw.close();
long endTime = new Date().getTime();
System.out.println("索引时间是: " + (startTime - endTime)
+ dirFile.getPath());
}
// 读取文件内容,将文件内容拼成一个字符串返回
public static String readFile(String fileName, String charset)
throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(new File(fileName))));
String str = "";
String ret = "";
while ((str = br.readLine()) != null)
ret += str;
br.close();
return ret;
}
}
package cn.zhf.lucene;
import java.io.File;
import java.io.IOException;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Explanation;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
public class TestQuery {
public static void main(String[] args) throws CorruptIndexException, IOException, ParseException {
String indexed = "c:/users/zhf/desktop/indexed";
//用于搜索IndexWriter创建的索引
IndexReader ir = IndexReader.open(FSDirectory.open(new File(indexed)));
IndexSearcher is = new IndexSearcher(ir);
ScoreDoc[] hits = null;
// String keyword = "lucene";
// Query query = null;
// Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
// QueryParser qp = new QueryParser(Version.LUCENE_36,"body",analyzer);
// query = qp.parse(keyword);
//Term是搜索对象的基本单元,与Field类似
Query q = new TermQuery(new Term("body","lucene"));
if(is != null){
//一个指针容器,指向前N个排名的搜索结果
TopDocs top = is.search(q, 10);//返回最多10条记录
hits = top.scoreDocs;
if(hits.length>0)
System.out.println("找到了 "+hits.length+" 条记录。");
for(ScoreDoc d : hits){
Document d1 = is.doc(d.doc);
System.out.println(d1.get("path"));
Explanation explanation = is.explain(q, d.doc);
System.out.println("------------");
System.out.println(explanation.toString());
}
is.close();
}
}
}
分享到:
相关推荐
lucene 对 xml建立索引 建立索引就是怎么简单 呵呵
基于lucene的Swing全文索引构建于查询工具及源程序,有源程序以及做好的工具,非常适合初学者学习学习lucene
lucene构建索引,从HelloWorld到项目具体使用 ====================项目一:=================================== qianjun.lucene.first ====================项目二:=================================== qianjun....
NULL 博文链接:https://blaiu.iteye.com/blog/588054
用Lucene检索文本,建立索引,用struts构建web程序框架
根据博客调试的程序,比较简单,英文分词和检索,希望对大家学习有帮助。
有关Lucene的问题(8):用Lucene构建实时索引的文档更新问题[整理].pdf
全文检索首先将要查询的目标文档中的词提取出来,组成索引,通过查询索引达到搜索目标文档的目的。这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-...这是一个使用lucene开源框架编写的一个简单的搜索功能
Luke是一个方便的索引查看和诊断工具,可以访问Lucene构建的索引文件,显示和修改某些索引内容。luke 7.2.0 支持最新的 lucene7 索引查看 github地址:https://github.com/DmitryKey/luke/releases
基于数据库的lucene3。索引构建类代码
用lucene 4.7.1做的一个Lucene构建索引、进行查询,对比默认的相似度计算与BM25相似度计算输出结果的示例。内容不多,供新手参考
使用小型纯函数轻松构建您的Lucene字符串查询。 想象一下,有一个利用Lucene在(索引的)数据库上执行查询的API。 在这种情况下,您可能希望在客户端/前端上生成lucene查询字符串。 用法部分显示了如何利用此库...
作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了Lucene作为...
基于XML和Lucene构建黄页搜索引擎,姜伟,宋茂强,随着用户对搜索引擎要求的不断提高,垂直搜索引擎应运而生,成为搜索引擎新的发展趋势。论文基于开源全文索引引擎工具包Lucene,采
描述了Lucene中如何使用FST算法构建term的内存索引,使用了很多图,直观的展现了FST图的构建流程,能够对想了解lucene内部实现机制原理的同学有帮助。
Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的...
Lucene 强大的 API 主要关注文本索引和搜索。它可以用于为各种应用程序构建搜索功能,比如电子邮件客户端、邮件列表、Web 搜索、数据库搜索等等。Wikipedia、TheServerSide、jGuru 和 LinkedIn 等网站都使用了 ...
MySQL和Lucene都可以对数据构建索引并通过索引查询数据,一个是关系型数据库,一个是构建搜索引擎(Solr、ElasticSearch)的核心类库。两者的索引(index)有什么区别呢?以前写过一篇《Solr与MySQL查询性能对比》,...
Lucene是一个用Java写的全文索引引擎工具包,访问索引时间快,支持多用户访问,可以跨平台使用。Heritrix是一个由Java开发的、开源的Web网络爬虫,用户可以使用它从网络上抓取想要的资源。探讨了Lucene和Heritrix在构建...
索引构建 对上一步爬取到的网页进行结构化预处理,包括基于模板的信息抽取、分字段解析、分词、构建索引等。 检索排序 对上一步构建的索引库进行查询,对于给定的查询,给出检索结果,明白排序的原理及方法。 2 运行...