今天看了一下自己的博客网站,发现内容越来越多,搜索内容时无法全文检索,体验极差。
对于这个问题我最先想到的就是【ElasticSearch】数据库简称ES,全文检索这一块ES是目前做的最好的一个了。其次想到的就是MySQL自带的【n-gram模型】,这个模型也可以做全文检索,但这会导致数据库压力过大,只适合少量用户的场景,而且不支持多表全文检索,缺点实在太多,最终还是选择了ES来做全文检索。
n-gram模型
在讲解ES之前我们还是简单的介绍一下MySQL自带的n-gram模型的使用。
首先我们需要在表上面创建全文检索索引:
通过全文检索查询数据
全文检索还有一个全局配置项【ngram_token_size】,这个主要影响中文及英文的内容,如果全文检索主要内容为中文建议使用默认的【ngram_token_size=2】即可。如果是英文,可以在MySQL配置文件中改为1,【ngram_token_size=2】时英文内容搜索将无效。
MySQL全文检索基础使用就这么多了。
ElasticSearch数据库
这里以ElasticSearch最新版【8.8】为例,给大家讲讲最新版的安装、相关配置及基础使用。注意我们安装的是 ES8.8 版本,这个版本自带一个JVM环境,ES从7开始就自带了一个JVM环境,ES7之前的版本需要我们自己安装JVM环境
1 下载安装
我们可以直接进入官网下载源码,官网已经提供了yum及rpm安装教材,这个教材还是比较详细的,大家可以参照一下。我这里以源码的形式进行安装:
1.1 在/usr/local/目录下创建ElasticSearch的安装目录
1.2 进入ElasticSearch安装目录并下载源码
1.3 下载解压缩源码
1.4 进入项目根目录
解压缩后生成 elasticsearch-8.8.1 目录,这里面的就是elasticsearch源码了。
2 ElasticSearch基础配置
elastic的主要配置文件在根目录的【config】目录下,总共有以下三个配置文件:
elasticsearch.yml:主要是es相关配置
jvm.options:jvm相关配置
log4j2.properties:日志相关配置
3 启动ElasticSearch
最新版本的ES不允许我们直接使用root用户运行,所以在启动ES之前我们还需要创建一个ES使用的系统用户
给新用户赋予ES目录的权限:
除此之外,最新版本的ElasticSearch默认情况下启用了用户密码验证,作为初学者可以关闭验证。而且最新版启动后界面上没有显示监听的端口,我们可以自己在elasticsearch.yml文件中指定。
3.1 关闭用户密码验证及指定监听端口
3.2 启动ElasticSearch
上面说过elasticsearch 8 之后不允许以 root 用户启动,所以我们需要切换到之前创建的【es】用户下,如果已经切换到【es】用户可以忽略:
现在我们可以启动elasticsearch了:
如果需要以守护进程的方式启动,只需要加上 -d
如果启动后如果有【Unable to locate appender "rolling_old" for logger config "root"】错误信息,主要原因是我们没有修改 【config/elasticsearch.yml】文件中的日志目录,默认的日志目录不存在或者说当前启动ES 的用户没有权限。我们只要修改【path.logs】选项为【/usr/local/elastic/elasticsearch-8.8.1/logs】即可
启动后,我们就可以通过IP+端口的形式访问ElasticSearch了:
上面的连接打开后如下图所示,表示启动成功:
4 安装管理后台Kibana
ElasticSearch提供了类似phpMyAdmin一样的网页版本的管理后台。安装管理后台比较简单,回到【/usr/local/elastic】目录下,下载源码并解压缩,之后进入源码目录启动管理后台即可。具体步骤如下:
4.1 下载管理后台代码
4.2 解压缩并进入源码目录
4.3 kibana配置目录
kibana配置文件都在源码跟目录下的【config】文件夹下面,其中【kibana.yml】就是主要配置文件。
4.4 启动kibana
如果在root用户下,可以使用【bin/kibana --allow-root】命令启动,--allow-root参数允许使用root用户运行
启动成功之后我们就可以通过IP+端口的方式访问ElasticSearch管理后台,默认端口是5601,完整链接如下:
领取专属 10元无门槛券
私享最新 技术干货