您的位置:首页 > 其它

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,提供了搜索相关的代码,用于各种搜索,比如模糊搜索,范围搜索,等等。

三.索引建立


//以下是将索引放到内存上
//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();//通常放到事务外





六.高级搜索
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: