lucene初探(-):lucene基本,实现文件查找
来源:互联网 发布:怎么加入淘宝客平台 编辑:程序博客网 时间:2024/05/03 09:56
1:什么是lucene?
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆.
以前我们的搜索都是从数据库中查找,这样既耗费带宽而且用户体验也不好,有的时候我们的用户想搜索整个网站的内容时,sql搜索就做不到了,总的来说就是我们可以实用lucene框架很容易的实现web站点的内容检索,
由于网络上lucene学习视频即教程都是杂乱无章,Apache自己的关于lucene说明文档,也不是很清晰,虽然现在lucene6.0已经发布,但是作为一个小白,很抱歉我的能力不够,实在看不懂lucene6.0,所以这里,先从lucene4.0学起
2:lucene4.0实现文件检索
2.1:首先准备要检索的文件
2.2,编写文件检索代码
代码如下,内容解释都在代码中:
package com.leige.demo;import java.io.File;import java.io.FileReader;import java.io.IOException;import org.apache.lucene.analysis.core.SimpleAnalyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field.Store;import org.apache.lucene.document.StringField;import org.apache.lucene.document.TextField;import org.apache.lucene.index.DirectoryReader;import org.apache.lucene.index.IndexReader;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.queryparser.classic.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.search.TopScoreDocCollector;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;/** * Created by 姊佺 on 2016/6/4. */public class HelloLucene { public void index() throws Exception{//创建索引 IndexWriter writer=null; try { //1.创建directory,保存索引,可以保存在内存中也可以保存在硬盘上 //保存在内存中使用Directory directory=new RAMDirectory(); Directory directory= FSDirectory.open(new File("F:\\lucene\\index")); //2.1创建indexwriterConfig,并指定分词器版本 IndexWriterConfig config=new IndexWriterConfig(Version.LUCENE_40, new SimpleAnalyzer(Version.LUCENE_40)); //2,创建IndexWriter,indexWriter,需要使用indexConfig, writer= new IndexWriter(directory, config); //3.创建document Document doc=null; File docDirectory=new File("F:\\lucene\\example"); for(File file: docDirectory.listFiles()){ doc=new Document(); //创建搜索域,并说明是否进行分词 doc.add(new TextField("content",new FileReader(file))); doc.add(new StringField("filename", file.getName(), Store.YES)); doc.add(new StringField("path",file.getAbsolutePath(), Store.YES)); //写入文档 writer.addDocument(doc); } }catch (Exception e){ throw e; }finally { if(writer!=null)writer.close(); } } public void seach(){//搜索索引 IndexReader indexReader=null; try { //.1创建索引在的文件夹 Directory indexDirectory=FSDirectory.open(new File("F:\\lucene\\index")); //2.创建indexReader indexReader=DirectoryReader.open(indexDirectory); //3:根据indexReader创建indexSeacher IndexSearcher searcher=new IndexSearcher(indexReader); //4创建搜索用的query,指定搜索域 QueryParser parser=new QueryParser(Version.LUCENE_40,"content", new SimpleAnalyzer(Version.LUCENE_40)); Query query=parser.parse("mybatis"); TopScoreDocCollector collector = TopScoreDocCollector.create(10, true); //5,根据seacher搜索 searcher.search(query,collector); ScoreDoc[] scoreDocs=collector.topDocs().scoreDocs; for (ScoreDoc sd:scoreDocs){ //6:根据seacher和scoredoc对象获取具体的document对象 Document doc=searcher.doc(sd.doc); System.out.println(doc.get("filename")+"---------"+doc.get("path")); } } catch (Exception e) { e.printStackTrace(); }finally { if(indexReader!=null) try { indexReader.close(); } catch (IOException e) { e.printStackTrace(); } } }}
2.3测试代码,注意要先执行创建索引,然后才能查找
package com.leige.demo;import static org.junit.Assert.*;import org.junit.Test;public class HelloLuceneTest { @Test public void test() {//测试索引 HelloLucene lucene=new HelloLucene(); try { lucene.index(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void seach(){//搜索索引 HelloLucene lucene=new HelloLucene(); try { lucene.seach(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
执行创建索引会生成,索引文件:如下
2.4,文件检索结果,表示这两个,文件中包含mybatis文字:
需要注意的lucene自带的分词器,对中文分词不是很友好,所以我们可以再第三方分词器,例如mms分词器也是极好的
- lucene初探(-):lucene基本,实现文件查找
- Lucene---查找的实现
- lucene 基本实现
- Lucene初探
- 初探Lucene
- Lucene初探
- Lucene初探
- Lucene 初探
- Lucene初探
- Lucene初探
- Lucene初探
- Lucene初探之索引文件的基本类型与基本规则
- 实现lucene来进行全文索引查找
- lucene中文索引初探
- Lucene分词初探---LetterTokenizer
- [lucene]初探bobo-browse
- Lucene.net初探
- 全文索引 Lucene初探
- 学习js笔记一(Math)
- Android 中Notification的运用
- 【数据库视频】Transact-SQL编程
- 简单制作用户注册表单
- 虚拟机网络详解
- lucene初探(-):lucene基本,实现文件查找
- javascript面向对象编程总结
- 使用wait方法和notify方法用于线程间通信的正确姿势
- Android 补件动画 TweenAnimation 简单DEMO
- 【java】异常处理
- 教你用最新工具反编译android apk
- CSS水平居中/垂直居中的N个方法
- Android四大基本组件介绍与生命周期
- 3.5判断出栈和入栈操作序列是否合法