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

[经验分享] solr6.0学习

[复制链接]

尚未签到

发表于 2017-3-2 12:09:42 | 显示全部楼层 |阅读模式
  solr6.0学习(一)环境搭建
准备工作:
目前最新版本6.0。下载solr 6.0:Solr6.0下载
JDK8 下载jdk1.8:jdk1.8【solr6.0是基于jdk8开发的】
tomcat8.0 下载:tomcat8
##################################
在说明搭建环境之前,其实solr5.0之后 solr已经内置jetty服务器,可以自行启动。但是为了加入自己的特性,
以及在solr基础之上的应用,此文章主要针对发布在tomcat8上。
##################################
1、安装jdk8
2、下载solr6.0后,解压solr6.0的包。
3、解压tomcat8
4、将【solr-6.0.0\server\solr-webapp】下的webapp文件拷贝到【apache-tomcat-8.0.33\webapps】目录下,
      并将webapp重命名为solr(可以重命名为取任意名称)。
      solr文件目录如下:
5、将【solr-6.0.0\server\lib\ext】下的所有jar包拷贝到【apache-tomcat-8.0.33\webapps\solr\WEB-INF\lib】
6、将【solr-6.0.0\server\resources】下的log4j.properties配置文件拷贝到【apache-tomcat-8.0.33\webapps\solr\WEB-INF\classes】,如果WEB-INF下没有classes文件那么        就创建一个classes文件夹。
7、在【apache-tomcat-8.0.33\webapps\solr】下新建一个文件【solrhome(文件夹名称可以任意命名)】,将【solr-6.0.0\server\solr】下的所有文件拷贝到刚刚创建
      的solrhome中。
8、修改【apache-tomcat-8.0.33\webapps\solr\WEB-INF】下的web.xml,找到如下代码:
        <env-entry>  
           <env-entry-name>solr/home</env-entry-name>  
           <env-entry-value>/put/your/solr/home/here</env-entry-value>  
           <env-entry-type>java.lang.String</env-entry-type>  
        </env-entry>  
默认是注解掉,放开注解,并将<env-entry-value>中的值修改为刚刚步骤7中的solrhome目录,如:E:\project\Search\apache-tomcat-8.0.33\webapps\solr\solrhome
9、运行tomcat,运行成功后访问:http://localhost:8080/solr/index.html 即可。
  Solr 6.0 学习(二)创建core并插入索引
修改各种配置文件。
  1、修改solrhome下的solr.xml文件
  注解掉zookeeper搭建集群配置,我们后面会采用master-slave的形式。
  至于zookeeper的形式可以阅读以下这篇文章【solrCloud集群配置指导】:http://www.aboutyun.com/thread-9432-1-1.html
    <!-- 结合zookeeper配置solrColound start -->  
      <!-- 采用master-slave的方式  
      <solrcloud>  
      
        <str name="host">${host:}</str>  
        <int name="hostPort">${jetty.port:8983}</int>  
        <str name="hostContext">${hostContext:solr}</str>  
      
        <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>  
      
        <int name="zkClientTimeout">${zkClientTimeout:30000}</int>  
        <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>  
        <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>  
      
      </solrcloud>  
      
      <shardHandlerFactory name="shardHandlerFactory"  
        class="HttpShardHandlerFactory">  
        <int name="socketTimeout">${socketTimeout:600000}</int>  
        <int name="connTimeout">${connTimeout:60000}</int>  
      </shardHandlerFactory>  
      -->  
    <!-- 结合zookeeper配置solrColound end -->  
2、在sorlhome文件夹下创建【my_solr】文件夹。
  3、在【my_solr】文件夹中添加core.properties配置,内容如下:
    name=my_solr  
这个name的值实际上就core的名称,可以任意命名,为了保证统一和方便阅读,个人觉得最好和文件夹名称一致。
4、将【solr-6.0.0\example\example-DIH\solr\solr】下的conf文件夹拷贝到【my_solr】文件夹下。包含如下文件:
5、solr-5.0 以上默认对schema的管理是使用managed-schema,不能手动修改,需要使用Schema Restful的API操作。
  如果要想手动修改配置,把【conf】文件夹中managed-schema拷贝一份修改为schema.xml,在solrconfig.xml中修改如下
    <codecFactory class="solr.SchemaCodecFactory"/>  
      <!-- 解除managed-schema管理模式 start -->  
      <schemaFactory class="ClassicIndexSchemaFactory"/>  
      <!-- 解除managed-schema管理模式 end -->  
重启tomcat8,可能会报错,查看tomcat日志发现,比喻:
  缺少DataImportHandler的jar等,那么将【solr-6.0.0\dist】下的solr-dataimporthandler-6.0.0.jar和solr-dataimporthandler-extras-6.0.0.jar
  拷贝到【apache-tomcat-8.0.33\webapps\solr\WEB-INF\lib】下。
  重启tomcat8。如果缺少其他jar包,根据报错信息添加即可。没有异常,
  访问:【http://localhost:8080/solr/index.html#/】
选择my_solr,会出现如下界面:
至此其实由于没有索引数据,其实solr是个空壳,那么下面写一个应用程序插入solr索引数据。
  参考:http://www.open-open.com/lib/view/open1452062296995.html
  1、首先需要修改schema.xml文件,添加
