设为首页 收藏本站
查看: 1217|回复: 0

[经验分享] 全文搜索服务器 :Solr 4.0

[复制链接]

尚未签到

发表于 2015-7-18 09:24:45 | 显示全部楼层 |阅读模式
  solr是我上周才接触的,一开始的时候很陌生,不知道从哪里开始,我从网上看了很多资料,并加以实践。我一开始就用最新版的solr 4.0,这个版本今年7月份才更新,而且改动幅度比较大,分词器也是刚刚才出了能兼容solr 4.0的版本,所以中文的参考资料很少,我就去看英文文档,把问题一个个地解决,现在已经可以开发出适合企业的版本了。以下是我在学习过程中的总结:
一、安装前的准备:
  1、安装JDK 6+
  2、安装Tomcat 6+
  3、下载好Solr
  下载地址:http://labs.mop.com/apache-mirror/lucene/solr/4.0.0/apache-solr-4.0.0.zip
二、Solr简易安装(体验版)
  1、把下载下来的Solr加压好
  2、打开命令提示符(开始–>运行–>cmd–>回车),cd到apache-solr-4.0.0文件夹下的example文件夹
  3、输入命令:java -jar start.jar
  4、打开浏览器输入网址:http://localhost:8983/solr/ 就可以浏览到solr的主页了
DSC0000.jpg
  5、往solr添加数据:打开一个新的命令提示符,cd到apache-solr-4.0.0文件夹下的example文件夹下的 exampledocs文件夹,输入命令:java -jar post.jar -h 执行完毕后再输入:java -jar post.jar *.xml
  6、尝试查询数据:打开浏览器输入网址:http://localhost:8983/solr/collection1/browse  在Find:输入窗口输入:ipod 按提交按钮即可搜索到有关ipod的信息。
DSC0001.jpg
  
三、Solr 4.0 + mmseg4j 1.9.0 中文分词 (尝试版)
  1、下载mmseg4j 1.9.0
  下载地http://mmseg4j.googlecode.com/files/mmseg4j-1.9.0.v20120712-SNAPSHOT.zip
  2、解压mmseg4j 1.9.0到本地目录把apache-solr-4.0.0\example\webapps目录下solr.war文件复制到tomcat-6\webapps目录下
  3、新建一个solr文件夹,把apache-solr-4.0.0\example\solr下的文件复制到新建的solr 文件夹下,在solr文件夹下新建两个文件夹,一个是lib,一个是dic,把mmseg4j 1.9.0文件夹下的mmseg4j-all-1.9.0.v20120712-SNAPSHOT.jar复制到lib文件夹下,把mmseg4j- 1.9.0.v20120712-SNAPSHOT\data文件夹下的dic文件复制到dic文件夹下
  4、配置solr.home:打开 我的电脑–>属性–>高级–>环境变量,在系统变量中新建一个变量名:solr.home 变量值:f:/solr(你刚刚新建的solr文件的地址,我是建在F盘的)*主意:一定要按完所有的确定
  5、修改 tomcat-6\conf\server.xml,加个 URIEncoding=”UTF-8″,把 8080 的那一块改为:


  •   
  
  6、把下面的内容保存到 tomcat-6\conf\Catalina\localhost\solr.xml,没有这个目录自行创建。


  •    
  •       
  •   
  
  7、添加中文分词:修改solr文件夹(solr.home指定目录)下的collection1\conf\solrconfig.xml 加上 在collection\conf\schema.xml 在里面相应的标签内加入下面这几段代码:


  •    
  •    
  •   
  


  •    
  •    
  •    
  


  •    
  •       
  •            
  •       
  •    
  •   
  •    
  •          
  •          
  •      
  •    
  •   
  •    
  •          
  •          
  •      
  •   
  
  8、启动Tomcat,打开浏览器,输入:http://localhost:8080/solr/#/collection1/analysis FileType选择:MaxWord ,在Field Value (Index)输入中文,然后按Aanlyse Values 就会出行中文分词,如下图效果:
