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测试一下查询效果。
打开postman(如果没安装postman的同学可以先安装postman)。
3. elasticstarch的基本使用
使用get请求一下json数据,访问IP:9200/_analyze?pretty
{
"text": "中国人"
}
我们发现原生的elasticsearch-ik的分词对中文的分词效果并不是很友好,中国人就是一个词,却被分成了三个,所以我们需要指定分词器。
{
"text": "中国人",
"analyzer": "ik_smart"
}
得到的结果是比较理想的。除了ik_smart分词器还有其他分词器。
standard 标准分词器,单字切分。上面我们测试分词器时候没有声明analyzer参数,则默认调用标准分词器。
simple 简单分词器,按非字母字符来分割文本信息
以上这两个分词器相对于中文来说是不太友好的,所以我们需要使用ik分词器。
ik_max_word:会将文本做最细粒度的拆分;尽可能多的拆分出词语
ik_smart:会做最粗粒度的拆分;已被分出的词语将不会再次被其它词语占有
来源:CSDN
作者:py臭屁虫
链接:https://blog.csdn.net/qq_31065041/article/details/104576847