Lucene基本使用介绍<o:p></o:p>
<o:p> </o:p>
本文的目的不在于对Lucene的概念和设计这些进行介绍,仅在于介绍怎么样去使用Lucene来达到自己想要的几种常见的全文检索的需求,如果想深入了解Lucene的话本文不会带给你什么收获的。看完本文后想更深入的了解Lucene请访问:http://<o:p></o:p>lucene.apache.org
<o:p> </o:p>
一. 概述<o:p></o:p>
随着系统信息的越来越多,怎么样从这些信息海洋中捞起自己想要的那一根针就变得非常重要了,全文检索是通常用于解决此类问题的方案,而Lucene则为实现全文检索的工具,任何应用都可通过嵌入它来实现全文检索。<o:p></o:p>
二. 环境搭建<o:p></o:p>
从lucene.apache.org上下载最新版本的lucene.jar,将此jar作为项目的build path,那么在项目中就可以直接使用lucene了。<o:p></o:p>
三. 使用说明<o:p></o:p>
3.1. 基本概念<o:p></o:p>
这里介绍的主要为在使用中经常碰到一些概念,以大家都比较熟悉的数据库来进行类比的讲解,使用Lucene进行全文检索的过程有点类似数据库的这个过程,table---à查询相应的字段或查询条件----à返回相应的记录,首先是IndexWriter,通过它建立相应的索引表,相当于数据库中的table,在构建此索引表时需指定的为该索引表采用何种方式进行构建,也就是说对于其中的记录的字段以什么方式来进行格式的划分,这个在Lucene中称为Analyzer,Lucene提供了几种环境下使用的Analyzer:SimpleAnalyzer、StandardAnalyzer、GermanAnalyzer等,其中StandardAnalyzer是经常使用的,因为它提供了对于中文的支持,在表建好后我们就需要往里面插入用于索引的记录,在Lucene中这个称为Document,有点类似数据库中table的一行记录,记录中的字段的添加方法,在Lucene中称为Field,这个和数据库中基本一样,对于Field Lucene分为可被索引的,可切分的,不可被切分的,不可被索引的几种组合类型,通过这几个元素基本上就可以建立起索引了。在查询时经常碰到的为另外几个概念,首先是Query,Lucene提供了几种经常可以用到的Query:TermQuery、MultiTermQuery、BooleanQuery、WildcardQuery、PhraseQuery、PrefixQuery、PhrasePrefixQuery、FuzzyQuery、RangeQuery、SpanQuery,Query其实也就是指对于需要查询的字段采用什么样的方式进行查询,如模糊查询、语义查询、短语查询、范围查询、组合查询等,还有就是QueryParser,QueryParser可用于创建不同的Query,还有一个MultiFieldQueryParser支持对于多个字段进行同一关键字的查询,IndexSearcher概念指的为需要对何目录下的索引文件进行何种方式的分析的查询,有点象对数据库的哪种索引表进行查询并按一定方式进行记录中字段的分解查询的概念,通过IndexSearcher以及Query即可查询出需要的结果,Lucene返回的为Hits.通过遍历Hits可获取返回的结果的Document,通过Document则可获取Field中的相关信息了。<o:p></o:p>
通过对于上面在建立索引和全文检索的基本概念的介绍希望能让你对Lucene建立一定的了解。<o:p></o:p>
3.2. 全文检索需求的实现<o:p></o:p>
索引建立部分的代码:<o:p></o:p>
对于某字段的关键字的模糊查询<o:p></o:p>
private void createIndex(String indexFilePath) throws Exception{
IndexWriter iwriter=getWriter(indexFilePath);
Document doc=new Document();
doc.add(Field.Keyword("name","jerry"));
doc.add(Field.Text("sender","bluedavy@gmail.com"));
doc.add(Field.Text("receiver","google@gmail.com"));
doc.add(Field.Text("title","用于索引的标题"));
doc.add(Field.UnIndexed("content","不建立索引的内容"));
Document doc2=new Document();
doc2.add(Field.Keyword("name","jerry.lin"));
doc2.add(Field.Text("sender","bluedavy@hotmail.com"));
doc2.add(Field.Text("receiver","msn@hotmail.com"));
doc2.add(Field.Text("title","用于索引的第二个标题"));
doc2.add(Field.Text("content","建立索引的内容"));
iwriter.addDocument(doc);
iwriter.addDocument(doc2);
iwriter.optimize();
iwriter.close();
}
private IndexWriter getWriter(String indexFilePath) throws Exception{
boolean append=true;
File file=new File(indexFilePath+File.separator+"segments");
if(file.exists())
append=false;
return new IndexWriter(indexFilePath,analyzer,append);
}
3.2.1.
对于某字段的关键字的语义查询<o:p></o:p>
Query query=new WildcardQuery(new Term("sender","*davy*"));
Searcher searcher=new IndexSearcher(indexFilePath);
Hits hits=searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i).get("name"));
}
3.2.2.
对于多字段的关键字的查询<o:p></o:p>
Query query=QueryParser.parse("索引","title",analyzer);
Searcher searcher=new IndexSearcher(indexFilePath);
Hits hits=searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i).get("name"));
}
3.2.3.
复合查询(多种查询条件的综合查询)<o:p></o:p>
Query query=MultiFieldQueryParser.parse("索引",new String[]{"title","content"},analyzer);
Searcher searcher=new IndexSearcher(indexFilePath);
Hits hits=searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i).get("name"));
}
3.2.4.
总结<o:p></o:p>
分享到:
相关推荐
lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....
赠送jar包:lucene-core-7.7.0.jar; 赠送原API文档:lucene-core-7.7.0-javadoc.jar; 赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene...
赠送jar包:lucene-core-7.2.1.jar; 赠送原API文档:lucene-core-7.2.1-javadoc.jar; 赠送源代码:lucene-core-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.2.1.pom; 包含翻译后的API文档:lucene...
赠送jar包:lucene-core-6.6.0.jar; 赠送原API文档:lucene-core-6.6.0-javadoc.jar; 赠送源代码:lucene-core-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-6.6.0.pom; 包含翻译后的API文档:lucene...
赠送jar包:lucene-analyzers-smartcn-7.7.0.jar; 赠送原API文档:lucene-analyzers-smartcn-7.7.0-javadoc.jar; 赠送源代码:lucene-analyzers-smartcn-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-...
Lucene 4 Cookbook is a practical guide that shows you how to build a scalable search engine for your application, from an internal documentation search to a wide-scale web implementation with millions...
Lucene3.0特性Lucene3.0特性
lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例
来自“猎图网 www.richmap.cn”基于IKAnalyzer分词算法的准商业化Lucene中文分词器。 1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP) 2. 对数量词、地名、路名的...
本书深入浅出地介绍了Lucene——一个开源的使用Java语言编写的全文搜索引擎开发包。它通过浅显的语言、大量的图注、丰富的代码示例,以及清晰的结构为读者呈现出作为优秀开源项目的Lucene 所体现的强大功能。全书共...
本课程由浅入深的介绍了Lucene4的发展历史,开发环境搭建,分析lucene4的中文分词原理,深入讲了lucenne4的系统架构,分析lucene4索引实现原理及性能优化,了解关于lucene4的搜索算法优化及利用java结合lucene4实现...
lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮
说明:依赖jar包:lucene-core-2.3.2.jar、IKAnalyzer3.2.8.jar。 一、LuceneUtil 工具类代码: package com.zcm.lucene; import java.io.File; import java.io.IOException; import java.io.StringReader; import...
lucene-analyzers-common-4.2.0.jar; lucene-analyzers-kuromoji-4.2.0.jar; lucene-analyzers-phonetic-4.2.0.jar; lucene-codecs-4.2.0.jar; lucene-core-4.2.0.jar; lucene-grouping-4.2.0.jar; lucene-...
lucene
lucene7.3的一些常用jar包 Setting your CLASSPATH First, you should download the latest Lucene distribution and then extract it to a working directory. You need four JARs: the Lucene JAR, the ...
lucene3源码分析
赠送jar包:lucene-suggest-7.7.0.jar; 赠送原API文档:lucene-suggest-7.7.0-javadoc.jar; 赠送源代码:lucene-suggest-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-suggest-7.7.0.pom; 包含翻译后的API...
lucene
lucene简介 1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。 2 lucene的工作方式 lucene...