DSC0002.jpg
  
四、Solr 4.0 + Eclipse + IK Analyzer 2012 FF + MySQL中文分词 (企业开发版)
  1、下载IK Analyzer 2012 FF并加压好
  下载地址:http://ik-analyzer.googlecode.com/files/IK%20Analyzer%202012%20FF.zip
  2、Solr 4.0 添加到eclipse project上:在eclipse上创建一个Dynamic Web Project项目名为SolrIK,把apache-solr-4.0.0\example\webapps目录下solr.war 文件加压好放在SolrIK项目下的WebRoot目录下(先删除目录下原有的文件),把apache-solr-4.0.0\example\下的 solr文件夹也复制到WebRoot目录下
  3、修改SolrIK项目下WebRoot\WEB-INF\web.xml文件:找到
  
  把下面那段去掉注释,改为:


  •    
  •    solr/home     
  •    F:/webproject/SolrIK/WebRoot/solr   
  •       
  •    java.lang.String   
  •   
  
  (这个是你存放solr文件的路径,我的项目是建在F:/webproject)
  4、把项目添加到Tomcat里面去:打开eclipse –> Window –> Show View –> Servers ,然后在Servers里面右击 –> new Server –> 选择对应Tomcat 版本next –> 把SolrIK项目add进去 –> finish
DSC0003.jpg
  双击 Tomcat v6.0 Server(上图蓝色区域),再点击Modules(上图顶部白色区域)如果没见到有上图的项目就在左边Add Web Modules
DSC0004.jpg
  5、在Ecplise里启动Tomcat ,打开浏览器输入:http://localhost:8080/SolrIK/ 就可以浏览到Solr
  6、添加IK Analyzer 2012 FF 中文分词:把IKAnalyzer2012_FF文件夹IKAnalyzer2012_FF.jar放在项目的WEB-INF下的lib目录下,修改 WebRoot\solr\collection1\schema.xml 在里面加一条:


  •    
  •   
  •    
  •   
  •    
  •   
  •   
  
  找到以下代码并把type=“text_general”修改为type=“text_zh


  •   
  (修改后)
  7、重启Tomcat ,打开浏览器,输入:http://localhost:8080/solr/#/collection1/analysis     FileType选择:text ,在Field Value (Index)输入中文,然后按Aanlyse Values 就会出行中文分词,如下图效果:
DSC0005.jpg
  
  8、修改索引地址:(可以不修改,如果数据比多的时候就很难维护,建议修改)我在F盘下的tomcat-solr文件夹下建了一个data文件夹, 然后修改WebRoot\solr\collection1\conf\solrconfig.xml 下的${solr.data.dir:F:/tomcat-solr/data}< /dataDir> dir: 为你创建的索引地址路径
  9、安装MySQL 数据库,并建立库为solrj,在其下面建立一个名为t_article的数据表,并把数据库驱动放在WebRoot\WEB-INF\lib目录下
DSC0006.jpg
  10、在WebRoot\solr\collection1\conf下新建一个data-config.xml文件,在里面添加以下代码:(有些地方可能有点不同,如数据库密码)


  •    
  •   
  •    
  •       
  •         
  •          
  •                 ’${dataimporter.last_index_time}’”>   
  •                
  •                
  •                      
  •                
  •            
  •       
  •   
  
  11、solr关联数据库:在WebRoot\solr\collection1\conf\solrconfig.xml 下找到相应的位置添加以下这段配置:


  •    
  •    
  • data-config.xml   
  •    
  •   
  
  在WebRoot\solr\collection1\conf\schema.xml 下找到下面的代码,并把
type=“text_general”修改为type=“text_zh(分词方法):


  •    
  •   
  •   
  
  12、导入数据到solr:打开http://localhost:8080/SolrIK/#/collection1/dataimport//dataimportCommand里把Clean、Commit和Optimize打钩,再点击Execute Import(蓝色按钮)
DSC0007.jpg
  13、打开查询页面,输入q输入框下输入外交部 即可查到两条关于外交部的数据
DSC0008.jpg
  
  14、创建solr客户端:先导入包,把apache-solr-4.0.0\dist下的apache-solr
  -dataimporthandler-4.0.0.jar 和 apache-solr-dataimporthandler-extras-4.0.0.jar复制到
  WebRoot\WEB-INF\lib下,在src下创建一个SolrJSearcheDemo类:


  • package com.aidansu.web.solrj;   
  •   
  • import java.net.MalformedURLException;   
  • import java.util.List;   
  • import java.util.Map;   
  • import org.apache.solr.client.solrj.SolrQuery;   
  • import org.apache.solr.client.solrj.SolrServer;   
  • import org.apache.solr.client.solrj.SolrServerException;   
  • import org.apache.solr.client.solrj.impl.HttpSolrServer;   
  • import org.apache.solr.client.solrj.response.QueryResponse;   
  • import org.apache.solr.common.SolrDocument;   
  • import org.apache.solr.common.SolrDocumentList;   
  •   
  • /**
  • *   
  • * @className:SolrJSearcheDemo.java  
  • * @classDescription: Solr客户端-查询  
  • * @author: AIDAN SU  
  • * @createTime: 2012-10-23  
  • *  
  • */  
  • public class SolrJSearcheDemo {   
  •     /**
  •      * Solr访问地址  
  •      */  
  •     private static final String SOLR_URL =“http://localhost:8081/SolrIK/”;   
  •       
  •     // 通过网络地址获取SolrServer对象   
  •     public SolrServer getSolrServer() throws MalformedURLException {   
  •            
  •         return new HttpSolrServer(SOLR_URL);   
  •     }   
  •         
  •     // 查询方法     
  •     public void search(String key) throws MalformedURLException{     
  •         SolrServer solrServer = getSolrServer();   
  •         // 查询对象   
  •         SolrQuery query = new SolrQuery(key);         
  •       
  •         query.setQuery(key);   
  •             
  •         try {      
  •                
  •             query.setHighlight(true)   
  •                 //设置开头   
  •                 .setHighlightSimplePre(“”)   
  •                 .setHighlightSimplePost(“”) //设置结尾   
  •                 .setStart(0)   
  •                 .setRows(10);//设置行数   
  •             //设置高亮的哪些区域   
  •             query.setParam(“hl.fl”, “content”);   
  •             QueryResponse response=solrServer.query(query);;   
  •             SolrDocumentList list=response.getResults();   
  •                
  •             System.out.println(“高亮显示:”);   
  •             for(SolrDocument sd:list){   
  •                 String id=(String) sd.getFieldValue(“id”);   
  •                 if(response.getHighlighting().get(id)!=null){   
  •                     System.out.println(response.getHighlighting()   
  •                         .get(id).get(“content”));   
  •       
  •                 }   
  •             }   
  •                
  •             System.out.println(“——————————————-”);   
  •                
  •             SolrDocumentList docs = response.getResults();     
  •             
  •             System.out.println(“文档个数:” + docs.getNumFound());     
  •             System.out.println(“查询时间:” + response.getQTime());   
  •             System.out.println(“——————————————–”);   
  •                
  •             for (SolrDocument doc : docs) {     
  •                   
  •                 // 获取查询返回结果   
  •                 String id = doc.getFieldValue(“id”).toString();     
  •                 String title = doc.getFirstValue(“title”).toString();     
  •                 String content = doc.getFirstValue(“content”).toString();   
  •                   
  •                 // 打印查询结果   
  •                 System.out.println(“编号:”+id);     
  •                 System.out.println(“标题:”+title);   
  •                 System.out.println(“内容: ”+content);   
  •            
  •                 System.out.println(“—————————————-”);   
  •                   
  •             }     
  •                
  •   
  •         } catch (SolrServerException e) {     
  •              e.printStackTrace();     
  •         }      
  •     }     
  •       
  •       
  •     public static void main(String[] args) throws MalformedURLException {   
  •            
  •         // 创建一个SolrJSearcheDemo对象   
  •         SolrJSearcheDemo sj = new SolrJSearcheDemo();   
  •         // 查询条件   
  •         String Query =“外交部”;   
  •         // 调用查询方法   
  •         sj.search(Query);     
  •     }     
  •       
  • }   
  
