Linuk(包含信创Tongweb东方通,AAS金蝶)部署solr

2023-10-17 12:10

本文主要是介绍Linuk(包含信创Tongweb东方通,AAS金蝶)部署solr,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linuk部署solr

统一安装目录都在 /data/application中application为自己创建的目录

文章目录

  • Linuk部署solr
  • 安装JDk
    • 查看JDK版本:
    • JDK下载地址:
    • 指定solr启动用的jdk
  • 安装sorl 服务
    • 1、下载solr
    • 2、安装solr
    • 3、运行/关闭和重启solr-Jetty容器
    • 4、修改默认端口
    • 5、查看日志
    • 6、安装常见失败错误
      • **root启动失败**(force)
      • Xss768k错误
  • 创建solr核心(数据源)
    • 一、只检索文档meta_db
      • 1、创建meta_db
      • 2、导入jar包
      • 3、中文分词器安装配置
      • 4、链接oracle数据表
        • 4.1新建数据配置文件
        • 4.2导入新建的数据库配置文件
        • 4.3配置字段映射
        • 4.4Solr建立索引时,过滤HTML标签
        • 4.5全量导入数据
        • 4.6全量删除数据
        • 4.7查看导入的数据
      • 5、定时自动同步数据
        • 方法一(官方不更新了)
        • 方法二
      • 6、API
    • 二、检索文档和附件[多层嵌套格式数据]file_db
      • 1、创建file_db
      • 2、导入jar包
      • 3、中文分词器安装配置
      • 4、链接oracle数据表
        • 4.1新建数据配置文件
        • 4.2导入新建的数据库配置文件
        • 4.3配置字段映射
        • 4.4全量导入数据
        • 4.5全量删除数据
        • 4.6查看导入的数据
      • 5、定时自动同步数据
      • 6、API
  • 配置中间件启动solr
    • 1、配置tomcat 启动 solr
          • 找不到默认index页面
    • 2、配置TongWeb(东方通)启动solr
    • 3、配置AAS(金蝶)启动solr
  • solr安全策略
      • 一、solr基于jetty容器配置后台登陆角色用户名密码
        • 1.新建用户密码文件
        • 2.添加jetty 用户加载这个文件
        • 3.配置web.xml,用密码登录
        • 4.重启solr服务器
      • 二、solr基于Tongweb(东方通)容器配置后台登陆角色用户名密码
        • 1.创建tongweb-web.xml
        • 2.配置web.xml,用密码登录
        • 3.重启solr服务器
      • 三、solr基于AAS(金蝶)容器配置后台登陆角色用户名密码
        • 1.创建apusic-application.xml
        • 2.配置web.xml,用密码登录
        • 3.重启solr服务器
  • Springboot用户密码方式连接solr
    • 配置文件application.yml

安装JDk

查看JDK版本:

java -version

JDK下载地址:

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 中选择相应jdk版本

cd /data/application
tar -zxvf 这个jdk

指定solr启动用的jdk

cd  /data/application/solr-8.9.0/bin
vim solr.in.sh 
SOLR_JAVA_HOME=""  jdk路径不要带bin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PHBUWpHB-1688616477906)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110100701.jpg)]

安装sorl 服务

1、下载solr

官网默认下载地址:https://solr.apache.org/downloads.html

官网其它版本下载地址:http://archive.apache.org/dist/lucene/solr/

官网文档地址:http://archive.apache.org/dist/lucene/solr/

本次下载的为Solr 8.9.0 版本,最新版本9.0.0用的JDK 11 不能进行升级了

2、安装solr

cd  /data/application

将solr-9.0.0.tgz 上传到application 目录中

解压solr-9.0.0.tgz 文件 到当前目录:

tar zxvf  solr-8.9.0.tgz

3、运行/关闭和重启solr-Jetty容器

解压后进行solr-8.9.0\bin目录,访问http://localhost:8983/出现solr管理界面即安装成功。

./solr start -p 8983 启动
./solr stop -p 8983  关闭
./solr restart -p 8983  重启
查看是否运行成功ps -f |grep solr

4、修改默认端口

cd  /data/application/solr-8.9.0/bin
vim solr.in.sh SOLR_PORT="8983" 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HKLsrc8C-1688616477907)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110100826.jpg)]

5、查看日志

cd /data/application/solr-8.9.0/server/logs

6、安装常见失败错误

root启动失败(force)

*** [WARN] ***  Your Max Processes Limit is currently 14690. It should be set to 65000 to avoid operational disruption. If you no longer wish to see this warning, set SOLR_ULIMIT_CHECKS to false in your profile or solr.in.sh
WARNING: Starting Solr as the root user is a security risk and not considered best practice. Exiting.Please consult the Reference Guide. To override this check, start with argument '-force'

解决方式

./solr start -force

Xss768k错误

cd  /data/application/solr-8.9.0/bin
vim solr.in.sh #添加或修改
SOLR_JAVA_STACK_SIZE="-Xss768k"

创建solr核心(数据源)

一、只检索文档meta_db

1、创建meta_db

cd /data/application/solr-8.9.0/bin./solr create -c meta_db -force

