zoukankan      html  css  js  c++  java
  • solr 7.6 安装部署与遇到的问题


    Solr 是基于开放标准的,它是高度可扩展的。Solr 查询是简单的 HTTP 请求 URL,响应是一个结构化文档:主要是 JSON,但也可以是 XML、CSV 或其他格式。这意味着各种各样的客户端将能够使用 Solr,从其他 Web 应用程序到浏览器客户端、丰富的客户端应用程序和移动设备。任何能够使用 HTTP 的平台都可以与 Solr 对话。

    学习solr 除了官网文档我们还可以看这边的中午文档:https://www.w3cschool.cn/solr_doc/solr_doc-ltzn2fm4.html

    solr 默认是有web容器的 jetty ,我们也可以将它存放在tomcat 里面。

    直接使用默认的话是可以直接启动的,要使用tomcat 的话就比较麻烦点了。
    由于tomcat 在企业应用较多,相对jetty 更为熟悉。所以我们这里使用的是tomcat进行搭建。
    jetty 与tomcat 的对比

    安装 solr

    下载安装java

    安装tomcat

    下载solr(7.6版本) :

    cd  /opt wget http://mirrors.shu.edu.cn/apache/lucene/solr/7.6.0/solr-7.6.0.tgz
    tar -xzf  solr-7.6.0.tgz
    

    配置solr 到tomcat(关键)

    将solr 的webapp文件复制到tomcat的webapps目录下并命名为solr

    cp -r /opt/solr-7.6.0/server/solr-webapp  /opt/tomcat-solr/webapps/solr  
    

    配置依赖包

    将solr下 /ext 文件夹中 所有的jar 包复制到 tomcat 里的solr 目录下的WEB-INF/lib 下

    cp -r /opt/solr-7.6.0/server/lib/ext/ /opt/tomcat-solr/webapps/solr/WEB-INF/lib/
    

    将solr下 server/lib/metrics开头的jar包复制到 tomcat里的solr 目录下的WEB-INF/lib 下

    cp -r /opt/solr-7.6.0/server/lib/metrics*.jar   /opt/tomcat-solr/webapps/solr/WEB-INF/lib/
    

    创建tomcat solr 的 classes 文件

    mkdir /opt/tomcat-solr/webapps/solr/WEB-INF/classes
    

    复制 jetty-logging.properties,log4j2.xml 到 classes 文件夹下

    cp   /opt/solr-7.6.0/server/resources/jetty-logging.properties   /opt/tomcat-solr/webapps/solr/WEB-INF/classes
    cp  /opt/solr-7.6.0/server/resources/log4j2.xml  /opt/tomcat-solr/webapps/solr/WEB-INF/classes
    

    创建 solr 的core 的主目录(也就是存放core的位置)

    cp -r /opt/solr-7.6.0/server/solr  /opt/solrhome
    
    

    修改配置文件指定solr的home

    vim /opt/tomcat-solr/webapps/solr/WEB-INF/web.xml
    

    添加以下内容:(注意第三行的值要替换成你们solr的home的绝对路径)

    <env-entry>
        <env-entry-name>solr/home</env-entry-name>
        <env-entry-value>/opt/solrhome</env-entry-value>
        <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
    

    添加位置:

    image

    解决限制资源访问

    如果我们按照上面的配置好了,并启动好了tomcat,那么我们直接去访问我们的solr 会发现这个错:
    HTTP Status 403 - Access to the requested resource has been denied,拒绝我们的访问资源请求。
    解决办法:
    注释

    <security-constraint>
        <web-resource-collection>
          <web-resource-name>Disable TRACE</web-resource-name>
          <url-pattern>/</url-pattern>
          <http-method>TRACE</http-method>
        </web-resource-collection>
        <auth-constraint/>
      </security-constraint>
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>Enable everything but TRACE</web-resource-name>
          <url-pattern>/</url-pattern>
          <http-method-omission>TRACE</http-method-omission>
        </web-resource-collection>
    </security-constraint>
    

    更改图片位置

    image

    然后启动tomcat ,我们访问:http://ip:port/solr/index.html

    启动成功图示:
    image

    遇到的问题以及解决办法:

    错误1

    错误内容

    Unable to resolve canonical hostname for local host,&#8203; possible DNS misconfiguration. Set the 'solr.dns.prevent.reverse.lookup' sysprop to true on startup to prevent future lookups if DNS can not be fixed.
    

    问题原因:

    通过解析hostname 找不到对应的本地主机。原因是我更改了hostname,但是我没有更改/etc/hosts 文件,你可以直接 ping 下主机名,看看是否能正常解析到127.0.0.1 。我的是不可以,所以这里报解析错误。

    解决办法:

    编辑 /etc/hosts文件

    在 127.0.0.1 和::1 后面添加 你的新主机名

    示例: 我的主机名是ngrok

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 ngrok
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 ngrok
    

    创建core

    创建core 目录

    我这里的solr 的home目录是 /opt/solrhome

    mkdir  /opt/solrhome/test1  
    

    添加配置文件

    将配置文件复制到 test1 目录下

    cp  /opt/solrhome/configsets/_default/conf/    /opt/solrhome/test1/
    

    添加data目录

    用于存放数据

    mkdir    /opt/solrhome/test1/data/
    

    添加core.properties 文件

    name=test1 ,test1值换成你们core的名称。

    echo "name=test1" >/opt/solrhome/test1/core.properties
    

    我们重新启动就可以在 core 看到我们新加的目录名称了。

    遇到的问题以及解决办法:

    错误一

    错误内容

    2019/1/9 上午11:01:16
    WARN false x:ljf_dev SolrConfig Couldn't add files from /opt/solrhome/ljf_dev/../../../../contrib/extraction/lib filtered by .*.jar to classpath: /opt/solrhome/ljf_dev/../../../../contrib/extraction/lib
    2019/1/9 上午11:01:16
    WARN falsex:ljf_dev SolrConfig  Couldn't add files from /opt/solrhome/ljf_dev/../../../../dist filtered by solr-cell-d.*.jar to classpath: /opt/solrhome/ljf_dev/../../../../dist
    

    错误原因

    上面的错误是说加载不到那些jar包 ,上面的这些jar包还在我们解压的文件里面,它肯定是找不到,我们先找到我们这个配置文件,然后修改它寻找的路径。
    配置文件是 core 目录下的 conf 里的 solrconfig.xml

    我们可以看到默认的配置路径是: 这个路径是solr的安装路径,我们可以更改成绝对路径

      <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*.jar" />
      <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-d.*.jar" />
    
      <lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*.jar" />
      <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-d.*.jar" />
    
      <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*.jar" />
      <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-d.*.jar" />
    
      <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*.jar" />
      <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-d.*.jar" />
    
    

    解决办法

    将那些jar包放在一个固定路径,然后更改配置文件里的路径为绝对路径

    #备份下配置文件
    cp  /opt/solrhome/test1/conf/solrconfig.xml  /opt/solrhome/test1/conf/solrconfig.xml.bak
    #将依赖文件复制到 tomcat solr 下
    cp  -r /opt/solr-7.6.0/dist/     /opt/tomcat-solr/webapps/solr/
    cp  -r /opt/solr-7.6.0/contrib/     /opt/tomcat-solr/webapps/solr/
    
    然后更改配置文件 /opt/solrhome/test1/conf/solrconfig.xml  修改为绝对路径,下面为为修改后的。
      <lib dir="/opt/tomcat-solr/webapps/solr/contrib/extraction/lib" regex=".*.jar" />
      <lib dir="/opt/tomcat-solr/webapps/solr/dist/" regex="solr-cell-d.*.jar" />
    
      <lib dir="/opt/tomcat-solr/webapps/solr/contrib/clustering/lib/" regex=".*.jar" />
      <lib dir="/opt/tomcat-solr/webapps/solr/dist/" regex="solr-clustering-d.*.jar" />
    
      <lib dir="/opt/tomcat-solr/webapps/solr/contrib/langid/lib/" regex=".*.jar" />
      <lib dir="/opt/tomcat-solr/webapps/solr/dist/" regex="solr-langid-d.*.jar" />
    
      <lib dir="/opt/tomcat-solr/webapps/solr/contrib/velocity/lib" regex=".*.jar" />
      <lib dir="/opt/tomcat-solr/webapps/solr/dist/" regex="solr-velocity-d.*.jar" />
    
    

    这样重新启动tomcat 就不会再有警告了。

    配置分词器

    分词器我们使用的是IK Analyzer

    下载

    下载链接 :百度云盘 提取码:i9uv(失效了评论区留言啊,我看到了会更新的)

    添加依赖文件

    下载好了后解压上传到服务器 :
    有以下文件:

    ext.dic   # 词典
    IKAnalyzer.cfg.xml #配置文件  
    ik-analyzer-solr5-5.x.jar  #jar包
    solr-analyzer-ik-5.1.0.jar #jar包
    stopword.dic # 词典
    

    我们需要将 jar 包放到 tomcat 下的solr 的WEB-INF/lib/ 下
    将配置文件和词典 移动到 到 tomcat 下的solr 的WEB-INF/classes 下

    cp  /tmp/ikanalyzer-solr5/*.dic  IKAnalyzer.cfg.xml  /opt/tomcat-solr/webapps/solr/WEB-INF/classes/
    cp /tmp/ikanalyzer-solr5/*.jar  /opt/tomcat-solr/webapps/solr/WEB-INF/lib/
    

    core 配置

    core 配置
    编辑我们solr home 下的 core 目录下conf里的managed-schema文件

    vim  /opt/solrhome/ljf_dev/conf/managed-schema
    

    添加以下内容

     <fieldType name="text_ik" class="solr.TextField">
     	<analyzer type="index" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
         <analyzer type="query" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
     </fieldType>
    

    添加后示图:

    image

    使用分词器。分词合作共赢

    image

    不知道为啥,我总觉得这个分词器有点不太准确。

    扩展字典

    vim /opt/tomcat-solr/webapps/solr/WEB-INF/classes/IKAnalyzer.cfg.xml

    <properties>  
     	<comment>IK Analyzer 扩展配置</comment>
     	<!--用户可以在这里配置自己的扩展字典 -->
     	<entry key="ext_dict">ext.dic;</entry> 
     	<!--用户可以在这里配置自己的扩展停止词字典-->
     	<entry key="ext_stopwords">stopword.dic;</entry> 
     </properties>
    

    注意事项:

    在tomcat 运行之初我看到了错误日志

    Missing Java Option solr.log.dir. Logging may be missing or incomplete
    

    针对这次错误:https://issues.apache.org/jira/browse/OFBIZ-9375
    也未给出答案,但是上面说到这个是一个不影响使用报错。

    附加配置

    core 添加字段

    vim  /opt/solrhome/test1/conf/managed-schema
    
    
    <field name="age" type="string" multiValued="false" indexed="true" stored="true"/>
     <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
     <field name="info" type="text_ik" multiValued="false" indexed="true" stored="true"/>
     <field name="name" type="string" multiValued="false" indexed="true" stored="true"/>
    
    

    指定默认搜索字段

    vim  /opt/solrhome/test1/conf/solrconfig.xml
    
    <requestHandler name="/select" class="solr.SearchHandler">
         <lst name="defaults">
           <str name="echoParams">explicit</str>
           <int name="rows">10</int>
     	  <!-- 定义默认搜索字段 -->
           <str name="df">info</str> 
     	</lst>
     </requestHandler>
    

    配置数据源

    vim  /opt/solrhome/test1/conf/solrconfig.xml
    

    添加以下内容:

     <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
         <lst name="defaults">
             <str name="config">data-config.xml</str>
         </lst>
     </requestHandler>
    
    

    并新建data-config.xml文件配置数据库信息

    data-config.xml 文件内容为:

     <?xml version="1.0" encoding="UTF-8"?> 
     <dataConfig>
         <dataSource name="dataSource" type="JdbcDataSource"
                   driver="net.sourceforge.jtds.jdbc.Driver"
                   url="jdbc:jtds:sqlserver://url:1433/database;useLOBs=false"
                   user="user"
                   password="password" />
         <document>
             <entity name="Table" dataSource="dataSource" pk="id"
                 query="SELECT * FROM Table">
                 <field column='id' name='id' />
                 <field column='name' name='name' />
                 <field column='age' name='age' />
                 <field column='info' name='info' />
             </entity>
         </document>
     </dataConfig>
    
    

    本地较多内容来自但其中错误及解决方法均本人自己撰写:
    https://blog.csdn.net/derlinchen/article/details/85719930
    连接数据库:(上面写的不太完善)
    https://blog.csdn.net/Amor_Leo/article/details/85256735

  • 相关阅读:
    mysql
    makefile
    KNN算法(k-nearest neighbor)
    时间序列
    python易错题之lambda 以及 for循环中内嵌函数
    python易错题之作用域
    html----不常见标签
    js----DOM对象(3
    js----DOM对象(事件)
    js----对象
  • 原文地址:https://www.cnblogs.com/operationhome/p/10253514.html
Copyright © 2011-2022 走看看