<field name="content_test" type="text_general" indexed="true" stored="true" multiValued="true"/>
field的属性和配置,可以google一下schema.xml 说明很多,用法也很多,这里就不赘述
2、添加索引数据,代码如下:
  编写过程中可能会报错,最简便的方法是将web-inf下lib里所有jar包添加进来,然后运行,出什么错,就添加什么jar包4
------插入数据---------
    package com.solr.insertData;  
   
    import java.io.IOException;  
    import java.util.ArrayList;  
    import java.util.List;  
      
    import org.apache.solr.client.solrj.SolrClient;  
    import org.apache.solr.client.solrj.SolrServerException;  
    import org.apache.solr.client.solrj.impl.HttpSolrClient;  
    import org.apache.solr.common.SolrInputDocument;  
      
    public class InsertProgarm {  
        //solr 服务器地址  
        public static final String solrServerUrl = "http://localhost:8080/solr";  
        //solrhome下的core  
        public static final String solrCroeHome = "my_solr";  
        //待索引、查询字段  
        public static String[] docs = {"Solr是一个独立的企业级搜索应用服务器",  
                                        "它对外提供类似于Web-service的API接口",  
                                        "用户可以通过http请求",  
                                         "向搜索引擎服务器提交一定格式的XML文件生成索引",  
                                        "也可以通过Http Get操作提出查找请求",  
                                        "并得到XML格式的返回结果"};  
        public static void main(String[] args) {  
            SolrClient client = getSolrClient();  
            int i=0;  
            List<SolrInputDocument> solrDocs = new ArrayList<SolrInputDocument>();  
            for (String content : docs) {  
                SolrInputDocument doc = new SolrInputDocument();  
                doc.addField("id", i++);  
                doc.addField("content_test", content);  
                solrDocs.add(doc);  
            }  
            try {  
                client.add(solrDocs);  
                client.commit();  
            } catch (SolrServerException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } catch (IOException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
              
        }  
        public static SolrClient getSolrClient(){  
            return new HttpSolrClient(solrServerUrl+"/"+solrCroeHome);  
        }  
      
    }  
-------查询数据------------
package com.solr.insertData;
  import java.io.IOException;
import java.util.List;
  import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
  public class SelectSolr {
  public static void main(String[] args) throws SolrServerException, IOException {
    String url = "http://localhost:8080/solr/my_solr";
    //实例化一个solr
    SolrClient solrClient = new HttpSolrClient(url);
    //查询实现类
    SolrQuery solrQuery = new SolrQuery();
    //查询关键词  q 管家你字段
    solrQuery.set("q", "id:2");
    //过滤条件
    //solrQuery.addFilterQuery("品牌");
    //拿出response当中的数据   结果集
    QueryResponse response = solrClient.query(solrQuery);
   
    SolrDocumentList results = response.getResults();
    //结果集有多少条数据
    long numFond = results.getNumFound();
   
    System.out.println("数据条数:"+numFond);
   
    for(SolrDocument solrDocument:results){
      String id = (String) solrDocument.get("id");
      List<String> contentTest = (List) solrDocument.get("content_test");
      System.out.println("id:"+id+"===content:"+contentTest);
    }
  }
}
  ---------------------------
3、运行成功后,会在【solrhome/my_solr】文件夹下创建一个【data】的文件夹,这个文件夹中的内容就是我们的solr索引。
  其实其对于的是solconfig.xml中如下配置:
  [html] view plain copy
在CODE上查看代码片派生到我的代码片
  <!-- Data Directory  
      
           Used to specify an alternate directory to hold all index data  
           other than the default ./data under the Solr home.  If  
           replication is in use, this should match the replication  
           configuration.  
        -->  
      <dataDir>${solr.data.dir:}</dataDir>
4、访问http://localhost:8080/solr/index.html选择【my_solr】core,选择query得到如下界面:
选择【my_solr】core,选择query,点击【Execute Query】查询结果如下:
其实其访问的url实际为:http://localhost:8080/solr/my_solr/select?q=*%3A*&wt=json&indent=true
至于q、wt、indent等参数,代表的含义,可以搜索solr查询语法。
那么至此,我们就将solr插件完毕,结合了core和创建索引、查询程序,完成!
以上参考网址:http://blog.csdn.net/upxiaofeng/article/details/51426401
##############################################################################################三.配置中文分词器
(IK)
(1)将IKAnalyzer2012FF_u1.jar 复制到 D:\JobsDBSolr\solr-Example\lib 目录以及\Tomcat 6.0\webapps\solr-Example\WEB-INF\lib下面。
  (2)在D:\JobsDBSolr\solr-Example 下面创建目录classes,并将IKAnalyzer.cfg.xml 和 stopword.dic 复制到这个目录。
  (3)配置之前从解压的Solr拷贝出来的solr文件夹下的配置文件。 即D:\JobsDBSolr\solr-Example\collection1\conf目录下面的schema.xml配置文件。
  随便找一个fieldType配置项的后面,加入一个新的fieldType配置项。
  <!-- IKAnalyzer 中文分词器配置 -->   
    <fieldType name="text_ik" class="solr.TextField">   
        <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer">   
        </analyzer>   
    </fieldType>

运维网声明 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-349315-1-1.html 上篇帖子: 反向Ajax,实现服务器向客户端推送消息之 Comet 下篇帖子: 关于Java开发过程中质量提升-2自动化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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