然后在/data/application/solr-8.9.0/server/solr目录下会建立meta_db目录,目录下自动生成以下文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2T98NMTU-1688616477908)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110153828.jpg)]

2、导入jar包

将solr-8.9.0\dist下2个jar包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCp6EEzR-1688616477912)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\F2A70A45-691E-4327-9E4F-A2904073CA28.png)]

JDBC驱动包拷贝到solr-8.9.0\server\solr-webapp\webapp\WEB-INF\lib目录下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DEOkuWDk-1688616477913)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110153447.jpg)]

3、中文分词器安装配置

下载地址:https://github.com/magese/ik-analyzer-solr

下载的jar : ik-analyzer-8.5.0.jar

拷贝到solr-8.9.0\server\solr-webapp\webapp\WEB-INF\lib目录下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sCUVwuvq-1688616477914)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110154403.jpg)]

resources目录下的5个配置文件放入solr服务的solr-8.9.0\server\solr-webapp\webapp\WEB-INF\classes目录下

如果没有classes 就自己新建文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JBuXJPt8-1688616477915)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110154605.jpg)]

将下面代码加到\solr-8.9.0\server\solr\meat_db\conf\managed-schema里

    <!-- ik分词器 --><fieldType name="text_ik" class="solr.TextField"><analyzer type="index"><tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/><filter class="solr.LowerCaseFilterFactory"/></analyzer><analyzer type="query"><tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/><filter class="solr.LowerCaseFilterFactory"/></analyzer></fieldType>

说明:当 useSmart=”false”,分词粒度较小,分词后个数多;当 useSmart=”true”,分词粒度大,分词后个数据少。

选择Analysis 输入要搜索的中文 选择FieldType为text_ik 可以发现分词成功

ps:如果没有text_ik 就重启一下solr

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cuvqHCNf-1688616477915)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110155900.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OlRy4Gwl-1688616477916)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110155954.jpg)]

4、链接oracle数据表

4.1新建数据配置文件

在/data/application/solr-8.9.0/server/solr/meta_db/conf文件夹中,新建db-data-config.xml

cd /data/application/solr-8.9.0/server/solr/meta_db/confvim db-data-config.xml

将下边内容粘贴到db-data-config.xml

<dataConfig><dataSource name="source1" type="JdbcDataSource" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@:1521:orcl" user="" password=""/> <!-- sql 编写 --><!-- entity属性:name:实体名称dataSource:数据源名称pk:实体主键,增量导入时使用query:全量同步SQLdeltaQuery:增量导入时查询需要导入的数据的主键deltaImportQuery:增量导入查询SQL,根据deltaQuery查询出的id查询数据deletedPkQuery:增量导入时会删除solr中根据该SQL查询出来的id对应的数据增量同步原理:首先保障数据库表里面有个记录时间的字段,每次添加或者修改后记录时间;solr每次同步数后会记录同步时间:last_index_time,然后SQL语句里面就可以添加查询条件 :last_modify_date >= '${dih.last_index_time}',表里面更新时间大于solr的更新时间,说明数据被更新了或者是新增的数据;last_modify_date:这个是表里面记录更新、插入时间的字段;--><!-- 以下为自定义配置 liuyu--><!--deltaQuery用于查询比上一次数据更新操作的时间更晚的数据的id,deltaImportQuery则根据deltaQuery取到的id去MySql数据库查询数据用以更新solr中的数据--><document><entity name="share" transformer="ClobTransformer,HTMLStripTransformer" dataSource="source1" pk="RECID"query="select cnd.recid as id,cnd.recid, cnd.chnlid, cnd.docid, cnd.modal, cnd.docstatus, cnd.docpuburl, cnd.docpubtime,cnd.docreltime,cnd.siteid, cnd.docchannel, doc.doctitle,doc.doccontent,doc.opertime from cms_chnldocinfo cnd left outer join cms_documentinfo doc on cnd.docid=doc.docid where cnd.docstatus=10" deltaImportQuery="select cnd.recid as id,cnd.recid, cnd.chnlid, cnd.docid, cnd.modal, cnd.docstatus, cnd.docpuburl, cnd.docpubtime,cnd.docreltime, cnd.siteid, cnd.docchannel, doc.doctitle,doc.doccontent,doc.opertime from CMS_chnldocinfo cnd left outer join CMS_documentinfo doc on cnd.docid=doc.docid where cnd.DOCSTATUS=10 and cnd.recid = '${dih.delta.RECID}'"deltaQuery="select cnd.recid as id,recid from cms_chnldocinfo cnd left outer join CMS_documentinfo doc on cnd.docid=doc.docid where cnd.docstatus=10 and cnd.UPDATEINGTIME > to_date('${dih.last_index_time}','yyyy-mm-dd hh24:mi:ss')" deletedPkQuery="select recid from cms_chnldocinfo where docstatus!=10"><field column="ID" name="id" /><field column="RECID" name="recid" /><field column="CHNLID" name="chnlid" /><field column="DOCID" name="docid" /><field column="MODAL" name="modal" /><field column="DOCSTATUS" name="docstatus" /><field column="DOCPUBURL" name="docpuburl" /><field column="DOCPUBTIME" name="docpubtime" /><field column="DOCRELTIME" name="docreltime" /><field column="SITEID" name="siteid" /><field column="DOCCHANNEL" name="docchannel" /><field column="DOCTITLE" name="doctitle" /><field column="DOCCONTENT" name="doccontent" clob="true"/><field column="OPERTIME" name="opertime" /></entity></document>
</dataConfig>

注意大写字段的地方,测试了好久才发现大小写对增量发布有影响

4.2导入新建的数据库配置文件

配置solrconfig.xml导入的db-data-config.xml

cd /data/application/solr-8.9.0/server/solr/meta_db/confvim solrconfig.xml
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">db-data-config.xml</str> </lst> 
</requestHandler>
4.3配置字段映射

将下面代码加到F:\solr-8.9.0\server\solr\meat_db\conf\managed-schema里

cd /data/application/solr-8.9.0/server/solr/meta_db/conf
 <!-- 定义文档字段name:字段名称;type:分词类型;indexed:是否进行索引;stored:是否进行储存,需要进行显示一般需要储存;required:字段是否可为空;multiValued:是否有多个值--><field name="recid" type="string" uninvertible="false" indexed="true" required="true" stored="true"/><field name="chnlid" type="strings" stored="false"  required="false" multiValued="false"/><field name="docid" type="strings" stored="false"  required="false" multiValued="false"/><field name="modal" type="strings" stored="false"  required="false" multiValued="false"/><field name="docstatus" type="strings" stored="true"  required="false" multiValued="false"/><field name="docpuburl" type="strings" stored="true" required="false" multiValued="false"/><field name="docpubtime" type="strings" stored="true" required="false" multiValued="false"/><field name="docreltime" type="strings" stored="true" required="false" multiValued="false"/><field name="siteid" type="strings" stored="false"  required="false" multiValued="false"/><field name="docchannel" type="strings" stored="true" required="false" multiValued="false"/><field name="doctitle" type="text_ik" stored="true" required="false" multiValued="false"/><field name="doccontent" type="text_ik" stored="true" required="false" multiValued="false"/><field name="opertime" type="strings" stored="true" required="false" multiValued="false"/><!-- 索引复制,联合索引 --><field name="keyword" type="text_ik" indexed="true" stored="true" omitNorms="true" multiValued="true"/><copyField source="doctitle" dest="keyword" maxChars="30000"/><copyField source="doccontent" dest="keyword" maxChars="30000"/>
4.4Solr建立索引时,过滤HTML标签

下边这种方式不管用,再项目中二次处理结果集

1、在数据库的读取文件data-config.xml 中的entity 标记里边添加 transformer=”HTMLStripTransformer” 代码。

<entity name="edusystem" pk="url" transformer="HTMLStripTransformer" query="SELECT description from table"><field column="description" name="description" stripHTML="true"/>
</entity> 

2、在field 字段需要过滤html代码的字段添加 stripHTML=”true”

<entity name="edusystem" pk="url" transformer="HTMLStripTransformer" query="SELECT description from table"><field column="description" name="description" stripHTML="true"/>
</entity>

3、修改schema.xml文件中的fieldType标记中的内容,添加如下代码

<charFilter class="solr.HTMLStripCharFilterFactory" /><analyzer type="query"><tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" reload="true" /><filter class="solr.LowerCaseFilterFactory" /><charFilter class="solr.HTMLStripCharFilterFactory" />
</analyzer>
4.5全量导入数据

配置完成(重启solr),进入solr管理界面查看:

选择要配置的核心,点击dataimport,选择entity,execute,刷新,导入完成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KZ2Ch4FR-1688616477918)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110162406.jpg)]

4.6全量删除数据

Documents

Document Type中点选XML

Document(s)中输入:

<delete><query>*:*</query></delete>
<commit/>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T5sJaGWx-1688616477919)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110162807.jpg)]

4.7查看导入的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aHvtRq6Y-1688616477920)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110162507.jpg)]

5、定时自动同步数据

方法一(官方不更新了)

参考地址:https://blog.csdn.net/dqb4531/article/details/103183690

1、下载jar包:solr定时任务需要的包

下载地址: https://pan.baidu.com/s/1cgCVzT5IlSg1TabHCtfnPA 提取码: cncs

如果在solr的页面中选择增量导入没有问题时,但是定时导入一直没有执行的话,按以下步骤进行:

2、在solr-8.2.0\server\solr-webapp\webapp\WEB-INF\lib下导入需要的包(log4j-1.2.16.jar,slf4j-api-1.7.25.jar,slf4j-log4j12-1.7.25.jar)

经过测试:metrics-core-3.0.2.jar不能放在lib下,有冲突

3、找到目录solr-8.9.0/server/solr-webapp/webapp/WEB-INF 的web.xml ,在里面配置监听器,添加如下代码:

 <!-- 定时更新数据 --><listener> <listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class></listener>

4、确定dataimport.proterties的位置没有放错

