欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于docker 的 elasticstrach安装和基本使用

程序员文章站 2024-03-18 13:36:04
...

elasticstrach 使用

前面我们讲过elasticstrach+kibana安装,本次介绍的是基于docker的elasticsearch的使用。

1. elasticstrach介绍

开源的 Elasticsearch 是目前全文搜索引擎的首选。
Elasticsearch 不支持对中文进行分词建立索引,需要配合扩展ik分词器[elasticsearch-ik]来实现中文分词处理。

2. docker 安装elasticsearch-ik

  • 在拉取docker镜像前,先配置镜像加速,根据以下步骤玩镜像加速配置
# 镜像加速配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
# 修改配置文件
{
  "registry-mirrors": ["https://2xdmrl8d.mirror.aliyuncs.com"]
}
EOF
# 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 拉取elasticsearch-ik分词器镜像
# 拉取ik分词器
sudo docker pull bachue/elasticsearch-ik:6.2.4
  • 使用本地镜像
sudo docker load -i '/home/moluo/Desktop/elasticsearch-ik.tar.gz'
sudo docker image ls
  • 创建容器
sudo docker run -itd --network=host -e ES_JAVA_OPTS="-Xms256m -Xmx256m" --name=esik bachue/elasticsearch-ik:6.2.4
  • 查看运行日志信息
sudo docker logs --since 30m esik  # 查看最近30分钟的日志

sudo docker logs -t --since="2020-01-01T00:00:00" <容器名称/容器ID> # 查看某时间之后的日志

sudo docker logs -t --since="开始时间" --until "结束时间" <容器名称/容器ID> # 查看某时间段日志
  • 当出现以下报错时
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
  • 原因:vm.max_map_count参数,是允许一个进程在内容中拥有的最大数量(VMA:虚拟内存地址, 一个连续的虚拟地址空间),当进程占用内存超过max_map_count时, 直接GG。所以错误提示:elasticsearch用户拥有的内存权限太小,至少需要262144,所以我们需要将原类的65530修改为262144
    max_map_count配置文件写在系统中的/proc/sys/vm文件中,但是我们不需要进入docker容器中配置,因为docker使用宿主机的/proc/sys作为只读路径之一。因此我们在Ubuntu系统下设置一下命令即可:
sudo sysctl -w vm.max_map_count=262144
  • 删除原来的容器,重新创建容器
sudo docker rm esik
sudo docker run -itd --network=host -e ES_JAVA_OPTS="-Xms256m -Xmx256m" --name=esik bachue/elasticsearch-ik:6.2.4
  • 打开浏览器,使用ip:9200进行访问,出现一些界面,那恭喜你,安装成功,接下我们使用postman测试一下查询效果。
    基于docker 的 elasticstrach安装和基本使用
    打开postman(如果没安装postman的同学可以先安装postman)。

3. elasticstarch的基本使用

使用get请求一下json数据,访问IP:9200/_analyze?pretty

	{
	  "text": "中国人"
	}

基于docker 的 elasticstrach安装和基本使用
我们发现原生的elasticsearch-ik的分词对中文的分词效果并不是很友好,中国人就是一个词,却被分成了三个,所以我们需要指定分词器。

	{
	  "text": "中国人",
	  "analyzer": "ik_smart"
	}

基于docker 的 elasticstrach安装和基本使用
得到的结果是比较理想的。除了ik_smart分词器还有其他分词器。

standard 标准分词器,单字切分。上面我们测试分词器时候没有声明analyzer参数,则默认调用标准分词器。
simple 简单分词器,按非字母字符来分割文本信息

以上这两个分词器相对于中文来说是不太友好的,所以我们需要使用ik分词器。

ik_max_word:会将文本做最细粒度的拆分;尽可能多的拆分出词语

ik_smart:会做最粗粒度的拆分;已被分出的词语将不会再次被其它词语占有