搜索引擎---Lucene

一、定义:Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的创建索引和查询索引,以及部分文本分析的引擎,Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎,Lucene在全文检索领域是一个经典的祖先,现在很多检索引擎都是在其基础上创建的,思想是相通的。即:Lucene是根据关健字来搜索的文本搜索工具,只能在某个网站内部搜索文本内容,不能跨网站搜索。

二、使用Lucene原因:

(1)SQL只能针对数据库的表搜索,不能直接对硬盘上的文本搜索

(2)SQL没有相关度排名

(3)SQL搜索结果没有关健字高亮显示

(4)SQL需要数据库的支持,数据库本身需要内存开销较大,例如:Oracle

(5)SQL搜索有时较慢,尤其是数据库不在本地时,超慢,例如:Oracle

三、使用步骤:

1.创建javaWeb工程

2.导入Lucene相关的jar包:

  lucene-core-3.0.2.jar【Lucene核心】

  lucene-analyzers-3.0.2.jar【分词器】

  lucene-highlighter-3.0.2.jar【Lucene会将搜索出来的字,高亮显示,提示用户】

  lucene-memory-3.0.2.jar【索引库优化策略】

3.编写代码

  1. 定义一个Javabean类

    2.测试类

 /**
	    * 使用IndexWrite向索引库中写入数据
	    * Ctrl+T显示某个类的继承结构
	    * @throws IOException 
	    */
	    @Test
	   public void CreateIndex() throws IOException{
		   
		    
		    //索引存放的位置,设置在当前目录中
		    Directory directory = FSDirectory.open(Paths.get("indexDir/"));
		    
		    //添加Lucene的版本
		      Version version = Version.LUCENE_6_6_0;
		      
		    //创建lucene的分词器,主要用于进行分词,比如识别你好,中国,甚至一些以前没有,但现在出先的词
		       Analyzer analyzer = new StandardAnalyzer(); 
		    //创建索引写入配置
		       IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
		       
		      //创建索引写入对象
		     IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);
		       
		      //创建Document对象,存储索引
		     
		      Document doc = new Document();
		      
		      //创建字段用于存储数据
		      
		       /**
		        * @param:name:字段名 
		        * @param:value:字段值 
		        * @param:store:是否存储 
		        */
		           
		         
		       int iD = 6;
		       Field id = new IntPoint("id",iD);
		       Field storeField = new StoredField("id", iD);
		       Field title = new StringField("title","ImportNew - 专注Java & Android 技术分享",Store.YES);
		       Field content = new TextField("content","ImportNew 是一个专注于 Java & Android 技术分享的博客,为Java 和 Android开发者提供有价值的内容。包括:Android开发与快讯、Java Web开发和其他的Java技术相关的",Store.YES);
		   
		       
		       //将字段加入到doc中
		        doc.add(id);
		        doc.add(title);
		        doc.add(content);
		        doc.add(storeField);
		        
		        //将doc对象保存到索引库中
		        indexWriter.addDocument(doc);
		        
		        //关闭流
		        indexWriter.close();
		    
	   }
	    
	    
	    /**
	     * @throws IOException 
	     * 
	     */
	    @Test
	   public void SelectIndex() throws IOException{
		    
		     //索引存放的位置 
		      Directory directory = FSDirectory.open(Paths.get("indexDir/"));
		    //创建索引的读取器
		      IndexReader indexReader = DirectoryReader.open(directory);
		      
		       //创建一个索引的查找器,来检索索引库
		   IndexSearcher indexSearcher = new IndexSearcher(indexReader);
		   
		    //这是一个条件查询的api,用于添加条件
		   Term term = new Term("title","ImportNew - 专注Java & Android 技术分享");
		   TermQuery termQuery = new TermQuery(term);
		   
		   //搜索先搜索索引库
		     
		       //返回符合条件的前100条记录
		      TopDocs topDocs =  indexSearcher.search(termQuery, 100);
		   
		       //打印查询到的记录数
		      System.out.println("总记录数:"+topDocs.totalHits);
		      
		      //得到得分文档数组
		       ScoreDoc scoreDocs[] = topDocs.scoreDocs;
		    
		       //遍历数组,返回一个击中
		        for(ScoreDoc scoreDoc : scoreDocs){
		        	
		        	  int docID = scoreDoc.doc;
		        	  
		        	 //取得对应的文档对象
		        	   Document document = indexSearcher.doc(docID);
		        	   
		        	   System.out.println(document.get("id"));
		        	   System.out.println(document.get("title"));
		        	   System.out.println(document.get("content"));
		        }
		   
	   }

注:不同lucene的版本对应的jdk版本是不一样的,不对应会出错。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值