这个经过测试是放在solr-8.2.0\server\solr下新建一个conf文件夹,然后放入dataimport.properties
#Thu Nov 10 08:26:15 UTC 2022
share.last_index_time=2022-11-10 08\:26\:14
last_index_time=2022-11-10 08\:26\:14
#################################################
#                                               #
#     定时任务执行增量更新			            #
#                                               #
################################################## server BASIC authorization by userName and password
# format:userName:password
# if no server BASIC authorization,please set: 
#  authorizationMsg=
#authorizationMsg=userName:password#  to sync or not to sync
#  同步执行更新
syncEnabled=1#  
#  solr中对应得core名,可写多个,多个时用逗号“,”分隔
#  
syncCores=meta_db# 没有密码验证就不用配置
# solr服务添加了登录验证,所以这里也要配置用户名和密码
# 用户名:密码
user_pwd=solr:SolrRocks#  solr server name or IP address
#  [defaults to localhost if empty]
#   solr服务的id,定时任务服务是集成在solr服务里面的,所以都在同一台机器,所以localhost即可
# server=localhostserver=localhost# solr服务的端口号
#  [defaults to 80 if empty]
port=8984#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
webapp=solr#  URL params [mandatory]
#  remainder of URL
#增量更新对应的访问参数,注意/dataimport?地址不同版本sorl了能地址名不同,具体可登录solr管理后台##查看dataimport的具体访问ULR
# clean=false 表示不清空以前的数据,只有全量更新才为true
params=/dataimport?command=delta-import&clean=false&commit=true&optimize=false&wt=json&indent=true&verbose=false&debug=false#  schedule interval
#  number of minutes between two runs
#  定时任务执行增量更新的间隔,不能为0.5这样的数,默认设置为1分钟
interval=1########################## 默认没有全量导入功能,可以自己写定时任务调用solr全量更新的地址,地址如下reBuildIndexParams  ######################  重做索引的时间间隔,单位分钟,默认7200,即5天; 
#  为空,为0,或者注释掉:表示永不重做索引,即全量更新的时间间隔,1分钟一同步
#reBuildIndexInterval=7200#  重做索引的参数,即全量更新
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true&optimize=true&wt=json&indent=true&verbose=false&debug=false#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
#  两种格式:2020-05-15 16:10:00 或者  16:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=08:30:00

重启solr 服务即可,可以通过日志查看执行情况,solr日志路径:/solr/solr-8.9.0/server/logs/solr.log

方法二

自己写一个定时任务调用

http://124.221.212.171:8984/solr/meta_db/dataimport?command=delta-import&clean=false&commit=true

接口定时同步即可

6、API

SOLR在浏览器中输入命令:

1、全导入:

http://124.221.212.171:8984/solr/meta_db/dataimport?command=full-import&commit=true

2、增量导入:

http://124.221.212.171:8984/solr/meta_db/dataimport?command=delta-import&clean=false&commit=true

3、查看导入状态

http://124.221.212.171:8984/solr/meta_db/dataimport?command=status

浏览器地址可用做定时任务执行调用的地址

二、检索文档和附件[多层嵌套格式数据]file_db

1、创建file_db

cd /data/application/solr-8.9.0/bin./solr create -c file_db -force

然后在/data/application/solr-8.9.0/server/solr目录下会建立file_db目录,目录下自动生成以下文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8isFRpk4-1688616477920)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\8750CC32-45B6-46c8-A163-A9557F49DEA0.png)]

2、导入jar包

将solr-8.9.0\dist下2个jar包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cOYUn2Iu-1688616477921)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\F2A70A45-691E-4327-9E4F-A2904073CA28.png)]

JDBC驱动包拷贝到solr-8.9.0\server\solr-webapp\webapp\WEB-INF\lib目录下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dwEk41J7-1688616477921)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110153447.jpg)]

3、中文分词器安装配置

下载地址:https://github.com/magese/ik-analyzer-solr

下载的jar : ik-analyzer-8.5.0.jar

拷贝到solr-8.9.0\server\solr-webapp\webapp\WEB-INF\lib目录下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qSoSNO6N-1688616477922)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110154403.jpg)]

resources目录下的5个配置文件放入solr服务的solr-8.9.0\server\solr-webapp\webapp\WEB-INF\classes目录下

如果没有classes 就自己新建文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o2CVc75g-1688616477923)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110154605.jpg)]

将下面代码加到\solr-8.9.0\server\solr\file_db\conf\managed-schema里

    <!-- ik分词器 --><fieldType name="text_ik" class="solr.TextField"><analyzer type="index"><tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/><filter class="solr.LowerCaseFilterFactory"/></analyzer><analyzer type="query"><tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/><filter class="solr.LowerCaseFilterFactory"/></analyzer></fieldType>

说明:当 useSmart=”false”,分词粒度较小,分词后个数多;当 useSmart=”true”,分词粒度大,分词后个数据少。

选择Analysis 输入要搜索的中文 选择FieldType为text_ik 可以发现分词成功

ps:如果没有text_ik 就重启一下solr

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rMwPwjPJ-1688616477924)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110155900.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YrJYn7l7-1688616477924)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110155954.jpg)]

