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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM