# 全文检索部署手册

# 网络拓扑

产品支持单机和集群两种部署方式,拓扑示意如下

# 单机模式

  • 保证基本功能可用,面向小型客户(同时在线1000人以下)
  • 资源成本需求低,只需要一台服务器,8C16G

1737006092487.png

# 集群模式

  • 面向中大型客户(同时在线1000人以上)
  • 满足高性能、具备高可用的要求,至少需要3台服务器,8c16G以上

1737006822236.png

# 硬件配置参考

在线用户数 微服务名称 非信创单节点配置推荐 信创单节点配置推荐
200以下 全文检索 CPU8核以上/内存16G以上 CPU12核以上/内存20G以上
200~500 全文检索 CPU8核以上/内存16G以上 CPU12核以上/内存20G以上
500~1000 全文检索 CPU8核以上/内存16G以上 CPU12核以上/内存20G以上
1000~3000 全文检索 CPU16核以上/内存24G以上 CPU20核以上/内存32G以上
3000~5000 全文检索 CPU16核以上/内存32G以上 CPU20核以上/内存48G以上
5000~10000 全文检索(建议集群) CPU16核以上/内存32G以上 CPU20核以上/内存48G以上

# 概要说明

  • 使用与协同应用服务版本一致的全文检索服务;

  • 全文检索服务支持Windows、Linux系统;

  • 使用全文检索必须部署独立的全文检索服务;

  • 使用全文检索安装程序安装全文检索的独立服务,建议安装在独立的服务器上。

# 单机部署

# 安装

  • 从商务网盘下载独立服务安装包 1.IndependentService.zip,上传到服务器并解压

  • 执行./SeeyonSearchserviceInstall.sh|bat运行安装程序;

  • 开始安装,选择安装路径,如:/data/Seeyon/SearchService,依次点击下一步,完成安装;

  • 注意不能部署于/root或者其子目录下(影响全文检索服务启动)

# 配置

  • 第一步:登录系统管理员账号,进入"全文检索设置"界面,查看并记录下服务注册码。

  • 第二步:若已安装S1,可在S1的"服务启停配置"中,进行全文检索配置:

search1

search2

server.ip:全文检索服务器的 ip地址,分离部署需要设置实际ip,如10.5.5.160

a8.server.url:协同服务的访问地址,注意带应用上下文/seeyon。

regsit.code: 注册码,需要与系统管理员账号中的服务注册码保持一致

server.port:全文检索服务的端口,默认9700,如果是分离部署需要开放端口让协同应用服务器可以访问

path_data:索引数据目录,默认是../base/data(即Searchservice/ES/base/data),如需修改需要设置绝对路径(不建议放在挂载盘上)

  • 第三步:若未安装S1,将注册码配置在全文检索服务安装目录下Searchservice/config/application.properties文件中,并调整其他配置参数:

server.ip:全文检索服务器的 ip 地址,需要设置实际ip,如10.5.5.160

a8.server.url:协同服务的访问地址,注意带应用上下文/seeyon

regsit.code: 注册码,需要与系统管理员账号中的服务注册码保持一致

server.port:全文检索服务的端口,默认9700,如果是分离部署需要开放端口让协同应用服务器可以访问

path_data:索引数据目录,默认是../base/data(即{全文检索安装目录}\ES\base\data),如需修改需要设置绝对路径(不建议放在挂载盘上)

  • 第四步:OA相关配置

在协同系统参数设置中需要把index.index_a8Ip设置成协同的实际ip。

1737424755183.png

如果没有图形化窗口,在{OA安装路径}/base/conf/plugin.properties文件中单独增加一行配置,ip配置对应该节点的ip:index.index_a8Ip = 10.5.5.221

  • 第五步:进行协同系统分区设置

进入系统管理员-系统分区设置中,修改所有分区,配置“全文检索网络映射路径”

此配置需要配置全文检索服务器上能够访问到upload的路径!具体操作如下

1、如果全文检索服务和协同系统分区在同一磁盘,直接配置upload的绝对路径即可。

2、如果是如果是分离部署,需要将协同系统分区所在磁盘阵列挂载到全文检索服务器(推荐)或者将协同系统所在的分区文件夹进行网络> 共享后配置挂载后或者共享后的路径, 如SMB协议: \\IP地址\共享名,或使用NFS协议