4、链接oracle数据表

4.1新建数据配置文件

在/data/application/solr-8.9.0/server/solr/file_db/conf文件夹中,新建tika-data-config.xml

cd /data/application/solr-8.9.0/server/solr/file_db/confvim tika-data-config.xml

将下边内容粘贴到tika-data-config.xml

<dataConfig><dataSource name="source" type="JdbcDataSource" driver="dm.jdbc.driver.DmDriver" url="jdbc:dm://127.0.0.1:5236" user="" password=""/> <dataSource name="tk_ds" type="BinURLDataSource" /><script>  <![CDATA[ //转换带有中文的文件名function GenerateId(row) {var url = row.get('LINK');if (url === null || true === url.isEmpty() || url === '') {row.remove('LINK');} else {url=encodeURI(url);}row.put('LINK', url);return row;}  ]]>  </script>  <document><entity name="docment" transformer="ClobTransformer,HTMLStripTransformer,DateFormatTransformer" rootEntity="true"  dataSource="source" pk="RECID" query="select cnd.recid as id,cnd.recid, cnd.chnlid, cnd.docid, cnd.modal, cnd.docstatus, cnd.docpuburl, cnd.docpubtime,cnd.docreltime,cnd.siteid, cnd.docchannel, doc.doctitle,doc.doccontent,doc.opertime,(select chnlname from cms_channelinfo chnl where chnl.channelid=cnd.chnlid ) as chnlnamefrom cms_chnldocinfo cnd left outer join cms_documentinfo doc on cnd.docid=doc.docid where cnd.docstatus=10 and cnd.chnlid>0" deltaImportQuery="select cnd.recid as id,cnd.recid, cnd.chnlid, cnd.docid, cnd.modal, cnd.docstatus, cnd.docpuburl, cnd.docpubtime,cnd.docreltime, cnd.siteid, cnd.docchannel, doc.doctitle,doc.doccontent,doc.opertime,(select chnlname from cms_channelinfo chnl where chnl.channelid=cnd.chnlid ) as chnlnamefrom CMS_chnldocinfo cnd left outer join CMS_documentinfo doc on cnd.docid=doc.docid where cnd.DOCSTATUS=10 and chnlid>0 and cnd.recid = '${dih.delta.RECID}' "	deltaQuery="select cnd.recid as id,recid from cms_chnldocinfo cnd left outer join CMS_documentinfo doc on cnd.docid=doc.docid where cnd.docstatus=10 and cnd.UPDATEINGTIME > to_date('${dih.last_index_time}','yyyy-mm-dd hh24:mi:ss')" deletedPkQuery="select recid from cms_chnldocinfo where docstatus!=10 and chnlid>0 and UPDATEINGTIME > to_date('${dih.last_index_time}','yyyy-mm-dd hh24:mi:ss') "><field column="ID" name="id" /><field column="RECID" name="recid" /><field column="CHNLID" name="chnlid" /><field column="CHNLNAME" name="chnlname" /><field column="DOCID" name="docid" /><field column="MODAL" name="modal" /><field column="DOCSTATUS" name="docstatus" /><field column="DOCPUBURL" name="docpuburl" /><field column="DOCPUBTIME" name="docpubtime" /><field column="DOCRELTIME" name="docreltime" /><field column="SITEID" name="siteid" /><field column="DOCCHANNEL" name="docchannel" /><field column="DOCTITLE" name="doctitle" stripHTML="true" /><field column="DOCCONTENT" name="doccontent" clob="true"/><field column="OPERTIME" name="opertime" /><!-- 附件数据 --><entity name="appendixnifo"  dataSource="source" transformer="script:GenerateId"query="select appendixid as id, appendixid,appdocid,showname,REPLACE(REPLACE(filepath, 'C:\CMSData\', 'http://127.0.0.1:8081/'),'\','/') as LINK from CMS_APPENDIXINFO  where appdocid ='${docment.DOCID}' "><field column="LINK" name="link" /><field column="APPENDIXID" name="appendixid" /><field column="SHOWNAME" name="showname" /><!-- 导入数据 --><entity name="appendixnifoImport" processor="TikaEntityProcessor" url="${appendixnifo.LINK}" format="text" onError="skip" dataSource="tk_ds"><field column="title" name="title" meta="true" /><field column="text" name="text" /></entity></entity></entity></document>
</dataConfig>

注意大写字段的地方,测试了好久才发现大小写对增量发布有影响

4.2导入新建的数据库配置文件

配置solrconfig.xml导入的tika-data-config.xml

cd /data/application/solr-8.9.0/server/solr/file_db/confvim solrconfig.xml
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">tika-data-config.xml</str> </lst> 
</requestHandler>
4.3配置字段映射

将下面代码加到F:\solr-8.9.0\server\solr\file_db\conf\managed-schema里

cd /data/application/solr-8.9.0/server/solr/file_db/conf
<!-- 定义文档字段name:字段名称;type:分词类型;indexed:是否进行索引;stored:是否进行储存,需要进行显示一般需要储存;required:字段是否可为空;multiValued:是否有多个值--><field name="appendixid" type="strings" stored="true" required="true" multiValued="true"/><field name="showname" type="text_ik" stored="true" required="true" multiValued="true"/><field name="link" type="strings" stored="true" required="true" multiValued="true"/> <field name="title" type="text_ik" indexed="true" stored="true" multiValued="true"/><field name="text" type="text_ik" indexed="true" stored="true"  multiValued="true"/><field name="recid" type="string" uninvertible="false" indexed="false" required="false" stored="true"/><field name="chnlid" type="strings" stored="false" required="false" multiValued="false"/><field name="chnlname" type="strings" stored="false" required="false" multiValued="false"/>	<field name="docid" type="strings" stored="false" required="false" 	multiValued="false"/><field name="modal" type="strings" stored="false" required="false" multiValued="false"/><field name="docstatus" type="strings" stored="true" required="false" 	multiValued="false"/><field name="docpuburl" type="strings" stored="true" required="false" multiValued="false"/><field name="docpubtime" type="strings" stored="true" required="false" multiValued="false"/><field name="docreltime" type="strings" stored="true" required="false" multiValued="false"/><field name="siteid" type="strings" stored="false" required="false" multiValued="false"/><field name="docchannel" type="strings" stored="true" required="false" multiValued="false"/><field name="doctitle" type="text_ik" stored="true" required="false" multiValued="false"/><field name="doccontent" type="text_ik" stored="true" required="false" multiValued="false"/><field name="opertime" type="strings" stored="true" required="false" multiValued="false"/><!-- 主键 --><field name="id" type="string" indexed="true" stored="true"/> <!-- 索引复制,联合索引 <field name="keyword" type="text_ik" indexed="true" stored="true" omitNorms="true" multiValued="true"/> --><field name="keyword" type="text_ik" indexed="true" stored="false" required="true" multiValued="true" /><copyField source="title" dest="keyword" maxChars="30000"/><copyField source="text" dest="keyword" maxChars="30000"/> <copyField source="showname" dest="keyword" maxChars="30000"/> <copyField source="doctitle" dest="keyword" maxChars="30000"/><copyField source="doccontent" dest="keyword" maxChars="30000"/>
4.4全量导入数据

配置完成(重启solr),进入solr管理界面查看:

选择要配置的核心,点击dataimport,选择entity,execute,刷新,导入完成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NoR1sQ2D-1688616477925)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110162406.jpg)]

