longstartTime=newDate().getTime();
Stringurl=hosts[i].substring(hosts[i].indexOf("//")+2,hosts[i].lastIndexOf("/"));
System.out.println("第"+(i+1)+"次,在主机:
"+url+"上创建索引,创建时间"+newDate());
if(i==(hosts.length-1)){
hostlist(reader,lengh*i,lengh*(i+1)+j,hosts[i]);
}else{
hostlist(reader,lengh*i,lengh*(i+1),hosts[i]);
}
System.out.println("结束时间"+newDate());
longendTime=newDate().getTime();
longms=(endTime-startTime)%60000-(((endTime-startTime)%60000)/1000)*1000;
System.out.println("本次索引创建完毕,一共用了"+(endTime-startTime)/60000+"分"+
""+((endTime-startTime)%60000)/1000+"秒"+ms+"毫秒");
System.out.println("****************************");
}
reader.close();
}
publicvoidcreateIndex(Listbeans,StringhostUrl,CommonsHttpSolrServerserver){
try{
server.addBeans(beans);
mit();
}catch(SolrServerExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args)throwsCorruptIndexException,IOException{
IndexCreateas=newIndexCreate();
String[]hosts=newString[]{"http:
//192.168.169.121:
9888/solr","http:
//192.168.169.121:
9088/solr","http:
//192.168.169.48:
9888/solr"};
longstartTime=newDate().getTime();
as.readerHostCreate(hosts);
longendTime=newDate().getTime();
System.out.println("-------------------");
longms=(endTime-startTime)%60000-(((endTime-startTime)%60000)/1000)*1000;
System.out.println("全部索引创建完毕,一共用了"+(endTime-startTime)/60000+"分"+
""+((endTime-startTime)%60000)/1000+"秒"+ms+"毫秒");
}
}
JavaBean类BookIndex.java代码如下:
说明变量名与sechma.xml中的配置要相同.注意:
不能使用score这个变量或者字段,与slor配置冲突,报exception。
importorg.apache.solr.client.solrj.beans.Field;
publicclassBookIndex{
@Field
privateStringzjid;
@Field
privateStringtitle;
@Field
privateStringssid;
@Field
privateStringdxid;
@Field
privateStringbookname;
@Field
privateStringauthor;
@Field
privateStringpublisher;
@Field
privateStringpubdate;
@Field
privateStringyear;
@Field
privateStringfenlei;
@Field
privateStringscore1;
@Field
privateStringisbn;
@Field
privateStringfenleiurl;
@Field
privateStringmulu;
@Field
privateStringisp;
@Field
privateStringiep;
publicgetters();//get方法
publicsetters();//set方法
}
3,同时开启四台服务器,运行上面代码:
4,打开IE查询
打开:
http:
//localhost/solr
打开:
http:
//localhost:
9888/solr
打开http:
//localhost:
9008/solr
打开http:
//192.168.168.48:
9888/solr
四、Solr的Multicore(分片)配置
body{background:
#eee;margin:
0;padding:
0}
.example{background:
#FFF;width:
800px;border:
1px#000solid;margin:
20pxauto;padding:
15px;-moz-border-radius:
3px;-webkit-border-radius:
3px}
.exampleimg{margin:
22px}
}
六、一个简单的web引用:
首先说明的是索引来源,是根据已有的lucene索引上开发的,又因为lucene的索引直接用solrJ应用效果不好,会出现很多问题,找不到类似的解决办法,比如全字段查询,和高亮分组等,和多级索引目录…。
但用solrJ创建的索引不存在类似的问题.
大致的思路是,读取已有的lucene索引,再用solrJ创建索引并分发到多台机器上,最后再做开发.
第一步:
读取lucene的多级索引目录,用solrJ创建和分发索引;
需注意的是:
要加大虚拟机的内存,因为采用的map做为缓存,理论上虚拟机的内存大,map的存储的索引文档数也就多.主要是针对内存溢出.
代码:
packageorg.readerIndex;
importorg.apache.solr.client.solrj.beans.Field;
publicclassBookIndex2{
@Field
privateStringzjid;
@Field
privateStringzhangjie;
@Field
privateStringssid;
@Field
privateStringqwpos;
@Field
privateStringpublishDate;
@Field
privateStringmulu;
@Field
privateStringfenleiurl;
@Field
privateStringfenlei;
@Field
privateStringdxid;
@Field
privateStringauthor;
@Field
privateStringaddress;
@Field
privateStringbookname;
publicStringgetZjid(){
returnzjid;
…………………………………………
}
packageorg.readerIndex;
importjava.io.File;
importjava.io.IOException;
importjava.text.SimpleDateFormat;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.List;
importorg.apache.lucene.document.Document;
importorg.apache.lucene.index.CorruptIndexException;
importorg.apache.lucene.index.IndexReader;
importorg.apache.lucene.store.LockObtainFailedException;
importorg.apache.solr.client.solrj.SolrServerException;
importorg.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
publicclassReaderIndex{
publicCommonsHttpSolrServergetServer(StringhostUrl){
CommonsHttpSolrServerserver=null;
try{
server=newCommonsHttpSolrServer(hostUrl);
server.setConnectionTimeout(100);
server.setDefaultMaxConnectionsPerHost(100);
server.setMaxTotalConnections(100);
}catch(IOExceptione){
System.out.println("请检查tomcat服务器或端口是否开启!
");
}
returnserver;
}
publicvoidindexDocuements(Stringpath,String[]hostUrls)throwsCorruptIndexException,LockObtainFailedException,IOException{
FilepareFile=newFile(path);
Listlist=newArrayList();
getFile(pareFile,list);//递归方法得到路径保存到list中
System.out.println("***程序一共递归到"+list.size()+"个索引目录***");
intarevageSize=list.size()/hostUrls.length;//根据主机数平分目录
intremainSize=list.size()%hostUrls.length;//取余
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:
mm:
ss");
for(inti=0;iDatestartDate=newDate();
Stringurl=hostUrls[i].substring(hostUrls[i].indexOf("//")+2,hostUrls[i].lastIndexOf("/"));
System.out.println("第"+(i+1)+"次,在主机:
"+url+"上创建索引,创建时间"+sdf.format(startDate));
if(i==(hostUrls.length-1)){
list(list,arevageSize*i,arevageSize*(i+1)+remainSize,hostUrls[i]);
/*
*/
(function($){
$.fn.imageLens=function(options){
vardefaults={
lensSize:
100,
borderSize:
4,
borderColor:
"#888"
};
varoptions=$.extend(defaults,options);
varlensStyle="background-position:
0px0px;width:
"+String(options.lensSize)+"px;height:
"+String(options.lensSize)
+"px;float:
left;display:
none;border-radius:
"+String(options.lensSize/2+options.borderSize)
+"px;border:
"+String(options.borderSize)+"pxsolid"+options.borderColor
+";background-repeat:
no-repeat;position:
absolute;";
returnthis.each(function(){
obj=$(this);
varoffset=$(this).offset();
//Creatinglens
vartarget=$(" ").appendTo($(this).parent());
vartargetSize=target.size();
//Calculatingactualsizeofimage
varimageSrc=options.imageSrc?
options.imageSrc:
$(this).attr("src");
varimageTag="none;'src='"+imageSrc+"'/>";
varwidthRatio=0;
varheightRatio=0;
$(imageTag).load(function(){
widthRatio=$(this).width()/obj.width();
heightRatio=$(this).height()/obj.height();
}).appendTo($(this).parent());
target.css({backgroundImage:
"url('"+imageSrc+"')"});
target.mousemove(setPosition);
$(this).mousemove(setPosition);
functionsetPosition(e){
varleftPos=parseInt(e.pageX-offset.left);
vartopPos=parseInt(e.pageY-offset.top);
if(leftPos<0||topPos<0||leftPos>obj.width()||topPos>obj.height()){
target.hide();
}
else{
target.show();
leftPos=String(((e.pageX-offset.left)*widthRatio-target.width()/2)*(-1));
topPos=String(((e.pageY-offset.top)*heightRatio-target.height()/2)*(-1));
target.css({backgroundPosition:
leftPos+'px'+topPos+'px'});
leftPos=String(e.pageX-target.width()/2);
topPos=String(e.pageY-target.height()/2);
target.css({left:
leftPos+'px',top:
topPos+'px'});
}
}
});
};
})(jQuery);
展开阅读全文
相关搜索