全文搜索独立部署

html

需要先部署短说系统后,再部署全文搜索

一、安装包

全文搜索独立部署程序使用java开发,打包成jar包,application.yml是配置文件,两个文件要放在同一个目录下

二、环境搭建

1、配置java运行环境

1) 下载java

由于jar包是java11开发的,所以需要jdk11包,官网地址:https://www.oracle.com/java/technologies/downloads/#java11

2) 解压缩到相应目录

比如

tar -xzvf jdk-11.0.14_linux-x64_bin.tar.gz -C /usr/local/
mv /usr/local/jdk-11.0.14 /usr/local/jdk-11

3) 配置环境环境变量

vim /etc/profile.d/java.sh,添加下面两行

export JAVA_HOME=/usr/local/jdk-11
export PATH=$JAVA_HOME/bin:$PATH

保存之后执行命令:source /etc/profile,使配置立即生效

4) 查看是否生效

java --version

返回版本号就算生效

2、创建数据库表

在短说数据库里执行以下sql

DROP TABLE IF EXISTS `osx_fulltext_content`;
CREATE TABLE `osx_fulltext_content` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `code` varchar(64) NOT NULL DEFAULT '' COMMENT '网站code',
  `title` varchar(64) NOT NULL DEFAULT '' COMMENT '标题',
  `content` varchar(256) NOT NULL DEFAULT '' COMMENT '部分内容',
  `cid` int(11) NOT NULL DEFAULT '0' COMMENT '内容ID',
  `author` varchar(32) NOT NULL DEFAULT '' COMMENT '作者',
  `author_id` int(11) NOT NULL DEFAULT '0' COMMENT '作者ID',
  `content_create_time` int(11) NOT NULL DEFAULT '0' COMMENT '内容创建时间',
  `content_update_time` int(11) NOT NULL DEFAULT '0' COMMENT '内容更新时间',
  `total` int(11) NOT NULL DEFAULT '0' COMMENT '被搜索量',
  `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
  `update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `code_idx` (`code`),
  KEY `cid_idx` (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci COMMENT='全文搜索内容表' ROW_FORMAT=DYNAMIC;

DROP TABLE IF EXISTS `osx_fulltext_recharge_log`;
CREATE TABLE `osx_fulltext_recharge_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `code` varchar(64) NOT NULL DEFAULT '' COMMENT '网站code',
  `type` varchar(16) NOT NULL DEFAULT '' COMMENT '充值类型',
  `num` int(11) NOT NULL DEFAULT '0' COMMENT '充值数量',
  `start_num` int(11) NOT NULL DEFAULT '0' COMMENT '充值前数量',
  `end_num` int(11) NOT NULL DEFAULT '0' COMMENT '充值后数量',
  `remark` varchar(128) NOT NULL DEFAULT '' COMMENT '备注',
  `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `code_idx` (`code`),
  KEY `create_time_idx` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci COMMENT='全文搜索充值记录表' ROW_FORMAT=DYNAMIC;

DROP TABLE IF EXISTS `osx_fulltext_search_log`;
CREATE TABLE `osx_fulltext_search_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `code` varchar(64) NOT NULL DEFAULT '' COMMENT '网站code',
  `type` varchar(32) NOT NULL DEFAULT '' COMMENT '操作类型',
  `content` text NOT NULL COMMENT '搜索内容',
  `username` varchar(32) NOT NULL DEFAULT '' COMMENT '用户',
  `uid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID',
  `take_time` int(11) NOT NULL DEFAULT '0' COMMENT '搜索耗时,毫秒',
  `total` int(11) NOT NULL DEFAULT '0' COMMENT '搜索结果数',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '搜索状态',
  `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `code_idx` (`code`),
  KEY `type_idx` (`type`),
  KEY `create_time_idx` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci COMMENT='全文搜索日志表' ROW_FORMAT=DYNAMIC;

DROP TABLE IF EXISTS `osx_fulltext_upload_log`;
CREATE TABLE `osx_fulltext_upload_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `code` varchar(64) NOT NULL DEFAULT '' COMMENT '网站code',
  `content` text NOT NULL COMMENT '上传内容',
  `status` tinyint(11) NOT NULL DEFAULT '0' COMMENT '状态',
  `take_time` int(11) NOT NULL DEFAULT '0' COMMENT '耗时',
  `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `code_idx` (`code`),
  KEY `create_time_idx` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci COMMENT='全文搜索上传日志表' ROW_FORMAT=DYNAMIC;

DROP TABLE IF EXISTS `osx_fulltext_website`;
CREATE TABLE `osx_fulltext_website` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `code` varchar(64) NOT NULL DEFAULT '' COMMENT '网站code',
  `num` int(11) NOT NULL DEFAULT '0' COMMENT '剩余数量',
  `content_num` int(11) NOT NULL DEFAULT '0' COMMENT '内容数',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '网站状态',
  `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
  `update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `code_idx` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci COMMENT='全文搜索站点表' ROW_FORMAT=DYNAMIC;

3、部署ElasticSearch

3.1 docker部署

如果服务器无法安装docker或者不允许使用docker的话,可以用《3.2编译安装》来部署

3.1和3.2是或的关系

1) 安装ElasticSearch

服务器内存4G以上,否则可能无法运行。建议使用docker部署,使用7.17.18版本

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.18 
//docker pull elasticsearch:7.17.18  //从2024年4月15日起,不再使用7.9,改用7.17.18  
//也可直接执行下方一行run,不执行pull也会自动pull
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.18
2) 安装中文分词插件elasticsearch-analysis-ik

可以参考:https://github.com/medcl/elasticsearch-analysis-ik#install

以docker安装为例:

执行docker exec -it elasticsearch /bin/bash进入容器

执行命令

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.18/elasticsearch-analysis-ik-7.17.18.zip
//从2024年4月15日起使用7.17.18
//如果github.com连接超时,无法安装,可以使用下面的命令
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/7.17.18

退出容器之后再重启容器docker restart elasticsearch,即可完成

3.2 编译安装

1) 解压,重命名
tar -xvf elasticsearch-7.17.18-linux-x86_64.tar.gz -C /usr/local
mv /usr/local/elasticsearch-7.17.18 /usr/local/elasticsearch
2) 创建一个elastic用户
useradd elastic
3) 安装分词器
cd /usr/local/elasticsearch
./bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/7.17.18
4) 编辑配置文件
vim config/elasticsearch.yml

第17,23,61行解除注释

第33,37,56,70,75行和最后一行改成下列

33行

path.data: /usr/local/elasticsearch/data

37行

path.logs: /usr/local/elasticsearch/logs

56行

network.host: 0.0.0.0

70行

discovery.seed_hosts: “127.0.0.1”,”内网IP”

75行

cluster.initial_master_nodes: “node-1”

最后一行

ingest.geoip.downloader.enabled: false

5) 编辑jvm
vim config/jvm.options

第31,32行就行修改(前面不要有空格) -Xms8g -Xmx8g

6) 编辑sysctl.conf
vim /etc/sysctl.conf

在最后添加一行 vm.max_map_count=655360 保存后,输入

sysctl -p
7) 编辑 limits.conf
vim /etc/security/limits.conf

在最后添加这几行

* soft    nofile    65536
* hard    nofile    65536
* soft    nproc    4096
* hard    nproc    4096
8) 设置权限
chown -R elastic:elastic /usr/local/elasticsearch
9) 启动

切换用户 elastic

su elastic

启动elasticsearch

/usr/local/elasticsearch/bin/elasticsearch

同时打开新的窗口,访问下列,看看有内容返回

curl 127.0.0.1:9200
10) 配置自启动
vim /etc/systemd/system/elasticsearch.service
[Unit]
Description=Elasticsearch
Documentation=https://www.elastic.co
After=network.target
Requires=network.target

[Service]
Type=simple
User=elastic
Group=elastic

# 关键环境变量(请根据实际路径修改)
Environment="ES_HOME=/usr/local/elasticsearch"
Environment="ES_PATH_CONF=/usr/local/elasticsearch/config"
Environment="ES_JAVA_HOME=/usr/local/jdk-11"
Environment="PID_DIR=/usr/local/elasticsearch/run"

# 工作目录必须设置
WorkingDirectory=/usr/local/elasticsearch

# 使用绝对路径执行命令
ExecStart=/bin/bash -c '${ES_HOME}/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid'

# 资源限制
LimitNOFILE=65536
LimitMEMLOCK=infinity
LimitNPROC=4096

# 重启策略
Restart=always
RestartSec=10s
# 日志配置
StandardOutput=journal
StandardError=inherit

# 安全设置
PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

保存退出后

systemctl daemon-reload

启动:

systemctl start elasticsearch

4、安装redis

如果使用宝塔部署,可以直接使用宝塔安装redis

或者可以使用docker部署redis容器,参考:https://hub.docker.com/_/redis

5、修改配置文件

application.yml为配置文件,根据自己的配置自行修改

只需要修改一下参数:

port:程序运行端口号

url:数据库地址和数据库名称

username:数据库用户名

passowrd:数据库密码

redis

host:redis服务器地址

es

host:ElasticsSearch服务器地址和端口号

6、运行java包

为了防止系统原因导致java程序意外退出,强烈建议使用supervisor守护进程,具体可以参考https://www.yuque.com/thisky/ulwd0g/thisxx#rgcho

其中执行命令换成 java -jar fulltext-0.0.1-SNAPSHOT.jar

另外也可以直接运行程序,有进程意外中断的风险,如果进程中断,需要再次执行以下命令。

进入jar包所在目录,执行命令:

nohup java -jar fulltext-0.0.1-SNAPSHOT.jar >> fulltext.log 2>&1 &

三、后台配置

在管理后台->扩展模块->全文搜索设置,服务方式为“私有部署”,私有部署搜索引擎地址改为本地相应的地址即可

客服微信二维码
咨询客服小番茄
公众号二维码
扫码关注公众号