4.5全量删除数据

Documents

Document Type中点选XML

Document(s)中输入:

<delete><query>*:*</query></delete>
<commit/>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ce9KQKQk-1688616477925)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110162807.jpg)]

4.6查看导入的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jx6zu1YO-1688616477926)(E:\ZGtdkxyjy\cms-search-rails\项目文档\文档原文件件\Dingtalk_20221110162507.jpg)]

5、定时自动同步数据

自己写一个定时任务调用

http://124.221.212.171:8984/solr/file_db/dataimport?command=delta-import&clean=false&commit=true

接口定时同步即可

6、API

SOLR在浏览器中输入命令:

1、全导入:

http://124.221.212.171:8984/solr/file_db/dataimport?command=full-import&commit=true

2、增量导入:

http://124.221.212.171:8984/solr/file_db/dataimport?command=delta-import&clean=false&commit=true

3、查看导入状态

http://124.221.212.171:8984/solr/file_db/dataimport?command=status

浏览器地址可用做定时任务执行调用的地址

配置中间件启动solr

1、配置tomcat 启动 solr

参考网址:https://www.cnblogs.com/smiles365/articles/15269607.html

配置和部署

1.准备一个解压后的tomcat,建议用tomcat8或tomcat9版本或以下,tomcat10会报各种错误。

2.打开solr,找到webapp,复制整个webapp到tomcat下的webapps下并修改名字为solr.

img

3.添加扩展:复制solr-8.9.0\server\lib\ext下所有jar包及solr-8.9.0\server\lib下带metrics的所有jar到tomcat的apache-tomcat-9.0.53\webapps\solr\WEB-INF\lib下

from:

img

to:

img

4.创建solrhome,solr-8.9.0\server下的solr其实就是solrhome,复制整个solr到本地盘符下并改名字为solrhome,我这里复制到E盘下。

from:

img

to:

img

\5. 在tomcat配置solrhome

位置:打开tomcat中webapps\solr\WEB-INF下web.xml进行编辑

img

配置1:

img

代码:

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

配置2:注释掉security-constraint不然会报403

img

6.配置classes:在tomcat的webapps\solr\WEB-INF下创建classes,复制solr安装包下solr-8.9.0\server\resources下的所有文件到classes中(不做此步骤tomcat启动后浏览器404)。

img

7.启动tomcat访问:http://localhost:8080/solr/index.html#/ 可以看到启动成功了,如果启动时报ClassNotFoundException异常说明少jar包了,我们可以查看它的异常信息然后知道具体少了那个包,你就去solr安装包下solr-8.9.0\server\lib下去找复制过来就好了。

img

img

找不到默认index页面