# NFS挂载命令
mount -t nfs -o sync,noac 附件服务器IP:NFS共享路径  /mnt/upload

用root用户,编辑 vi /etc/fstab, 在最后面加入:

附件服务器IP:NFS共享路径  /mnt/upload nfs sync,noac 0 0

注意事项:

1、全文检索服务启动时,默认需要占用 16161 和 1099 两个端口,如果端口已被其它程序或者服务进程占用(注意避免和文件预览服 务 officetrans 进程的端口冲突!),请在全文检索服务配置文件 config/application.properties 中配置为其他可用的端口,无对应配置项表示使用默认端口,以下为配置示例:

activemq.port=16161

activemq.rmi.port=1099

2、全文检索服务器需要对 OA 服务器开放 activemq.port=16161 端口或其对应的其它自定义端口!

# 服务启停

  • 使用S1启动全文检索服务,或使用以下shell脚本启动:

Linux执行【全文检索目录】/startup.sh

 ./startup.sh
  • 使用S1停止全文检索服务,或使用以下shell脚本停止:

Linux执行【全文检索目录】/shutdown.sh,执行命令示例:

 ./shutdown.sh

# 索引重建

全文检索该版本针对检索匹配效果做了优化,增加了如下新特性

需要进行重建,全文检索服务安装程序提供了重建索引工具,位于安装目录下的 es-upgrade 文件夹下。

# 工具使用说明

  • 第一步,启动运行升级工具

进入全文检索服务安装目录下的es-upgrade 文件夹下,linux 系统下运行 startup.sh 脚本。启动后的升级程序界面如下:

启动后的界面为升级配置界面,具体说明请参照升级配置说明。

  • 第二步,环境检查

完成第一步启动界面的相关配置后,点击【下一步】按钮,进入到升级环境检查界面:

点击【下一步】,执行当前界面的升级环境检查。根据检查结果的处理提示,进行相应问题的处理后,接着点击【下一步】继续环境检查,直到所有的检查项都通过,如下:

  • 第三步,索引重建

在完成上一步【环境检测】处理后,进行【下一步】操作,进入当前的索引重建界面,点击【下一步】,开始索引重建处理,直到处理完成:

重建索引完成后,点击【完成】按钮,结束升级程序即可。然后正常进行索引服务的启动即可进行全文检索服务的检索验证和使用。

# 脚本工具

对于不支持可视化的Linux系统,提供了shell版本的升级脚本 es-upgrade.sh,位于全文检索服务安装根目录下的es-upgrade 目录下。

在登录Linux系统后,进入es-upgrade 目录下,编辑脚本需要的配置文件 es-upgrade.properties,添加或者修改相应的配置项,如下 图,各配置项对应的说明,请参照升级配置项说明

在当前目录下运行 es-upgrade.sh 脚本文件,直到命令行提示索引重建完成,过程中检测到正在运行的elasticsearch服务,提示关闭>

ES进程,请选择是(y):

# 配置说明

  • ES启动用户名 Linux系统下需要的配置项,Linux系统用户名,默认为es_search,不允许修改。用于启动elasticsearch服务,因为elasticsearch本身的安全机制的限制,不允许直接使用root用户启动。

  • ES启动用户组 Linux系统下需要的配置项,Linux系统用户名所属用户组,默认为es_search,不允许修改。

  • ES路径 新安装的8.2版本的全文检索服务的ES部署路径,位于全文检索服务安装目录下的 ES/elasticsearch,请选择到该文件夹。

# 集群部署

# 概要说明

如果是首次使用全文检索,首先正常部署单机全文检索,正常配置,并且测试能够正常使用(新发协同能够检索到),如果是已有全文检索则保证现有节点功能正常,新发数据能正常检索;

# 系统配置

部署ES前需要对操作系统配置进行调整:

  1. 调整最大文件描述符和最大进程数限制:
vim /etc/security/limits.conf
es_search -  nofile  65535
es_search -  nproc   4096
  1. 禁用swap
swapoff -a
  1. 调整可创建的最大虚拟内存区域的数量
vim /etc/sysctl.conf
vm.max_map_count=262144

