Lucene-全文索引
2015-11-12 15:54
302 查看
一.Lucene基础
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。
二.下载
lucene有7个包需要导入:analysis,document,index,queryParser,search,store,util
以下是最常用的:
Lucene-core-5.0.0.jar,其中包括了常用的文档,索引,搜索,存储等相关核心代码
Lucene-analyzers-common-5.0.0.jar,这里面包含了各种语言的词法分析器,用于对文件内容进行关键字切分,提取。
Lucene-highlighter-5.0.0.jar,这个jar包主要用于搜索出的内容高亮显示。
Lucene-queryparser-5.0.0.jar,提供了搜索相关的代码,用于各种搜索,比如模糊搜索,范围搜索,等等。
三.索引建立
四.分词
五.搜索
六.高级搜索
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。
二.下载
lucene有7个包需要导入:analysis,document,index,queryParser,search,store,util
以下是最常用的:
Lucene-core-5.0.0.jar,其中包括了常用的文档,索引,搜索,存储等相关核心代码
Lucene-analyzers-common-5.0.0.jar,这里面包含了各种语言的词法分析器,用于对文件内容进行关键字切分,提取。
Lucene-highlighter-5.0.0.jar,这个jar包主要用于搜索出的内容高亮显示。
Lucene-queryparser-5.0.0.jar,提供了搜索相关的代码,用于各种搜索,比如模糊搜索,范围搜索,等等。
三.索引建立
//以下是将索引放到内存上 //1.创建Directory (索引建立在内存还是硬盘等) //Directory directory = new RAMDirectory();///创建索引在内存上 Directory directory = new FSDirectory.open(new File("E:/lucene/index"));//创建索引在硬盘上 //2.创建IndexWriter (写索引) Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_CURRENT, analyzer); IndexWriter iwriter = new IndexWriter(directory, config); //3.创建Document对象(文档或数据库表等每一个属性就叫这个文档的field) Document doc = new Document(); //4.为Document添加field File f = new File("E:/lucene/example");//该文件夹下可能会有很多文件 for(File file:f.listFiles()){ doc = new Document(); doc.add(new Field("content",new FildReader(file)))//将内容添加到索引中 doc.add(new Field("fieldname",file.getName(),Fild.Store.YES,Fild.Index.not_Analyzer))//添加名字,将名字存储到硬盘上,不做分词。 doc.add(new Field("path",file.getAbsolutePath(),Fild.Store.YES,Fild.Index.not_Analyzer))//添加文件路径到索引中,将文件路径存储到硬盘上,不做分词。 iwriter.addDocument(doc); } //5.关闭IndexWriter iwriter.close();//通常放到事务外
四.分词
五.搜索
//1.创建Directory (索引建立在内存还是硬盘等) Directory directory = new FSDirectory.open(new File("E:/lucene/index"));//创建索引在硬盘上 //2.创建IndexReader读索引 IndexReader reader = IndexReader.open("directory "); //3.根据IndexReader创建IndexSearcher IndexSearcher searcher = new IndexSearcher("reader"); //4.创建搜索的Query Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); //创建parser来确定要搜索文件的内容,第二个参数表示要搜索的域 QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, analyzer); //创建query表示搜索域为content中包含java的文档 Query query = parser.parse("java");//java是要搜索的词 //5.根据searcher搜索并返回TopDos TopDos tds = searcher.search(query,10);//10条 //6.通过TopDo获取ScoreDos对象 ScoreDos[] sds = tds.scoreDos; for(ScoreDos sd :sds){ //7.根据searcher和ScoreDos对象获取具体得Document对象 Document d = searcher.doc(sd.doc); //8.根据Document对象获取需要的值 System.out.println(d.get("filename")+"["+d.get("path")+"]") } //5.关闭reader reader.close();//通常放到事务外
六.高级搜索
相关文章推荐
- css中奇怪的地方
- 怎么选择公司???MVC加jquery-easyui 后端工程师
- 依赖服务 factory()在angularJS的用法
- setContentView(R.layout.activity…
- ByteArrayOutputStream用法
- gcc链接参数--whole-archive的作用
- linux的awk指令(个人案例)
- Prime C++ Exercise 2.11 编写程序,要求用户输入两个数——底数(base)和指数 (exponent),输出底数的指数次方的结果。
- [Windows Server 2008] IIS自带FTP配置方法
- fragment中onCreateView与onActivityCreated的区别,以及fragment中生命周期的利用
- WebRTC中最简单loopback摄像头&麦克风的例子
- 行内元素
- 给定字典做分词
- [Cocoa]_[初级]_[如何复制NSView]
- 函数做游戏
- swift之数值类型杂谈(数值)
- [Cocoa]_[初级]_[如何复制NSView]
- pom.xml
- VS中宏 _T、TEXT,_TEXT、L 的作用:
- 我的简单swift爬虫类