zoukankan      html  css  js  c++  java
  • Solr单机部署和集群部署

    用到的相关jar包:http://pan.baidu.com/disk/home#list/path=%2Fsolr

    Solr目录结构

    Solr 目录

    Contrib :solr 为了增强自身的功能,所添加的扩展依赖包。

    Dilst:solr build 过程时产生的jar包和war包,还有他的一些依赖包。

    Docs: 文档。

    Example: 例子

                       Solr:配置了solr运行至的信息,是一个标准的solrhome目录。

                                Collection1:solrcore目录

                               Data: 该目录是储存了索引的目录。

    Multicore:可以配置多个solr实例。

    Webapps: solr.war的目录

    Licenses :版本

    Solrhome

    从example中copy出solr到新的一个目录,这就是一个solrhome了,可以改名。C:QQDownloadSolrssolr1solrhome

    Solrhome是一个目录,是solr运行的主目录,它包括多个solrcore目录。Solrcore目录中就是solr实例的运行配置文件和数据文件。

    Solr容器

    Solr部署到tomcat。

    Solr需要运行在一个servlet容器,它默认提供了一个jetty容器。

    把solrhome下webapps的solr.war复制到tomcat下的webapps目录下,解压并删除该war包。

    添加solr依赖包,从目录solr-4.9.0examplelibext 复制到 Tomcat 6.0-solrwebappssolrWEB-INFlib

    把solr-4.9.0 下的dist和contrib复制到solrhomecollection1conf 下solrconfig.xml 中配置的相应路径中

    依赖包有log4j,需要添加lofg4j的配置文件solr-4.9.0example esources 到 Tomcat 6.0-solrwebappssolrWEB-INFclasses(该文件夹需手动添加)。

    添加sorl和tomcat的关联编辑 Tomcat 6.0-solrwebappssolrWEB-INF下的web.xml

    添加映射关系,指定solrhome :<env-entry-value> C:QQDownloadSolrssolr1solrhome </env-entry-value>

    启动tomcat 看是否有错误。

    遇到了solrconf.xml 的路径不对的问题,<lib dir="../../contrib/extraction/lib" regex=".*.jar" />

    <lib dir="../../dist/" regex="solr-cell-d.*.jar" /> 修改dir 路径并从solr中复制contrilb和dlist目录到相应的位置

    http://localhost:8080/solr/#/~logging看到正常solr界面就说明安装成功了。

    Solr功能界面

    分词器是需要配置的。

     可以操作索引。 在solr中,修改或添加索引 都需要id主键。

    配置多solrcore

    多solrcore 配置:

    Collection1,collection2

    一个solr工程,配置多个solrcore 每个solrcore之间是相互独立的,可以单独对外提供服务。

    类似于数据库,一个数据库可以后多个实例,如果有新需求,可以直接扩展。

    多solrcore在管理索引文件时,可以进行分类管理。

    使用solrcloud solr集群, 必须要建立多个solrcore。

    复制solrhome下的collection1 到本目录下,改名为collection2.

    修改collection2下的core.properties 修改为collection2 就ok了。

    重启tomcat。

     ok。两个solrcore 互相是独立的。

    Schema.xml

    Solr 基本使用

    C:QQDownloadSolrssolr1solrhomecollection1conf

    Schema.xml 文件在solrcore中的conf目录下,这个文件主要是配置域名及域的类型。

    Solr 的域要先定义,后使用。

    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />

    Name:域名

    Type:域的类型(也需要配置)

    Indexed:是否索引

    Stored:是否存储

    Required:是否必须一般id才设置。

    multiValued:是否可以多值。如果设置为多值,里面的值就采用数组方式存储。

    <dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>

    配置动态域

    Name:域名,该域通过一个正则指定。

    <uniqueKey>id</uniqueKey>

    指定一个主键域。每个文档中都应该有个唯一主键。

     <copyField source="cat" dest="text"/>

    复制域

    <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>

    Source :源域

    Dest:目标域   把源域的内容复制到目标域,目标域必须设置 multiValued="true"

    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">

    <analyzer type="index">

    <tokenizer class="solr.StandardTokenizerFactory"/>

    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />

    <!-- in this example, we will only use synonyms at query time

    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>

    -->

    <filter class="solr.LowerCaseFilterFactory"/>

    </analyzer>

    <analyzer type="query">

    <tokenizer class="solr.StandardTokenizerFactory"/>

    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />

    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>

    <filter class="solr.LowerCaseFilterFactory"/>

    </analyzer>

    </fieldType>

    fieldType 配置域的类型

    Name:域的类型的名称 引用该类型时: type=” text_general”

    Class:指定solr的类型

    Analyzer:配置分词器 type:index,query 索引,查询分词器

    Tokenizer :分词器

    Filter :过滤器

    配置中文分词器IkAnalyzer

    使用IkAnalyzer中文分词器

    把IkAnalyzer2012ff_u1.jar添加到tomcat下的 web-inf/lib目录下  

    tomcat-6.0.35apache-tomcat-6.0.35-solrwebappssolrWEB-INFlib

    复制IkAnalyzer的配置文件和自定义词典和停用词典到sorl的classpath下

    Copy到apache-tomcat-6.0.35-solrwebappssolrWEB-INFclasses下

    配置fieldtype 指定使用中文分词器。

    打开C:QQDownloadSolrssolr1solrhomecollection1conf下的 scheme.xml文件

    配置filed,使用中文分词器的filedtype。

    业务域

    Id是主键,由于collection1的scheme已经有主键了。

     <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />

    Dataimporthandler 插件

    把数据从关系数据库中查询并导入到索引库中。

    solr-4.9.0dist solr-dataimporthandler-4.9.0.jar

    复制到

    Solrssolr1contribdataimporthandlerlib

    下载mysql-connector-java-5.1.7-bin

    Mysql数据驱动包拷贝到

    Solrssolr1contribdblib 下,没有的目录需要手动新建

    配置dataimporthandler

    在目录Solrssolr1solrhomecollection1conf下创建data-config.xml文件。

    如果是链接sqlserver 注意配置sql和mysql的jdbc驱动,在同一个文件夹下 <lib dir="../../contrib/db/lib" regex=".*.jar" /> 默认的就使用了mysql 的驱动。

    看取到的数据和生成索引的数据数量是否一致,可以查看日志。

    看一下别人的增删改:http://www.cnblogs.com/madyina/p/4133908.html

    Solrj代码操作solr索引 .net solrnet

    添加solrj的jar包 ,

    路径 Solrssolr1distsolrj-lib 下的是solrj的依赖包

    新加Javaproject,添加相应的solrj对应的包。

    把solr-4.9.0examplelibext 目录下的jar包也添加进项目

      代码实现

       添加,修改索引。

     注意:solr中添加修改索引必须要有主键,主键已经存在就修改,不存在就添加。

    删除索引

    可以看到有多种删除方法。

    已经成功删除

    Solrj搜索

    可以看到界面实现和代码实现差别不大。

    Solr服务器

    应用

    数据库

    SolrCloud 集群搭建

    Zookeeper 管理和维护SolrCloud集群

    1.安装java环境

    把集群需要的文件上传到虚拟机

    Zookeeper:http://blog.csdn.net/cjfeii/article/details/24706321

    Solr下载地址: http://archive.apache.org/dist/lucene/solr/4.10.3/solr-4.10.3.tgz

    1.安装centos

    2.安装java 虚拟机

    3.安装zookeeper 保证是基数节点,最少3个节点。

    解压 tar -zxf zookeeper-3.4.6.tar.gz  

    4.配置zookeeper

    在zookeeper1文件夹下 创建data文件夹

    在data文件夹下创建myid文件 写入1. echo  1>>data/myid

    以此类推,另外几个节点也同样配置。

    创建配置文件。在conf文件夹下 zoo_sample.cfg 复制后改名 cp zoo_sample.cfg  zoo.cfg,然后编辑vim zoo.cfg。编辑datadir节点dataDir=/user/local/solrcloud/zookerper1/data .

    这里注意clientport节点,同一个机器不要重复了端口号。

    添加server.1节点 server.1=1912.168.80.128:2881:3881

    每个zookeeper节点都要有这个配置。

    Clientport 是zookeeper对外提供服务的端口 2881 是zookeeper服务器内部通信的端口,3881是zookeeper投票的端口,不能重复。

     

    # The number of milliseconds of each tick

    tickTime=2000

    # The number of ticks that the initial

    # synchronization phase can take

    initLimit=10

    # The number of ticks that can pass between

    # sending a request and getting an acknowledgement

    syncLimit=5

    # the directory where the snapshot is stored.

    # do not use /tmp for storage, /tmp here is just

    # example sakes.

    dataDir=/tmp/zookeeper

    # the port at which the clients will connect

    clientPort=2181

    # the maximum number of client connections.

    # increase this if you need to handle more clients

    #maxClientCnxns=60

    #

    # Be sure to read the maintenance section of the

    # administrator guide before turning on autopurge.

    #

    # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

    "zoo.cfg" 28L, 922C1,1          顶端

    # The number of milliseconds of each tick

    tickTime=2000

    # The number of ticks that the initial

    # synchronization phase can take

    initLimit=10

    # The number of ticks that can pass between

    # sending a request and getting an acknowledgement

    syncLimit=5

    # the directory where the snapshot is stored.

    # do not use /tmp for storage, /tmp here is just

    # example sakes.

    dataDir=/user/local/solrcloud/zookerper1/data

    # the port at which the clients will connect

    clientPort=2181

    # the maximum number of client connections.

    # increase this if you need to handle more clients

    #maxClientCnxns=60

    #

    # Be sure to read the maintenance section of the

    # administrator guide before turning on autopurge.

    #

    # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

    #

    # The number of snapshots to retain in dataDir

    #autopurge.snapRetainCount=3

    # Purge task interval in hours

    # Set to "0" to disable auto purge feature

    #autopurge.purgeInterval=1

    server.1=1912.168.80.128:2881:3881

    server.2=1912.168.80.128:2882:3882

    server.3=1912.168.80.128:2883:3883

    "zoo.cfg" 31L, 1050C 已写入

     

    依次配置好zookeeper2,zookeeper3

    5.启动zookeeper

    Bin文件夹下内容 

    创建批量启动文件 

    也可以单个启动。

     

    添加新建启动文件的执行属性。

    6.查看zookeeper状态

     ./zkServer.sh status

     

    Error contacting service. It is probably not running. 错误 查看zookeeper.out日志,分析错误原因。

    添加了 批量启动和查看状态的执行文件

     

    启动成功。

     

     

    配置搭建solr

    一定要注意jar包的版本

    主要修改的配置文件:

    1.tomcat1/conf/server.xml  如果是同一台服务器就需要修改端口,防止冲突。单台可以使用默认设置。

    2.tomcat1/webapps/solr/WEB-INF/web.xml –修改配置solrhome的位置

    3.solrhome1/collection1/solrconfig.xml 主要是修改指定dist和contrib目录和后续的插件jar包的路径

     

    solrhome是从solr-4.10.3包下的/example/solr 目录复制的

    tomcat 下webapps下的solr 是 solr-4.10.3下/example/solr下webapps的solr.war 解压出来的

    安装配置tomcat

    [root@supercentos1 download]# tar -zxf apache-tomcat-7.0.39.tar.gz安装tomcat

    [root@supercentos1 download]# mv apache-tomcat-7.0.39 /user/local/solrcloud/tomcat/tomcat1

    [root@supercentos1 tomcat]# cp -r tomcat1/ tomcat2 复制出来3个tomcat

    [root@supercentos1 tomcat]# cp -r tomcat1/ tomcat3

    [root@supercentos1 tomcat]# cp -r tomcat1/ tomcat4

     

    [root@supercentos1 tomcat]# vim tomcat1/conf/server.xml 修改各个tomcat端口配置

    安装配置solr

    [root@supercentos1 download]# tar -zxf solr-4.10.3.tgz.tgz 解压

    复制solr-4.10.3/example/solr 复制到solrcloud下的solr文件夹下新建solrhome。

    把solrhome下webapps的solr.war复制到tomcat下的webapps目录下,解压并删除该war包。

    [root@supercentos1 solr-4.10.3]# cp example/webapps/solr.war / user/local/solrcloud/tomcat/tomcat1/webapps/

    [root@supercentos1 solr-4.10.3]# cd/user/local/solrcloud/tomcat/tomcat1/webapps/

    unzip  -oq solr.war-d solr

    rm solr.war 

    解压后删除:

     

    添加tomcat下solr依赖包

    从目录 solr-4.10.3examplelibext 复制到Tomcat1webappssolrWEB-INFlib 下

    cp -rf example/lib/ext/*.jar  /user/local/solrcloud/tomcat/tomcat1/webapps/solr/WEB-INF/lib

     

    依赖包有log4j,需要添加lofg4j的配置文件solr-4.9.0example esources 到 Tomcat 6.0-solrwebappssolrWEB-INFclasses(该文件夹需手动添加)。

    [root@supercentos1 solr-4.10.3]# cp -rf example/resources/log4j.properties/user/local/solrcloud/tomcat/tomcat1/webapps/solr/WEB-INF/classes/

     

    然后把tomcat1下webapps下的sorl文件夹复制到每个tomcat目录下。

     

    复制相应个数的solr和tomcat, 每个sorl都对应一个tomcat容器。

    [root@supercentos1 download]# cp -r  /user/local/solrcloud/tomcat/tomcat1/webapps/solr  /user/local/solrcloud/tomcat/tomcat2/webapps/

     

     

     

    修改tomcat下sorl工程web.xml文件

     

    vim tomcat/tomcat1/webapps/solr/WEB-INF/web.xml 2,3,4也同样的步骤修改就行了

     

     

    [root@supercentos1 solrcloud]# tomcat/tomcat1/bin/startup.sh 启动tomcat1

     

    Solrhome配置

    把solr-4.9.0 下的dist和contrib复制到 solrhomecollection1conf 下solrconfig.xml 中配置的相应路径中

    [root@supercentos1 solr-4.10.3]# cp -rf  contrib /user/local/solrcloud/solr/  这个需要在配置文件里配置,看是否对应

    [root@supercentos1 solr-4.10.3]# cp -rf  dist  /user/local/solrcloud/solr/

    Vim solrhome1/collection1/solrconfig.xml

    集群搭建

    主要修改solrhome下的solr.xml,关联tomcat的ip和对应端口号。

    修改tomcat下的bin目录下的catalina.sh。关联zookerper服务器地址和端口。

    1.修改solrhome下的solr.xml配置文件

    2.使用zookeeper统一管理配置文件。需要把solrhome下的collection1下的conf文件夹上传到zookeeper。

    3.执行/root/download/solr-4.10.3/example/scripts/cloud-scripts 下的

    ./zkcli.sh  -zkhost 192.168.80.128:2181,192.168.80.128:2182,192.168.80.128:2183 -cmd upconfig -confdir  /user/local/solrcloud/solr/solrhome1/collection1/conf -confname myconf 

    ./zkcli.sh  -zkhost(zookeeper服务器)  192.168.80.128:2181,192.168.80.128:2182,192.168.80.128:2183(zookeeper配置的服务器IP:clientProt) -cmd upconfig -confdir /user/local/solrcloud/solr/solrhome1/collection1/conf(管理的文件目录) -confname myconf(zookeeper管理别名)

    4.执行/zookerper1/bin/zkCli.sh 链接到zookerper1 

    看到文件都传上了

    5.关联zookerper和每一台solr。.告诉solr服务zookerper的位置

    修改solr的tomcat下的bin目录下的catalina.sh文件,加入DzkHost 指定zookerper服务器的地址:vim tomcat1/bin/catalina.sh

    添加

     JAVA_OPTS="-DzkHost=192.168.80.128:2181,192.168.80.128:2182,192.168.80.128:2183"

     

    同样的修改各个solr的tomcat服务器。

    6.重新启动tomcat ,zookerper。

    7.集群配置成功,这里只是单片

    出现这个错误就看下solrhome下的solr.xml的ip和端口是否正确了, catalina.sh文件是不是手抖改错地方了,坑爹的。。最好是配完一台后直接复制粘贴的靠谱。

    创建有两片的collection

    http://192.168.80.128:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2

     

    删除collection

    http://192.168.80.128:8080/solr/admin/collections?action=DELETE&name=collection1

     

    Dataimport插件

    需要在每个节点都配置下,修改solrconfig.xml,把solrconfig.xml文件上传到zookerper。

    把单机版的solrhome/collection1下的conf拷到本地下collection2_shard2_replica1 下。

    上传到zookerper 覆盖原来的那个配置。

    把dataimporthandler相关的jar包,和数据库mysql或者sqlserver的驱动包放到相应的位置,配置solrconfig.xml。因为我这个是放到了solrhome公用的目录下了,不用每个solrhome都配置了,要是多服务器就需要每台服务器都配置了。

    执行/root/download/solr-4.10.3/example/scripts/cloud-scripts 下的

    ./zkcli.sh  -zkhost 192.168.80.128:2181,192.168.80.128:2182,192.168.80.128:2183 -cmd upconfig -confdir  /user/local/solrcloud/solr/solrhome1/collection2_shard2_replica1/conf -confname myconf

    配置中文分词器IkAnalyzer

    重启tomcat

    使用Solrj查询

     

           String zkHost = "192.168.80.128:2181,192.168.80.128:2182,192.168.80.128:2183";// zookerper地址

           CloudSolrServer cloudSolrServer = new CloudSolrServer(zkHost);

           // 指定默认链接的collection

           cloudSolrServer.setDefaultCollection("collection2");

           /// 设置查询条件

           SolrQuery qSolrQuery = new SolrQuery();

           // 跟上面一样,省略

           QueryResponse cloudResponse = cloudSolrServer.query(qSolrQuery);

           // 跟单机查询一样,省略。。

    增删改查跟单机版的都一样

    Solr tomcat zookeeper目录结构

    Download 资源

    /user/local/solrcloud/zookerper1,2,3

    /user/local.solrcloud/tomcat/tomcat1,2,3,4

    /user/local.solrcloud/solr/solr1,2,3,4

  • 相关阅读:
    BigDecimal 类型数据比较大小
    list排序,顺序,倒序
    springboot添加log4j日志配置log4j.xml生成日志文件
    mybatis使用@param("xxx")注解传参和不使用的区别
    jetty 插件启动指定端口号
    javaweb项目静态资源被拦截的解决方法
    day15 Python全局变量和局部变量
    阿里云操作视频
    Python基础视频
    马哥Python视频
  • 原文地址:https://www.cnblogs.com/smailxiaobai/p/5641163.html
Copyright © 2011-2022 走看看