在 solr 跟目录下创建 index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<jsp:forward page="/index.html" />

2、配置TongWeb(东方通)启动solr

和配置tomcat的方式一样

3、配置AAS(金蝶)启动solr

和配置tomcat的方式一样

solr安全策略

一、solr基于jetty容器配置后台登陆角色用户名密码

1.新建用户密码文件
cd /data/application/solr-8.9.0/server/etcvim role.properties

内容如下

#userName: password,role  
demo: 123,admin
2.添加jetty 用户加载这个文件
cd  /data/application/solr-8.9.0/server/contextsvim solr-jetty-context.xml

添加内容如下:

<?xml version="1.0"?>
<Configure class="org.eclipse.jetty.webapp.WebAppContext"><Set name="contextPath"><Property name="hostContext" default="/solr"/></Set><Set name="war"><Property name="jetty.base"/>/solr-webapp/webapp</Set><Set name="defaultsDescriptor"><Property name="jetty.base"/>/etc/webdefault.xml</Set><Set name="extractWAR">false</Set>这个是添加的内容------------------------------------------------------<Get name="securityHandler"><Set name="loginService"><New class="org.eclipse.jetty.security.HashLoginService"><Set name="name">verify—name</Set><Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/verify.properties</Set></New></Set></Get>
------------------------------------------------
</Configure>
3.配置web.xml,用密码登录
cd  /data/application/solr-8.9.0/server/solr-webapp/webapp/WEB-INFvim  web.xml

添加内容如下:放在底部就行了

--------------------------------这是添加的内容--------------------------------------
<security-constraint>    <web-resource-collection>    <web-resource-name>Solr</web-resource-name> <!--描述-->   <url-pattern>/</url-pattern>               <!-- 验证的网页的位置-->    </web-resource-collection>    <auth-constraint>    <role-name>admin</role-name>   <!-- 验证的角色,别写成用户名,如有多个角色可以写多个role-name 标签-->    </auth-constraint>    </security-constraint>    <login-config>    <auth-method>BASIC</auth-method>            <!-- 关键-->    <realm-name>TestRealm</realm-name> 
</login-config>
--------------------------------------------------------------------
</web-app>
4.重启solr服务器

配置完成后,重启solr服务器,重新访问solr就需要用户名和密码了

./solr restart -p 8983   重启,再bin目录下执行/data/application/solr-8.9.0/bin

二、solr基于Tongweb(东方通)容器配置后台登陆角色用户名密码

1.创建tongweb-web.xml
cd  /data/application/solr-8.9.0/server/solr-webapp/webapp/WEB-INFvim  tongweb-web.xml

添加内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<tongweb-web-app><!--<context-root>/</context-root>--><!-- <property name="aliases" value="/aliasPath1=banner,/aliasPath2=banner"/>--><!-- <property name="jspPrintNull" value="false"/>--><security-role-mapping><role-name>thanos</role-name><principal-name>thanos</principal-name><!-- 	<group-name>thanos</group-name > --></security-role-mapping></tongweb-web-app>
2.配置web.xml,用密码登录
cd  /data/application/solr-8.9.0/server/solr-webapp/webapp/WEB-INFvi  web.xml

添加内容如下:放在底部就行了

--------------------------------这是添加的内容--------------------------------------
<security-constraint>    <web-resource-collection>    <web-resource-name>Solr</web-resource-name> <!--描述-->   <url-pattern>/</url-pattern>               <!-- 验证的网页的位置-->    </web-resource-collection>    <auth-constraint>    <role-name>thanos</role-name>   <!-- 验证的角色,别写成用户名,如有多个角色可以写多个role-name 标签-->    </auth-constraint>    </security-constraint>    <login-config>    <auth-method>BASIC</auth-method>            <!-- 关键-->    <realm-name>TestRealm</realm-name> 
</login-config>
--------------------------------------------------------------------
</web-app>
3.重启solr服务器

配置完成后,重启solr服务器,重新访问solr就需要用户名和密码了

用户名密码是东方通/console控制台的用户密码

三、solr基于AAS(金蝶)容器配置后台登陆角色用户名密码

1.创建apusic-application.xml
cd  /data/application/solr-8.9.0/server/solr-webapp/webapp/META-INF    【没有META-INF 就手动创建一个】vi  apusic-application.xml

添加内容如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE apusic-application PUBLIC '-//Apusic//DTD Apusic Application 3.0//EN''http://www.apusic.com/dtds/apusic-application_3_0.dtd'><apusic-application><realm-name>default</realm-name><security-role><role-name>admin</role-name><principal>admin</principal><group>administrators</group></security-role>
</apusic-application>
2.配置web.xml,用密码登录
cd  /data/application/solr-8.9.0/server/solr-webapp/webapp/WEB-INFvi  web.xml

添加内容如下:放在底部就行了

