Solr7.x環境搭建+Springboot整合Solr+對文件進行索引+Solr避坑

本文爲轉載 ,放便自己和他人日後使用 , 原文地址:https://blog.csdn.net/xh_small_black/article/details/87968394

一、嘮嘮嗑

最近因爲畢設需要接觸到全文搜索引擎的問題,所以接觸到了Elasticsearch以及Solr,但是由於在實習時使用過Solr,所以還是選擇熟悉的Solr作爲該功能的支持。

二、Solr簡介

Solr是一個獨立的企業級搜索應用服務器,它對外提供類似於Web-service的API接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。

三、Solr環境搭建

Solr在過往的版本更新中,以Solr5和Solr4爲一個重要的區分點。Solr5以前的啓動都是以tomcat作爲容器,但是從Solr5開始其內部集成了jetty服務器,使得用戶可以直接通過bin目錄中的啓動文件部署Solr。相對於Solr5之前的版本來說,Solr5及其後續版本均可以獨立的應用發佈。

話不多說我們直接開始基於Centos7服務器上Solr環境的搭建。因爲樓主懶得每次都單獨啓動,所以還是選擇了老辦法把Solr部署到tomcat中。

準備工作

1、確認服務器上是否已經安裝java,可以用java -version查看,如果顯示類似於下圖的話,那就有了。沒有的話就隨手裝一個吧

java -version

2、進入到/opt文件夾下(個人偏愛在opt下放東西),下載tomcat以及solr的安裝包

wget https://mirrors.cnnic.cn/apache/tomcat/tomcat-9/v9.0.16/bin/apache-tomcat-9.0.16.tar.gz
wget http://mirrors.shuosc.org/apache/lucene/solr/7.7.0/solr-7.7.0.tgz

3、解壓文件

tar -zxvf apache-tomcat-9.0.16.tar.gz

tar -zxvf solr-7.7.0.tgz

4、重命名tomcat以及solr

mv apache-tomcat-9.0.16 tomcat9

mv solr-7.7.0 solr7

5、啓動tomcat,測試是否可用

/opt/tomcat9/bin/startup.sh

curl localhost:8080

只要返回類似下圖的頁面就可以了

6、將solr7/server/solr-webapp裏面的webapp拷貝到tomcat 的webapps下,重命名爲solr

cp -r /opt/solr7/server/solr-webapp/webapp /opt/tomcat9/webapps/

cd /opt/tomcat9/webapps

mv webapp solr

7、將/opt/solr7/server/lib/ext 下的jar包以及lib目錄下gmetric4j-1.0.7.jar,以metrics開頭的jar包拷貝到 /opt/tomcat9/webapps/solr/WEB-INF/lib下

cd /opt/solr7/server/lib/ext/
cp * /opt/tomcat9/webapps/solr/WEB-INF/lib/
cd ..
cp gmetric4j-1.0.7.jar metrics-* /opt/tomcat9/webapps/solr/WEB-INF/lib/

8、複製/opt/solr7/server下的solr文件夾到任意非中文的目錄下(建議不要放在tomcat文件夾下),重命名爲solrhome

cd /opt/solr7/server/

cp -r solr /opt/

cd /opt/

mv solr solrhome

9、修改位於/opt/tomcat9/webapps/solr/WEB-INF/目錄下的web.xml文件,將下圖的中的env-entry-value的值改爲自己的solrhome的路徑,同時將<security-constraint>部分註釋掉

10、檢查/opt/tomcat9/webapps/solr/WEB-INF下的classes文件夾是否存在,不存在則新建一個。然後將/opt/solr7/server/resources下的log4j.xml複製到新建的classes文件夾中

mkdir -p /opt/tomcat9/webapps/solr/WEB-INF/classes

cp /opt.solr7/server/resources/log4j.xml  /opt/tomcat9/webapps/solr/WEB-INF/classes/

11、啓動tomcat,測試是否能夠訪問

用tail -100f /opt/tomcat9/logs/catalina.out查看啓動日誌

看到日誌中有Solr標誌就證明啓動成功了

curl localhost:8080/solr/index.html

打開瀏覽器訪問可以看到以下畫面

12、再頁面中找到Core Admin,點擊Add Core,這一步會出錯,但是在/opt/solrhome/中仍然會創建test目錄

解決辦法:將/opt/solr7/server/solr/configsets/_default/conf複製到/opt/solrhome/test/下

