lucenelucene 原理
lucene  时间:2021-08-16  阅读:(
)
 
 
如何用Lucene索引数据库
Lucene一个常见的用例是在一个或者多个数据库表进行全文检索。
 虽然MySql有全文检索的功能,但是如果字段和数据量增加,MySql的性能会减低很快。
映射数据到Lucene
用伪代码表示:
String sql = “select id, firstname, lastname, phone, email from person”;
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
Document doc = new Document();
doc.add(new Field(”id”, rs,getString(”firstname”), Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.add(new Field(”firstname”, rs,getString(”firstname”), Field.Store.YES, Field.Index.TOKENIZED));
// … repeat for each column in result set
writer.addDocument(doc);}
显示搜索结果
当显示搜索结果给用户时,你有两个选择:
1.因为你的Table已经扁平化到了Lucene里面,所以只需要用Document里面的Field.因为Lucene也非常快,这样会大大减低你的数据库的压力。
2.如果你要显示另外的数据到你的搜索结果页,你只需要在Hits里面收集他们的ID,然后从数据库去数据再根据结果组装搜索结果页。
要搜索的东西
以上列出的方式都是假设把整个结果集放到内存里面,这样在数据集大的话会很容易造成问题,你需要在你的SQL里面做一些分页或者offset
你还需要在你的结果集里面做一个try/catch,这样当添加一个Document出错的时候不会影响整个过程。
通常情况下可以把所有的field放到同一个”Contents” field然后只搜索这一个字段,但是需要保留这些field这样可以按field检索。
如果你需要检索多个table
通常最好能用不同的索引来搜索不同类型的数据,而不是把他们加到同一个index然后根据类型来区分。
原因:
可以更简单的维护操作。
问个很菜的有关问题,lucene如何读
呵呵,小弟英语确实很差,这技术也没接触过,刚刚才看到的 我女朋友用到,我得给她讲,这东西不知道怎么读……各位帮忙------解决方案--------------------------------------------------------Lucene是一个非常优秀的开源的全文搜索引擎,我们可以在它的上面开发 出各种全文搜索的应用来。
Lucene在国外有很高的知名度,现在已经是Apache的顶级项目, 在国内,Lucene的应用也越来越多。
读法就直接照字面读就行了,因为不是一个本来就有的单词,所以只要读得不太离谱就行了 ------解决方案--------------------------------------------------------我读的是 路森呢 哈哈 ------解决方案--------------------------------------------------------建议安个金山词霸之类的,它里面有朗读功能! ------解决方案--------------------------------------------------------又长见识了------解决方案--------------------------------------------------------卢斯呢用Lucene查询数据库,高手请进,急!!!谢谢!!!
lucene不能直接查数据库,你得把数据库的东西取出来写到索引文件里头去。
可以先把数据库里的东西写到resultset中然后在一个一个取出来写到索引里。
注意每个document里面写数据库里一行的数据,例如数据库有id和name两列,则每个document都包含一个id和一个name信息。
这样你搜“奔驰”时,才能显示所有相关信息。
具体建立索引和搜索的实现网上都有相关代码,搜一搜就可以了。
lucene 原理
public static void addIndex(java.sql.ResultSet rs) throws SQLException, CorruptIndexException, IOException{
   Analyzer luceneAnalyzer  =   new  StandardAnalyzer(); //实例化一个标准分析器 (对字符串进行索引分析的算法)    你可以把它看作一个分词器
      IndexWriter indexWriter  =   new  IndexWriter("e:/weihai/sou", luceneAnalyzer, true);//实例化一个输出流,true重新创建,false增量创建
      while(rs.next()){   //java.sql.ResultSet rs  你要建立索引的对象
          Document document  =   new  Document();    // 实例化一个文档对象 这个文档可以说是保存索引内容的文档
       String goods_id = rs.getString("goods_id");  //这是需要建立索引的实体对象
       if(goods_id==null) goods_id="";   
          Field shopid = new Field("shopid",rs.getString("shop_id"),Field.Store.YES, Field.Index.NO);//一个完整的索引多个域组成(field) 在这里有3个 分别是shopid,以及下面的goodsid,FieldBody;
我打个比方说,我们对一篇文章做全文检索的索引,我们可以分别把文章的保存路径,文章的标题,文章的正文内容作为3个field,然后一起通过下面的document.add保存到一个Document对象中,那么在检索的时候,我们在正文中查找到目标字段,同时我们可以做到把该文档的保存路径以及标题也取到;
          Field goodsid = new Field("goodsid",goods_id,Field.Store.YES, Field.Index.NO);//不做索引
          Field FieldBody  =   new  Field( "body" , rs.getString("shopname")+" "+rs.getString("goodsname"), Field.Store.YES,Field.Index.TOKENIZED,Field.TermVector.WITH_POSITIONS_OFFSETS);   
          document.add(shopid);   
          document.add(goodsid); 
          document.add(FieldBody);            //把索引字段添加到行对象中
          indexWriter.addDocument(document);  //把一行信息加入到输出流中
         }
         indexWriter.optimize();         /mit 写出到硬盘上
         indexWriter.close();    // 关闭流
 }
 public static void main(String[] args) throws CorruptIndexException, ClassNotFoundException, SQLException, IOException {
  queryDB();
  System.out.println("创建索引成功");
 }
//如果还有什么不明白的可以直接M我,有时间的话,可以回答一点简单的问题
} 
		  
		  
		      
			  
		  
			  			   
			      
			        
			          
			          IntoVPS是成立于2004年的Hosterion SRL旗下于2009年推出的无管理型VPS主机品牌,商家提供基于OpenStack构建的VPS产品,支持小时计费是他的一大特色,VPS可选数据中心包括美国弗里蒙特、达拉斯、英国伦敦、荷兰和罗马尼亚等6个地区机房。商家VPS主机基于KVM架构,最低每小时0.0075美元起($5/月)。下面列出几款VPS主机配置信息。CPU:1core内存:2GB...
			         
			       
				  
			     
							   
			      
			        
			          
			          青云互联怎么样?青云互联是一家成立于2020年6月的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,目前提供有美国免费主机、香港主机、香港服务器、美国云服务器,让您的网站高速、稳定运行。美国cn2弹性云主机限时8折起,可选1-20个IP,仅15元/月起,附8折优惠码使用!点击进入:青云互联官方网站地址青云互联优惠码:八折优惠码:ltY8sHMh (续费同价)青云互联活动方案:美国洛杉矶...
			         
			       
				  
			     
							   
			      
			        
			          
			          PacificRack最近促销上瘾了,活动频繁,接二连三的追加便宜VPS秒杀,PacificRack在 7月中下旬已经推出了五款秒杀VPS套餐,现在商家又新增了三款更便宜的特价套餐,年付低至7.2美元,这已经是本月第三波促销,带宽都是1Gbps。PacificRack 7月秒杀VPS整个系列都是PR-M,也就是魔方的后台管理。2G内存起步的支持Windows 7、10、Server 2003\20...
			         
			       
				  
			     
							
			   
			   
lucene为你推荐
	注册表命令运行注册表命令是什么?可以访问违规网站的浏览器能否让UC浏览屏蔽掉这些骗子违法的网站域名,永久不能访问。网页图片显示不出来电脑的图片都显示不出来了,怎么办?appmakr如何制作手机app应用软件的方法ucosiiucosii是什么?里面的OS是指什么?在看正点原子给的stm32f407开发指南的时候看到这个,什么意思?订单详情淘宝购物记录具体指什么?是订单详情还是交易聊天记录???cs躲猫猫cs躲猫猫怎么联机 今天在一个视频上看到的,T可以变成地图上的一个物品CT是找,请问怎么和老外联机高质量图片怎么高品质地保存图片讯飞tts能配合讯飞语音tts使用的手机阅读器都有哪些vrrp配置vrrp怎样配置、它是什么东西、在那配置它呢?(超级终端里)最好举例子
备案域名查询 服务器评测 42u机柜尺寸 免费ftp站点 韩国网名大全 灵动鬼影 京东商城0元抢购 有益网络 申请个人网站 国外免费全能空间 183是联通还是移动 环聊 免费邮件服务器 路由跟踪 东莞主机托管 hdchina 湖南铁通 WHMCS 卡巴斯基免费下载 挂马检测工具 更多