solr部署

一,solr基本配置

1.下载适合版本的solr,在这里用solr5.5.0  solr版本可以在官网上下载(http://lucene.apache.org/solr/)
2.下载并解压tomcat7以上,这里用tomcat8
3.下载完成之后解压得到solr5.5.0文件
4.将server/solr-wapper下的webapp文件夹重名名为solr(凭个人需求喜好命名)放在tomcat 下的webappa文件夹下,这个就是你的solr应用程序
5.将D:\work\solr\solr-5.5.0\server\lib\ext下的所有jar包复制到solr下的lib文件夹下
6.另外复制server\resources下的log4j.properties文件至solr\WEB-INF\classes文件夹下,如果没有classes文件夹,建立该文件夹
7.有了solr应用程序,还要配置咱们的solrHome,这个solrHome主要是咱们存放数据和配置的地方,可以随心所欲的配置core,配置你的索引库
8.根据自己的情况在磁盘上创建一个文件夹,比如我的,我是在D:\solrTest\文件夹下创建了一个home文件夹,这个home文件夹就是我的solrhome
9.记住home文件夹的位置,打开solr\WEB-INF\web.xml

修改: 

    <env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>F:\tomcat8\apache-tomcat-8.0.29\solr\solr_home</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>

 
    改路径就是你的solrhome路径
    solr解压为solr-5.5.0,在tomcat的server.xml配置文件中增加       这一步可以不做
    <Context   
    path="/solr5"   
    docBase="D:\work\solr\solr-5.5.0\server\solr-webapp\webapp" // solr的解压后目录 就是配置solr程序的配置 
    reloadable="true"   
    privileged="true"   
    antiResourceLocking="false"   
    antiJARLocking="false">  
	 </Context>
10.至此,solr已经部署完成了,启动TOMCAT,浏览器中输入:http://localhost:8787/solr/admin.html
11.添加core 进入到solr_home 文件夹,建立一个文件夹,用于存放你的core,例如我的solrTP
12.在浏览器中输入http://localhost:8080/solr/admin.html,
进入solr管理页面,点击左侧的core admin,然后点击add core,在name 和instanceDir下都输入solrTP(在步骤一中取得名称) ,点击add core即可
13.-此时在输入http://localhost:8080/solr/admin.html, 在左侧即可看见刚刚建立的core
14.然后在进入到solrTP目录,此时会发现多了一个data文件夹和一个properties文件
15.data目录,用于存储索引文件,core.properties文件用于存放core的配置信息

16.到此solr5.5的搭建,以及第一个core的就到此结束了


变更服务器的时候变个能solr程序下的web.xml和solr程序所在的tomcat的server.xml里面的路径

17.加入mysql驱动:MySQL-connector-Java-5.1.34.jar单独下载,也放到solr-5.5.0\server\solr-webapp\webapp\WEB-INF\lib
18.修改solrTP\conf下的managed-schema为schema.xml
19.修改同一目录下的solrconfig.xml增加
	 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">     
          <lst name="defaults">     
               <str name="config">data-config.xml</str>     
          </lst>     
	</requestHandler>
20.在同一目录下增加data-config.xml 
    
<?xml version="1.0" encoding="UTF-8" ?>  
    <dataConfig>  
        <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password="password"/>  
        <document>  
            <entity name="data" query="SELECT id, description from t_data">  
                <field column="id" name="id" />  
                <field column="description" name="description" />  
            </entity>  
        </document>  
    </dataConfig>  

21.启动tomcat,进入solr控制台,选择collection1,选择Dataimport,点Execute,开始执行数据导入
22.将初次下载的solr-5.5.0文件夹下的dist, contrib文件夹复制到TomCat根目录下
然后再次修改刚才编辑过的solrconfig.xml增加两个文件夹的配置并修改一些参数:
<lib dir="D:\apache-tomcat\contrib\extraction\lib" regex=".*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-cell-\d.*\.jar" />

  <lib dir="D:\apache-tomcat\contrib\clustering\lib\" regex=".*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-clustering-\d.*\.jar" />

  <lib dir="D:\apache-tomcat\contrib\langid\lib\" regex=".*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-langid-\d.*\.jar" />

  <lib dir="D:\apache-tomcat\contrib\velocity\lib" regex=".*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-velocity-\d.*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-dataimporthandler-\d.*\.jar" />
  
如果挪服务器的话就需要修改此配置文件

按此步骤可以完全配出来!


二,IK分词器的配置
23.配置分词器

1.下载IK分词器包。

链接:http://pan.baidu.com/s/1i4D0fZJ 密码:bcen

2.解压并把IKAnalyzer5.3.1.jar 、IK-Analyzer-extra-5.3.1.jar拷贝到tomcat/webapps/solr/WEB-INF/lib下。

//以上的为5.3的在5.5中有问题,下面为5.5的ik分词器使用
1.http://download.csdn.net/download/soft_xiang/9557495 下载5.5.X 版本的IK分词器,可以使用的
通过以上网址下载下来,把jar包添加到tomcat/webapps/solr/WEB-INF/lib下

2.并且在schema.xml中添加如下配置
下面为修改后的代码:
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <schema name="example" version="1.5">
 3    <field name="_version_" type="long" indexed="true" stored="true"/>
 4    <field name="_root_" type="string" indexed="true" stored="false"/>
 5    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
 6    <field name="title" type="text_ik" indexed="true" stored="true" multiValued="true"/>
 7    <field name="subject" type="text_ik" indexed="true" stored="true"/>
 8    <field name="description" type="text_ik" indexed="true" stored="true"/>
 9    <field name="text" type="text_ik" indexed="true" stored="false" multiValued="true"/>
10   
11    <uniqueKey>id</uniqueKey>
12   
13    <copyField source="title" dest="text"/>
14    <copyField source="subject" dest="text"/>
15    <copyField source="description" dest="text"/>
16   
17    <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
18    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
19    <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
20     
21    <fieldType name="text_ik" class="solr.TextField">
22     <analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
23     <analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
24    </fieldType>
25    
26    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
27       <analyzer type="index">
28         <tokenizer class="solr.StandardTokenizerFactory"/>
29         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
30         <filter class="solr.LowerCaseFilterFactory"/>
31       </analyzer>
32       <analyzer type="query">
33         <tokenizer class="solr.StandardTokenizerFactory"/>
34         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
35         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
36         <filter class="solr.LowerCaseFilterFactory"/>
37       </analyzer>
38    </fieldType>
39 </schema>
3.并且把上面5.3中下载下来的分词器压缩包加压出来的ext.dic和stopword.dic 放入tomcat/webapps/solr/WEB-INF/下面的classes
目录下,如果没有的话需要自己创建改目录,

到此IK分词器配置完成,
http://wenku.baidu.com/link?url=GPjgQx4n0b0GTgTcublA4997lqNgy0V9xuFrffxS5-dRd8w3ZEyqmfU_CS1ZEYmByRN5Hp3o9h7Xh6MQrN8-xzCXutaZuBL844l0EXUmU5ytHos2OC5a_jr71OC4vDLR
以上网址为solr4.7配置和IK中文分词器的配置
http://www.cnblogs.com/sword-successful/p/5604541.html
以上网址为网上的博客有solr以及框架的相关知识
http://blog.csdn.net/firemaple_li/article/details/47702765
以上网址为solr与mysql整合
https://wenku.baidu.com/view/49261926dc36a32d7375a417866fb84ae45cc3f0.html
以上网址为layer弹出信息的图表
http://blog.csdn.net/jiangchao858/article/details/54669523
以上网址为solr支持的日期格式

三,配置自动更新索引,自动更新创建的core

1.http://blog.csdn.net/aaa1117a8w5s6d/article/details/47111363   此网址为solr自动更新索引配置
2. solr自带:

 apache-solr-dataimporthandler-.jar, apache-solr-dataimporthandler-extras-.jar 

用于定时更新和重做索引的的jar:
apache-solr-dataimportscheduler-1.0.jar
 下载地址:
官网:http://code.google.com/p/solr-dataimport-scheduler/downloads/list

百度云:

带源码:http://pan.baidu.com/s/1qWlSK0W

不带源码 :http://pan.baidu.com/s/1c0in1By
三个 jar包放到solr的lib目录下,
4.修改修改solr.war中WEB-INF/web.xml
    <listener>  
     <listener-class>  
             org.apache.solr.handler.dataimport.scheduler.ApplicationListener  
     </listener-class>  
    </listener>  
5.将apache-solr-dataimportscheduler-.jar 中 dataimport.properties 取出并根据实际情况修改,然后放到 solr.home/conf (不是solr.home/core/conf) 目录下面。
 如果换服务器部署的话就要修改此配置文件的端口
 
6. dataimport.properties 配置项说明

#################################################
#                                               #
#       dataimport scheduler properties         #
#                                               #
#################################################


#  to sync or not to sync
#  1 - active; anything else - inactive
syncEnabled=1


#  which cores to schedule
#  in a multi-core environment you can decide which cores you want syncronized
#  leave empty or comment it out if using single-core deployment
syncCores=core1,core2


#  solr server name or IP address
#  [defaults to localhost if empty]
server=localhost          //solr服务器的ip地址


#  solr server port
#  [defaults to 80 if empty]
port=8080                //solr服务器的端口号


#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
webapp=solr


#  URL params [mandatory]
#  remainder of URL
#params=/dataimport?command=delta-import&clean=false&commit=true           //增量更新的请求地址


params=/deltaimport?command=delta-import&clean=false&commit=true//这里要写成deltaimport,我用的时solr5.2.1用上面的不好使。。。




#  schedule interval
#  number of minutes between two runs
#  [defaults to 30 if empty]
interval=1                 //自动增量更新的时间间隔,单位为分钟,默认为30分。


#  重做索引的时间间隔,单位分钟,默认7200,即5天; 
#  为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200


#  重做索引的参数
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true


#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
#  两种格式:2012-04-11 03:10:00 或者  03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00


动态添加core
1.http://www.cnblogs.com/pazsolr/p/5796700.html
以上网址即可实现添加core还可以通过java代码来动态添加和删除core


1.动态加载新core


    public  static void load_solrCore(String coreName, String insPath, String serverName){         
        try {      
            //path=”D:/jacoxu/solrHome/multicore/collection0″;   
            //serverName=”http://localhost:8080/solr”;   
            HttpSolrServer tempServer= solrServer.setServer(serverName);      
            CoreAdminRequest.createCore(coreName, insPath, tempServer);      
        } catch (Exception e) {      
            e.printStackTrace();      
        }      
    }    


2.动态卸载旧core


    public static void unload_solrCore(String coreName, String serverName) {   
        try {   
            HttpSolrServer tempServer= solrServer.setServer(serverName);   
            CoreAdminRequest.unloadCore(coreName, tempServer);   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
    }  


3.有时在执行上面两个操作的时候需要动态的更新solr.xml,因为如果突然断电或solr服务重新启动,都需要重新初始化solr.xml文件中的多核配置,为了能恢复中断前的多核状态需要能够实时根据上面的两个操作更新solr.xml
只需要配置solr.xml中


    <?xml version=“1.0″ encoding=“UTF-8″ ?>  
    <solr persistent=“true”>  
      <!–   
      adminPath: RequestHandler path to manage cores.     
        If ’null’ (or absent), cores will not be manageable via request handler   
      –>  
        <cores adminPath=“/admin/cores”>  
            <core name=“core0″ instanceDir=“multicore/collection0″ />  
            <core name=“core1″ instanceDir=“multicore/collection1″ />  
            <core name=“core2″ instanceDir=“multicore/collection2″ />  
            <core name=“core3″ instanceDir=“multicore/collection3″ />  
            <core name=“core4″ instanceDir=“multicore/collection4″ />  
            <core name=“core5″ instanceDir=“multicore/collection5″ />  
      </cores>  
    </solr>  


第2行的


    <solr persistent=“false”>  


默认的为false,把false改为true即可。


有了上面的两种方法可以很方便的动态添加与卸载核,但并不能设置一些参数,例如设置core的属性,例如loadOnStartup和transient,另一种Create core的方法,CoreAdminRequest.Create


    public  static void load_solrCore(String coreName, String insPath, String serverName){   
        try {   
            //inpath=”D:/jacoxu/20130531SolrPorject/solrHome/multicore/collection0″;   
            //serverName=”http://localhost:8080/solr”;   
            HttpSolrServer tempServer= solrServer.setServer(serverName);   
      
            CoreAdminRequest.Create cc = new CoreAdminRequest.Create();   
            cc.setCoreName(coreName);   
            cc.setInstanceDir(insPath);   
            cc.setIsLoadOnStartup(false);   
            cc.setIsTransient(true);    
            cc.process(tempServer);   
               
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
    }  


关于loadOnStartup和transient在后续的LRU队列中会介绍它们的作用,用起来会比较方便。同样地动态卸载Core也可以采用同样的方式:


    //unload old core by solrj   
    public boolean unload_solrCore(String coreName, boolean delIndex,HttpSolrServer midbaseServer) throws SolrServerException, IOException {   
        SolrQuery query = new SolrQuery();   
        CoreAdminRequest.Unload uc = new CoreAdminRequest.Unload(true);   
        uc.setCoreName(coreName);   
        uc.setDeleteDataDir(true);   
        query.set(“shards”, ServerIP+coreName);   
        SmsBase.agentCoreServer.query(query);   
        uc.process(midbaseServer);   
        //CoreAdminRequest.unloadCore(coreName,delIndex,midbaseServer);   
        return true;   
    }  


执行卸载对卸载核进行了访问,是因为添加了动态队列,需要进行查询访问才能把当前core激活,只有加载了dataDir后才能使的setDeleteDataDir(true)生效,否则找不到路径。被注释掉的


    //CoreAdminRequest.unloadCore(coreName,delIndex,midbaseServer);   


其实也是调用上面的一堆属性配置然后执行process操作,不过solrj提供出来的接口有限,没有删除dataDir的参数,所以我们自己来调制底层参数更显个性化。
此条目由 jacoxu 发表在 Big Data 分类目录,并贴了 Solr 标签。将固定链接加入收藏夹。
《利用solrj加载卸载solr多核并更新solr.xml》上有 2 条评论


    stars 在 2014 年 7 月 14 日下午 3:27 说道:


    使用solr服务在页面上添加core,solr的home中的solr.xml文件为什么没变化?
    回复 ↓
        jacoxu 在 2014 年 7 月 14 日下午 4:06 说道:


        一种情况是 solr.xml中参数配置问题,把solr persistent=“false” 改为 solr persistent=“true”,另外一种是 找错文件啦,哈哈。


四,solr配置同时对多个字段进行检索
http://blog.csdn.net/hu948162999/article/details/47421573  
此博客里面有haddop入门相关知识,

http://www.cnblogs.com/rwxwsblog/p/5051498.html
此博客可以配置solr多字段搜索,还包括php相关的知识

如果业务需要我们对多个field同时进行检索,有没有什么好的办法呢?非常幸运的是Solr为我们提供了copyField对多个field进行索引和检索。然而配置也非常简单。


  修改schame.xml,添加


    <field name="search_item" type="text_ik" indexed="true" stored="false" multiValued="true"/>
    <copyField source="title" dest="search_item"/>
    <copyField source="summary" dest="search_item"/>


  修改后的schema.xml如下:
复制代码


    <!--增加title和summary字段-->
    <field name="title" type="text_ik" stored="true" indexed="true"/> 
    <field name="summary" type="text_ik" stored="true" indexed="true"/>
    <!--按search_item进行检索时,会同时检索title和summary-->
    <field name="search_item" type="text_ik" indexed="true" stored="false" multiValued="true"/>
    <copyField source="title" dest="search_item"/>
    <copyField source="summary" dest="search_item"/>


复制代码


 保存后并重启tomcat并重建索即可。当通过search_item这个field进行检索时,
solr会同时去检索title和summary这两个field是否包含相应的关键词,从而达到多个field同时检索的目的。



到此solr完整使用已经配好,还有搜索记忆功能没有做,
如果需要可以百度搜索data-config.xml 和 schema.xml 和 solrconfig.xml 三个配置文件的相关解析内容.
常用的配置说明:


    field:定义一个document中的各个fields
        name:必填。该field的名字。前后都有下划线的name是系统保留的名字,比如“_version_”
        type:必填。类型,对应于fieldType的name
        default:该field的缺省值
        indexed:true/false,是否为该field建立索引,以让用户可以搜索它、统计它(facet)
        stored:true/false,定义这个field是否可以返回给查询者
        multiValued:true/false,是否可以容纳多个值(比如多个copyField的dest指向它)。如果是true,则该field不能被排序、不能作为uniqueKey
        required:true/false,告诉solr这个field是否接受空值,缺省为false
        docValues:true/false,建立document-to-value索引,以提高某些特殊搜索的效率(排序、统计、高亮)
    copyField:把一个field的内容拷贝到另外一个field中。一般用来把几个不同的field copy到同一个field中,以方便只对一个field进行搜索
        source:被拷贝的field,支持用通配符指定多个field,比如:*_name
        dest:拷贝到的目的field
        maxChars:最大字符数
    uniqueKey:指定一个field为唯一索引
    fieldType:定义field的类型,包括下面一些属性
        name:必填,被field配置使用
        class:必填,filedType的实现类。solr.TextField是路径缩写,"等价于"org.apache.solr.schema.TextField"
        multiValued:?
        positionIncrementGap:指定mutiValued的距离
        ananlyzer:如果class是solr.TextField,这个配置是必填的。告诉solr如何处理某些单词、如何分词,比如要不要去掉“a”,要不要全部变成小写……
            type:index或query
            tokenizer:分词器,比如:StandardTokenizerFactory
            filter:过滤器,比如:LowerCaseFilterFactory
    dynamicField:用通配符定义一个field来存在没有被field定义的漏网之鱼
        name:使用通配符,比如“*_i”,来处理类似“cost_i”之类的field
        
一个简单的例子:
[html] view plain copy


    <?xml version="1.0" encoding="UTF-8" ?>  
      
    <schema name="course_video" version="1.5">  
            <field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />  
      
            <field name="_version_" type="long" indexed="true" stored="true"/>  
      
            <field name="title" type="string" indexed="true" stored="true" required="true" multiValued="false" />  
            <field name="tags" type="string" indexed="true" stored="false" required="false" multiValued="false" />  
            <field name="content" type="string" indexed="true" stored="true" required="false" multiValued="false" />  
      
            <field name="info_text" type="text_general" indexed="true" stored="false" multiValued="true" />  
      
            <copyField source="title" dest="info_text" />  
            <copyField source="content" dest="info_text" />  
            <copyField source="tags" dest="info_text" />  
      
            <uniqueKey>id</uniqueKey>  
      
            <fieldType name="string" class="solr.StrField" sortMissingLast="true" />  
            <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>   
      
        <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">  
          <analyzer type="index">  
            <tokenizer class="solr.StandardTokenizerFactory"/>  
            <filter class="solr.LowerCaseFilterFactory"/>  
          </analyzer>  
      
          <analyzer type="query">  
            <tokenizer class="solr.StandardTokenizerFactory"/>  
            <filter class="solr.LowerCaseFilterFactory"/>  
          </analyzer>  
        </fieldType>  
      
    </schema>  




注:solrconfig.xml配置文件中,requestHandler "/select"的缺省“df”是“text”。如果按照上面的配置,我们想要的缺省搜索info_text,所以需要在solrconfig.xml中修改:
  <requestHandler name="/select" class="solr.SearchHandler">
     <lst name="defaults"> 
       <str name="echoParams">explicit</str>
       <int name="rows">10</int>
       <str name="defType">edismax</str>
       <str name="df">info_text</str>
     </lst>
    </requestHandler>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值