# 部署配置(至少3个节点才能满足高可用)

**第一步:**停止全文检索服务后,复制现有全文检索作为集群节点二、节点三。

注意:

  1. 复制时注意全文检索已经停止
  2. 启动前,保证全文检索目录下Searchservice/ES/base数据一致,否则可能导致集群创建失败

**第二步:**需修改每个节点配置如下: Searchservice\ES\elasticsearch\config\elasticsearch.yml 见模板:

#节点 1 的配置信息:
#集群名称,节点之间要保持一致
cluster.name: es-cluster
path.data: ../base/data
#节点名称,集群内要唯一
node.name: node1
node.master: true
node.data: true
#ip 地址
network.host: 192.168.0.202
#http 端口
http.port: 9201
#tcp 监听端口
transport.tcp.port: 9301
discovery.seed_hosts: ["192.168.0.202:9301", "192.168.0.202:9302", "192.168.0.202:9303"]
#discovery.zen.fd.ping_timeout: 1m
#discovery.zen.fd.ping_retries: 5
#集群内的可以被选为主节点的节点列表
cluster.initial_master_nodes: ["node1", "node2", "node3"]
#跨域配置
#action.destructive_requires_name: true
http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.ml.enabled: false

参数说明(其余未说明的无需修改,参照上面配置模板):

  • cluster.name: 填写集群的名称,需要与config/application.properties 中保持一致
  • node.name: 节点名称,每一个节点名称不能一样,例如,节点1填写:node-1001,节点3填写:node-1002
  • network.host: 当前节点所在服务器ip
  • discovery.seed_hosts: 集群中每个ES的地址
  • cluster.initial_master_nodes: 集群的所有node

**第三步:**修改Searchservice\search\searchservice\config\application.properties 中下列配置项

#Tue Dec 17 15:51:42 CST 2019
#Tue Dec 17 15:51:42 CST 2019
##1.微服务配置项 ##

#{text} 服务ID readOnly
server.id=INDEX_SERVICE

#{text} 服务名称 readOnly
server.name=全文检索

#{text} 全文检索服务器IP
server.ip=10.3.11.47

#{text} A8访问地址
a8.server.url=http://10.3.11.47/seeyon

#{text} 全文检索配置中心注册码
regist.code=7d3b6f33-1063-4f26-a17e-f82bd03be411

##2.全文检索配置项##

#{text} 服务上下文路径 readOnly
server.servlet.context-path=/index

#{text} 服务监听端口 readOnly
server.port=9700

#{text} 索引数据目录 readOnly
path_data=../base/data

#{text} ES 集群IP地址,默认不开启配置项,集群模式情况下展开 readOnly
es_ips=192.168.0.202,192.168.0.202,192.168.0.202

#{text} ES 集群端口,默认 9200 readOnly
es_ports=9201,9202,9203

#{text} ES 集群端口,默认 9300 readOnly
es_ports_search=9301,9302,9303

#{text} ik分词器热词请求地址白名单,不配置时不做校验 readOnly
#ik_ext_dict.request.hosts=127.0.0.1,127.0.0.1,127.0.0.1

#{text} ES 集群名,默认 elasticsearch readOnly
cluster.name=my-elasticsearch

#{text} ES 索引别名,searchservice 服务调用时使用,since v8.2 readOnly
index_lib=seeyon_es_alias

#{text} ES 索引实际名称,searchservice 请求 ES 判断是否已升级时使用,since v8.2 readOnly
index_lib_real=seeyon_es_v2

#{text} 检索时完全匹配度,大于 0 的数值,0 表示完全匹配,数值越大,完全匹配度越低 readOnly
search.matchPhrasePrefix.slop=200

## 优化配置 ##

# 禁止upload文件解析结果缓存处理 readOnly
file_cache_enable=false

# flink 运行环境并发数 readOnly
core_num=8

# flink 检索历史统计处理并发数 readOnly
flink.source.his.parallelism=8

# flink 索引保存处理并发数 readOnly
#flink.source.parallelism=8

# flink es保存索引并发 readOnly
#flink.sink.parallelism=8

## 以下配置为可选配置,服务中均有默认值,一般情况下无需打开配置 ##

# OA 连接 ActiveMQ 服务器时的超时时间 readOnly
#activemq.connectResponseTimeout=5000