cp -r /opt/solr7/server/solr/configsets/_default/conf  /opt/solrhome/test/

複製後再次點擊Add Core會顯示成功。

13、配置IK中文分詞器

複製/opt/solr7/dist/solr-dataimporthandler-7.2.1.jar到/opt/tomcat9/webapps/solr/WEB-INF/lib文件夾下

複製/opt/solr7/contrib//analysis-extras/lucene-libs/* 到/opt/tomcat9/webapps/solr/WEB-INF/lib文件夾下

cp  /opt/solr7/dist/solr-dataimporthandler-7.2.1.jar /opt/tomcat9/webapps/solr/WEB-INF/lib/

cp  /opt/solr7/contrib//analysis-extras/lucene-libs/* /opt/tomcat9/webapps/solr/WEB-INF/lib/

14、修改/opt/solrhome/test/conf/managed-schema

vi /opt/solrhome/test/conf/managed-schema

<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
  </analyzer>
</fieldType>
<field name="file_name" type="text_ik" indexed="true" stored="true"/>
<field name="file_path" type="text_ik" indexed="true" stored="true"/>
<field name="file_text" type="text_ik" indexed="true" stored="true"/>
<field name="file_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="file_name" dest="file_keywords"/>
<copyField source="file_path" dest="file_keywords"/>
<copyField source="file_text" dest="file_keywords"/>

重啓tomcat,在頁面中可以發現新增的自定義域以及分詞效果

分詞前

分詞後

到此爲止安裝配置就結束啦,但是有一個配置尚未完成,後續例子再做說明

四、Springboot整合

1、導入依賴

<!--集成solr搜索引擎客戶端-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>

2、在application.properties中增加

spring.data.solr.host=http://xxx.xxx.xxx.xxx:8080/solr/manuscript

3、測試

@RunWith(SpringRunner.class)
@SpringBootTest
public class test {
 
    @Autowired
    SolrClient solrClient;
 
    @Test
    public void test1() throws IOException, SolrServerException {
        ContentStreamUpdateRequest up = new ContentStreamUpdateRequest(
                "/update/extract");
        File file = new File("C:/Users/Administrator/Desktop/test.docx");
        up.addFile(file,"application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        up.setParam("literal.file_name",file.getName());
        up.setParam("literal.file_path",file.getPath());
        up.setParam("literal.file_process",file.getName().substring(3));
        up.setParam("fmap.content", "file_text");
        up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
        solrClient.request(up);
        QueryResponse query = solrClient.query(new SolrQuery("*:*"));
        SolrDocumentList results = query.getResults();
        System.out.println(results);
    }
 
    @Test
    public void test2() throws IOException, SolrServerException {
        QueryResponse query = solrClient.query(new SolrQuery("file_keywords:*"));
        SolrDocumentList results = query.getResults();
        System.out.println(results);
    }
}

4、注意:在測試導入文件進行索引時,會報錯:java.lang.ClassNotFoundException:solr.extraction.ExtractingRequestHandler 

這是因爲Solrhome的core比如test中一些包路徑沒有配置好

需要增加的一步配置是

vi /opt/solrhome/test/conf/solrconfig.xml

將 lib相關路徑改爲如下 

  1. <lib dir="${solr.install.dir:..}/contrib/extraction/lib" regex=".*\.jar" />
  2. <lib dir="${solr.install.dir:..}/dist/" regex="solr-cell-\d.*\.jar" />
  3. <lib dir="${solr.install.dir:..}/contrib/clustering/lib/" regex=".*\.jar" />
  4. <lib dir="${solr.install.dir:..}/dist/" regex="solr-clustering-\d.*\.jar" />
  5. <lib dir="${solr.install.dir:..}/contrib/langid/lib/" regex=".*\.jar" />
  6. <lib dir="${solr.install.dir:..}/dist/" regex="solr-langid-\d.*\.jar" />
  7. <lib dir="${solr.install.dir:..}/contrib/velocity/lib" regex=".*\.jar" />
  8. <lib dir="${solr.install.dir:..}/dist/" regex="solr-velocity-\d.*\.jar" />

上述的路徑中

solr.install.dir也就是core比如test的路徑

${solr.install.dir:..}/dist其實就是/opt/solrhome/test/../dist也就是/opt/solrhome/dist

5、配置結束

運行結果就不展示啦

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章