热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Elasticsearch入门篇记录

环境:Centos7;jdk8;Elasticsearch6.4.3;Postman全局:{{eshost}}

环境:Centos 7;jdk 8;Elasticsearch 6.4.3;Postman全局:{{eshost}}:http://ip:9200

简介


Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。Lucene是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

但Lucene 只是一个库,必须要懂一点搜索引擎原理的人才能用的好,所以后来又有人基于 Lucene 进行封装,写出了 Elasticsearch。

Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,通过http请求就能进行操作了,从而让全文搜索变得简单。

所以集成Elasticsearch,也就是我们通过内置api操作ES服务器上的数据。

想要深入地理解ElasticSearch的工作原理,特别是索引和查询这两个过程,可以去查阅下Lucene的工作原理。

 

Elasticsearch一些内部用词概念:

【索引Index】可以先简单理解为:存放数据的地方,类似mysql中的一个库

【类型Type】可以先简单理解为:定义数据结构,类似mysql中的一个表

【文档Document】可以先简单理解为:数据,类似mysql中的一个表中的一条条数据

 

搭建


0,安装Jdk:yum install java-1.8.0-openjdk

 

1,安装Elasticsearch

     法一:elasticsearch官方网页下载:https://www.elastic.co/cn/downloads/elasticsearch

     法二:使用wget下载命令:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz

 

2,解压到 /usr/local:tar -zxvf elasticsearch-6.4.3.tar.gz -C /usr/local

 

3,运行Elasticsearch,执行命令:./bin/elasticsearch,后面加上“-d”后台运行

Elasticsearch 要求不能使用超级用户root运行,这里建立一个testuser账号

# 创建testuser账户:adduser testuser

# 修改密码:passwd testuser123

给testuser用户elasticsearch目录的授权,切换至elasticsearch目录,并以testuser用户运行

重新执行启动命令

如没有error,应该就启动成功了

 

4,新开一个终端,用curl访问验证:curl 'http://localhost:9200/?pretty'

查看端口会发现,启了9200和9300端口。9300是tcp通讯端口,集群间和TCPClient都走的它,9200是http协议的restful接口

 

5,远程访问服务器Elasticsearch节点信息

由于本次安装在远程linux主机上,故需要通过配置和开放防火墙9200端口

输入远程linux主机的公网ip,端口号为9200,显示无法访问

配置linux主机的防火墙,开放9200端口命令:

iptables -I INPUT -p tcp --dport 9200 -j ACCEPT

iptables-save

 

搭建过程可能会遇到的问题:

[问题1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]

报错描述:文件描述符太低

解决办法:切换到root用户,修改/etc/security/limits.conf

su root

vim /etc/security/limits.conf

在文末加入:

* soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096

输入命令:exit,切换回testuser用户,启动elasticsearch

 

[问题2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

报错描述:max_map_count 的值是指一个进程最多可用于的内存映射区(memory map areas),在调用malloc会用到,由mmap/mprotect生成。

解决办法:切换到root用户,修改配置/etc/sysctl.conf

su root

vim /etc/sysctl.conf

在文末加入:

vm.max_map_count=655360

然后使其生效

sysctl -p

输入命令:exit,切换回testuser用户,启动elasticsearch

 

[问题3]:  有时候启动elasticsearch时候会提示内存不足,然后启动不了,这时候可以改小jvm最小内存

解决办法:

cat config/jvm.options

修改:

-Xms1g 改成 -Xms512m

重新启动elasticsearch

 

[问题4]:   ERROR: [1] bootstrap checks failed[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured.

解决办法:修改elasticsearch.yml文件

修改:

将 #cluster.initial_master_nodes: ["node-1", "node-2"]

修改为 cluster.initial_master_nodes: ["node-1"]

重新启动elasticsearch

 

[问题5]:   [INFO][Ko.e.c.r.a.DiskThresholdMonitor] [ZAds5FP] low disk watermark [85%] exceeded on [ZAds5FPeTY-ZUKjXd7HJKA][ZAds5FP] [/opt/elasticsearch-6.2.4/data/nodes/0] free: 1.2gb[14.2%], replicas will not be assigned to this node

报错描述:内存空间不够

解决办法:

#调整jvm内存大小

vi bin/elasticsearch

ES_JAVA_OPTS="-Xms512m -Xmx512m"

重新启动elasticsearch

 

[问题6]:   启动子节点报错Exception in thread "main" java.nio.file.AccessDeniedException

报错描述:testuser不具备文件权限不足而被拒绝执行

解决办法:给testuser用户添加slave的elasticsearch目录的授权

//  chown -R 用户名 文件(目录)名

chown -R testuser /usr/local/salve1/elasticsearch-6.4.3/

重新启动elasticsearch

 

创建一个索引


直接通过请求,创建一个简单的索引

备注:keyword时不参与分词的,必须全匹配

 

查询全部索引


 

 

给索引post插入数据


 

 

查询数据


 

 

编辑数据


注意:Elasticsearch会先把:如下id为2的数据删掉,再新增 

 

中文分词


中文分词使用IK分词效果比较好,推荐一个开源的IK分词器:

https://github.com/medcl/elasticsearch-analysis-ik

按照readme提示,演示es版本是6.4.3,直接用一下命令安装:

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.3/elasticsearch-analysis-ik-6.4.3.zip

 

上面的这个analyzer可以替换成ik_max_word,可以ik_smart效果是不同的,ik_max_wordik_smart更加细分

所以在上面创建索引指定分词时,增加中文分词配置效果是最好的:

  •  "analyzer": "ik_max_word",
  • "search_analyzer": "ik_smart"

 

Elasticsearch-Head插件介绍


elasticsearch-head是一个界面化的集群操作和管理,可用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。你可以通过插件把它集成到es服务器(首选方式),也可以把elasticsearch-head项目下载下来,本地启动(需要处理跨域问题)。

elasticsearch-head 插件的安装在 Linux 和 Windows 没什么区别,安装之前确保当前系统已经安装 nodejs 即可。

下面是本地启动elasticsearch-head项目:

 

一,Elasticsearch分布式配置

1,修改主节点配置文件,vim config/elasticsearch.yml

#添加一下配置

cluster.name: kobe

node.name: master

node.master: true

重启master服务

2,修改子节点配置文件,vim config/elasticsearch.yml

cluster.name: kobe

node.name: slave1

http.port: 9800

#设置主动发现主节点地址

discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

重启slave服务;如果提示id重复,删除slave1文件夹下的data文件夹下的节点数据,然后重启即可

 

二,启动Elasticsearch-Head

方式一:Elasticsearch服务器安装插件

方式二:Chrome中安装插件

方式三:elasticsearch-head项目下载下来,本地启动

这里只记录方式三:

git clone git://github.com/mobz/elasticsearch-head.git

cd elasticsearch-head

npm install  或者cnpm install(需要安装淘宝镜像)

npm run start

打开浏览器 http://localhost:9100/

 

可能出现的问题:Failed to load http://192.168.0.191:9200/: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9100' is therefore not allowed access.

问题描述:无法正常连接到elasticsearch服务,这是因为elasticsearch服务与elasticsearch-head之间可能存在跨越

解决:修改elasticsearch配置即可,在elastichsearch.yml中添加如下命名即可:

#allow origin

http.cors.enabled: true

http.cors.allow-origin: "*"

连接成功显示:

备注:较粗的是主分片,细线的是备份分片

 

 


参考文档:

终于有人把Elasticsearch原理讲透了!

Mastering Elasticsearch(中文版)


推荐阅读
author-avatar
x1996y
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有