--------------------------------这是添加的内容--------------------------------------
<security-constraint>    <web-resource-collection>    <web-resource-name>Solr</web-resource-name> <!--描述-->   <url-pattern>/</url-pattern>               <!-- 验证的网页的位置-->    </web-resource-collection>    <auth-constraint>    <role-name>admin</role-name>   <!-- 验证的角色,别写成用户名,如有多个角色可以写多个role-name 标签-->    </auth-constraint>    </security-constraint>    <login-config>    <auth-method>BASIC</auth-method>            <!-- 关键-->    <realm-name>TestRealm</realm-name> 
</login-config>
--------------------------------------------------------------------
</web-app>
3.重启solr服务器

配置完成后,重启solr服务器,重新访问solr就需要用户名和密码了

用户名密码是金蝶/admin控制台的用户密码

Springboot用户密码方式连接solr

配置文件application.yml

在 application.yml 文件中配置:

spring:#全文检索data:solr:host: http://124.221.212.171:8984/solruser: rootpwd: 123

新建类SolrConfig增加配置

package com.zhou.config;import com.zhou.config.Filter.HttpRequestInterceptor;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.net.URI;/*** @author 刘洪荣* @description 为了实现 跨域、白白单,solr登录* @desc* @since 2022/9/1 15:41*/
@Configuration
public class SolrConfig{@Value("${spring.data.solr.user}")private String username;@Value("${spring.data.solr.pwd}")private String password;@Value("${spring.data.solr.host}")private String uri;/**** @apiNote 配置solr账号密码登录* @author 刘洪荣* @date 2021-6-8 15:05* @return {@link HttpSolrClient }*/@Beanpublic HttpSolrClient solrClient() {CredentialsProvider provider = new BasicCredentialsProvider();final URI uri = URI.create(this.uri);provider.setCredentials(new AuthScope(uri.getHost(), uri.getPort()),new UsernamePasswordCredentials(username, password));HttpClientBuilder builder = HttpClientBuilder.create();// 指定拦截器,用于设置认证信息builder.addInterceptorFirst(new SolrAuthInterceptor());builder.setDefaultCredentialsProvider(provider);CloseableHttpClient httpClient = builder.build();return new HttpSolrClient.Builder(this.uri).withHttpClient(httpClient).build();}
}

新建类SolrAuthInterceptor拦截器

import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.AuthState;
import org.apache.http.auth.Credentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpCoreContext;/*** @author 刘洪荣* @description solr 拦截器* @desc* @since 2022/11/14 14:02*/
public class SolrAuthInterceptor implements HttpRequestInterceptor {@Overridepublic void process(final HttpRequest request, final HttpContext context) {AuthState authState = (AuthState) context.getAttribute(HttpClientContext.TARGET_AUTH_STATE);if (authState.getAuthScheme() == null) {CredentialsProvider provider =(CredentialsProvider) context.getAttribute(HttpClientContext.CREDS_PROVIDER);HttpHost httpHost = (HttpHost) context.getAttribute(HttpCoreContext.HTTP_TARGET_HOST);AuthScope scope = new AuthScope(httpHost.getHostName(), httpHost.getPort());Credentials credentials = provider.getCredentials(scope);authState.update(new BasicScheme(), credentials);}}
}

这篇关于Linuk(包含信创Tongweb东方通,AAS金蝶)部署solr的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/225271

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起

Solr 使用Facet分组过程中与分词的矛盾解决办法

对于一般查询而言  ,  分词和存储都是必要的  .  比如  CPU  类型  ”Intel  酷睿  2  双核  P7570”,  拆分成  ”Intel”,”  酷睿  ”,”P7570”  这样一些关键字并分别索引  ,  可能提供更好的搜索体验  .  但是如果将  CPU  作为 Facet  字段  ,  最好不进行分词  .  这样就造成了矛盾  ,  解决方法

Solr部署如何启动

Solr部署如何启动 Posted on 一月 10, 2013 in:  Solr入门 | 评论关闭 我刚接触solr,我要怎么启动,这是群里的朋友问得比较多的问题, solr最新版本下载地址: http://www.apache.org/dyn/closer.cgi/lucene/solr/ 1、准备环境 建立一个solr目录,把solr压缩包example目录下的内容复制

Spring Roo 实站( 一 )部署安装 第一个示例程序

转自:http://blog.csdn.net/jun55xiu/article/details/9380213 一:安装 注:可以参与官网spring-roo: static.springsource.org/spring-roo/reference/html/intro.html#intro-exploring-sampleROO_OPTS http://stati

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

部署若依Spring boot项目

nohup和& nohup命令解释 nohup命令:nohup 是 no hang up 的缩写,就是不挂断的意思,但没有后台运行,终端不能标准输入。nohup :不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,注意了nohup没有后台运行的意思;&才是后台运行在缺省情况下该作业的所有输出都被重定向到一个名为nohup.o

kubernetes集群部署Zabbix监控平台

一、zabbix介绍 1.zabbix简介 Zabbix是一个基于Web界面的分布式系统监控的企业级开源软件。可以监视各种系统与设备的参数,保障服务器及设备的安全运营。 2.zabbix特点 (1)安装与配置简单。 (2)可视化web管理界面。 (3)免费开源。 (4)支持中文。 (5)自动发现。 (6)分布式监控。 (7)实时绘图。 3.zabbix的主要功能

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学