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、配置结束

运行结果就不展示啦

 

 

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