Lucene-全文索引

一.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();//通常放到事务外


 
 

六.高级搜索

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值