# 指定在连接中缓存的会话数量大小 readOnly
#activemq.sessionCacheSize=5

# 指定在接收消息时的最长等待时间 readOnly
#activemq.receiveTimeout=5000

# activemq 监听端口 readOnly
#activemq.port=16161

# activemq 索引消息队列的未消费最大消息数目 readOnly
#activemq.queueSize.limit=1000

# activemq 索引消息队列未消费消息数目达到或者超过限制后,循环等待的时长 readOnly
#activemq.producer.sleepMilliseconds=5000

# activemq rmi 端口 readOnly
#activemq.rmi.port=1099

# 发送消息的超时时间,用于指定在发送消息时的最长等待时间 readOnly
#activemq.sendTimeout=5000

# OA服务索引重试保存任务开始执行的延时时间 readOnly
#index.redoJob.delay=18000000

# OA服务索引重试保存任务定时执行的周期 readOnly
#index.redoJob.period=18000000

# OA服务 leveldb 失效索引数据删除任务开始执行的延时时间 readOnly
#index.delExpiredJob.delay=0

# OA服务 leveldb 失效索引数据删除任务执行的周期 readOnly
#index.delExpiredJob.period=18000000

# OA服务 leveldb 索引数据的达到失效状态的时长 readOnly
#index.leveldb.expiredDuration=172800000

# OA服务向 BlockingQueue 添加消息时阻塞的最长时间,超过该时间,则放弃添加 readOnly
#index.addBlockingQueue.timeout=7200000

# AI服务 ip port http://x.x.x.x:port / http://x.x.x.x readOnly
ai.server.url = http://x.x.x.x
# 全量同步ssh通道 readOnly
ai.server.ssh.url = http://127.0.0.1:6006
# Ai服务 全量同步方式 0 走AI算法服务,1 走ssh通道 默认走ssh通道
ai.index.sync.mode = 1
# ai服务 全量同步没批条数 readOnly
ai.index.sync.datas.size = 100
#ai服务 全量同步线程数 readOnly
ai.index.sync.thread.size = 2
#ai服务 是否需要重新进行全量同步: 0 不再次进行全量同步,1 重新进行全量同步 readOnly
ai.index.again.sync = 0
# ai服务,从某条数据开始重新开始全量同步 readOnly
ai.index.again.sync.from.id = 0

#{text} 自定义分词文件的存储路径,集群情况使用,多节点需要共享该目录 readOnly
mydict_path=D:/1seeyonApp/v90_425/Seeyon/mydic

# 是否AI同步节点 readOnly
ai.isSyncNode = false

参数说明(其余参数配置参照实施手册):

以下四个配置与ES配置文件内保持一致:Searchservice\ES\elasticsearch\config\elasticsearch.yml

  • es_ips= ES各个节点的ip
  • es_ports= ES各个节点的端口
  • es_ports_search= ES各个节点的端口
  • cluster.name= ES集群名称
  • 以下两个配置需要新增:
    • mydict_path= 分词文件路径,多个节点需要共享同一个目录
    • ai.isSyncNode = 全文检索多个节点中,只有一个节点的该配置项配置未true,其余节点均配置false。

修改好配置以后,启动进行验证,由于ES开启集群后,不能使用默认的启动脚本进行启动,开启集群后,启动顺序如下:

1、先启动原有的ES,再启动新加的节点,在Searchservice\ES\elasticsearc目录下启动所有节点的es

  • windows 系统下:
.\bin\elasticsearch.bat
  • Linux 系统下(使用普通用户启动,如:es_search)
# 修改ES目录属主
chown -R es_search:es_search Searchservice/ES
# 切换普通用户
su - es_search
# 进入ES/elasticsearc目录,启动启动ES
./bin/elasticsearch -d

启动后通过命令 curl —X GET http://192.168.0.202:9201/_cluster/health?pretty查看状态

1731059673867.png

节点数必须是3个才对,status:green

2、启动全文检索 通过Searchservice/search/searchservice/startup.sh|bat,启动所有searchservice节点,然后测试功能即可。 登录系统管理员-微服务设置-全文检索-基础设置,查看注册节点是否正确

1725951260868.png

编撰人:wangyxyf