DSC0009.jpg
15、创建solr jsp页面客户端:通过JavaScript和Ajax 完成Json的解析并显示在网页上。
  在WebRoot目录下新建一个search.jsp页面,代码如下:


  •    
  •    
  •    
  • json   
  •    
  • function xmlhttpPost(strURL) {   
  •     var xmlHttpReq = false;   
  •     var self = this;   
  •     if (window.XMLHttpRequest) { // Mozilla/Safari   
  •         self.xmlHttpReq = new XMLHttpRequest();   
  •     }   
  •     else if (window.ActiveXObject) { // IE   
  •         self.xmlHttpReq = new ActiveXObject(“Microsoft.XMLHTTP”);   
  •     }   
  •       
  •     var params = getstandardargs().concat(getquerystring());   
  •     var strData = params.join(‘&’);   
  •       
  •     //var header = document.getElementById(“response”);   
  •     //header.innerHTML = strURL+’?'+strData;   
  •   
  •     self.xmlHttpReq.open(‘get’, strURL+’?'+strData   
  •         +’&time=’+new Date().getTime(), true);   
  •     self.xmlHttpReq.setRequestHeader(‘Content-Type’,   
  •         ’application/x-www-form-urlencoded’);   
  •     self.xmlHttpReq.onreadystatechange = function() {   
  •         if (self.xmlHttpReq.readyState == 4) {   
  •             updatepage(self.xmlHttpReq.responseText);   
  •         }   
  •     }   
  •     self.xmlHttpReq.send(null);   
  • }   
  •   
  • function getstandardargs() {   
  •     var params = [   
  •         'wt=json'   
  •         , 'indent=on'   
  •         , 'hl=true'   
  •         , 'hl.fl=title,content'   
  •         , 'fl=*,title,content'   
  •         , 'start=0'   
  •         , 'rows=10'   
  •         ];   
  •   
  •     return params;   
  • }   
  • function getquerystring() {   
  •   var form = document.forms['f1'];   
  •   var query = form.q.value;   
  •   qstr = ’q=’ + encodeURI(query);    //escape   
  •   return qstr;   
  • }   
  •   
  • // this function does all the work of parsing the solr   
  • //response and updating the page.   
  • function updatepage(str){   
  •   //document.getElementById(“response”).innerHTML = str;   
  •   // use eval to parse Solr’s JSON response   
  •   var rsp = eval(“(“+str+“)”);   
  •   parse(rsp);   
  • }   
  •   
  • function parse(j) {   
  •     var header = document.getElementById(“header”);   
  •     var rh = j.responseHeader;   
  •     try{   
  •     var hl = j.highlighting;   
  •     }catch(exception){}   
  •     var header_str = “ 搜索: \”"+rh.params.q+“\”, 花了: ”+rh.QTime+“ms, 共显示: ”  
  •     +j.response.numFound+“条记录”;  //+rh.params.rows;   
  •     header.innerHTML = header_str;   
  •     var docs = j.response.docs;     
  •     var tab = document.getElementById(“docs”);   
  •     for(; tab.rows.length >1; ) {   
  •         tab.deleteRow(-1);   
  •     }   
  •     var tr;   
  •     var td;   
  •     var hid;   
  •     for(var i=0; i

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-87875-1-1.html 上篇帖子: solr查询字段为空值,删除字段空值的方法 下篇帖子: 在SOLR环境变量的配置 过程中,遇到的 A pseudo attribute name is expected 异常
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表