一、Lucene 原理
Lucene是一个高效的,基于Java的全文检索库。
在生活中会遇到各种各样的数据, 而数据可以概括为两种, 结构化数据和非结构化数据。
1、结构化数据指具有固定格式或有限长度的数据,如数据库,元数据等。
2、非机构化数据指指不定长或无固定格式的数据,如邮件,word文档等。
当我们需要全文检索某个信息,主要有两种方法:
a. 顺序扫描法(Serial Scanning):一个一个文件的全文搜索,这种当然是很慢的了。
b. 通过索引查找法:通过对非结构数据进行重新组织,建立索引,再对索引进行查找。而Lucene 就是用的这个原理进行全文检索。
Lucene的全文检索大体分两个过程,索引创建(Indexing)和搜索索引(Search)。
a.索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。
b.搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。
下面这幅图来自《Lucene in action》,描述了Lucene 的检索过程和全文检索的一般过程。
参考自:
http://www.cnblogs.com/forfuture1978/archive/2010/06/13/1757479.html
二、Lucene例子
下面是建立索引和查找文件的简单例子
a.建立索引
private static void indexFiles() throws IOException {
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(analyzer);
config.setOpenMode(OpenMode.CREATE_OR_APPEND);
Directory dir = FSDirectory.open(Paths.get("C:\\shuxiang\\tmp\\lucene6"));
IndexWriter writer = new IndexWriter(dir, config);
Document doc = new Document();
Path path = Paths.get("C:\\shuxiang\\tmp\\Edit5");
InputStream newInputStream = Files.newInputStream(path);
InputStreamReader inputStreamReader = new InputStreamReader(newInputStream, StandardCharsets.UTF_8);
Field pathField = new StringField("path", path.toString(), Field.Store.YES);
doc.add(pathField);
TextField field = new TextField("contents", new BufferedReader(inputStreamReader));
doc.add(field);
writer.addDocument(doc);
writer.close();
}
b. 查找文件
private static void searchFile() throws IOException, ParseException {
Directory dir = FSDirectory.open(Paths.get("C:\\shuxiang\\tmp\\lucene6"));
IndexReader reader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer();
QueryParser parser = new QueryParser("contents", analyzer);
Query query = parser.parse("92646KHJ4");
System.out.println("Searching for: " + query.toString("contents"));
TopDocs topDocs = searcher.search(query, 100000);
System.out.println(topDocs.totalHits + " total matching documents");
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
Document hitDoc = searcher.doc(scoreDoc.doc);
System.out.println("hit:" + hitDoc.get("path"));
}
}
Lucene官网有两个很好的例子,如下:
https://lucene.apache.org/core/6_2_1/demo/src-html/org/apache/lucene/demo/IndexFiles.html
https://lucene.apache.org/core/6_2_1/demo/src-html/org/apache/lucene/demo/SearchFiles.html
分享到:
相关推荐
有关Lucene 学习总结的文档,可能没有别人那么美观,那么完整,但也是经过了我自己辛苦的整理,这是我初学Lucene是总结的,希望对初学者有帮助吧!
lucene学习总结:lucene全文检索的原理,索引文件的格式,lucene的整体架构
24 Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser(1)
Lucene学习总结之一:全文检索的基本原理[归纳].pdf
lucene是一个全文搜索框架,它提供接口,由用户自由实现。 本资源为对lucene的学习+收集
Lucene学习总结之一:全文检索的基本原理 Lucene学习总结之二:Lucene的总体架构 Lucene学习总结之三:Lucene的索引文件格式(1) Lucene学习总结之三:Lucene的索引文件格式(2) Lucene学习总结之三:Lucene的...
第一章:全文检索的基本原理 10一、总论 10二、索引里面究竟存些什么 13三、如何创建索引 14第一步:一些要索引的原文档(Document)。第二步:将原文
1.1 Lucene学习总结之一:全文检索的基本原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Lucene学习总结之二:Lucene的总体架构 . . . . . . . . . . . . ...
本系列文章将详细描述几乎最新版本的Lucene的基本原理和...Lucene学习总结之一:全文检索的基本原理 http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623594.html Lucene学习总结之二:Lucene的总体架构 ...
Lucene的的学习资料及案例,包括一个lucene的学习资料总结。供大家学习使用,也有本人写的一个小案例。
前段时间学习lucene的总结,因为版本已经更新到了3.2,一些API有更新,很多现有的网页上找到的教程都跑不了。
lucene学习开发入门教程,介绍了lucene的原理,用法。有相关代码和实例。lucene绝对的实用和经典教程。
本资源有三个内容: 电子书《搜索引擎--原理、技术与系统》 和两个网友的lucene学习分析资源。
这是我在学习lucene过程中,总结出来地认为有一定总结力度地文章,相信可以对你有所积极影响!
此博文是对近期做lucene索引的总结, (lucene,solr,netty,hadoop),如蒙加入,不胜感激,大家共同探讨,本人争取每日一博,希望大家关注呦
一步一步跟我学习lucene是对近期做lucene索引的总结,
我学习搜索引擎时的lucene总结,有doc格式,还有chm格式的可方便查看
文档中包含Lucene4.0.0版本jar包,中文分词器jar包,Lucene实例代码 1:建立索引 2:各种搜索方式方法 3:删除索引 4:检查索引文件 5:恢复删除的索引 6:强制删除 7:更新索引 8:合并索引 9:高亮回显 供大家参考...
一步一步跟我学习lucene是对近期做lucene索引的总结,