Elasticsearch入门及技术指南

简介

       Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、 分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将 对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

应用场景

维基百科,类似百度百科
The Guardian (国外新闻网站)
Stack Overflow (国外的程序异常讨论论坛)
GitHub (开源代码管理)
电商网站
日志数据分析
商品价格监控网站
BI 系统,商业智能
站内搜索(电商,招聘,门户,等等),
IT 系统搜索( OA CRM ERP ,等等),
数据分析( ES 热门的一个使用场景)

功能

分布式的搜索引擎和数据分析引擎
全文检索,结构化检索,数据分析
对海量数据进行近实时的处理

特点

1. 大型分布式集群
2. 功能强大
3. 部署简单
4. 能够替代数据库的不足之处

安装部署

      一般在linux系统安装,推荐使用docker安装(参考《Docker入门及技术指南》https://blog.csdn.net/yan_dk/article/details/89427641),

1.首先,取得Elasticsearch镜像

docker pull elasticsearch:7.12.1

2. 创建 es 文件目录以及创建配置文件
mkdir /docker/es
mkdir /docker/es/conf
mkdir /docker/es/data
mkdir /docker/es/plugins
# chmod -R 777 es
 
建立文件/docker/es/conf/elasticsearch.yml
# touch /docker/es/conf/elasticsearch.yml
 
cluster.name: my-application #集群名称 
node.name: node-1 #节点名称 #数据和日志的存储目录 
path.data: /usr/share/elasticsearch/data 
path.logs: /usr/share/elasticsearch/logs 
##设置绑定的ip,设置为0.0.0.0以后就可以让任何计算机节点访问到了 
network.host: 0.0.0.0 
http.port: 9200 #端口 
##设置在集群中的所有节点名称,这个节点名称就是之前所修改的,当然你也可以采用默认的也 行,目前 是单机,放入一个节点即可 
cluster.initial_master_nodes: ["node-1"]
3. 构建容器
docker run -p 9200:9200 -d --name es -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -v /docker/es/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /docker/es/data:/usr/share/elasticsearch/data -v /docker/es/plugins:/usr/share/elasticsearch/plugins --privileged=true elasticsearch:7.12.1

4.查看运行状态、日志

# docker ps

# docker logs es

上述发现报错

解决:
1. 修改配置 sysctl.conf
# vi /etc/sysctl.conf
2. 在尾行添加以下内容
vm.max_map_count=655300
3. 执行命令
# sysctl -p
4. 重启es
docker start es
# docker logs es
查看日志,错误信息没有了。
 
浏览器访问http://ip:9200,见下图,已能正常访问。
 

安装kibana

Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。

我理解,如果把ES比作mysql数据库,那kibana就相当于Navigate之类的数据库客户端工具。

1.获取kibana镜像

# docker pull kibana:7.12.1
2.  创建 kibana 文件目录以及创建配置文件
mkidr /docker/kibana
mkdir /docker/kibana/conf
touch /docker/kibana/conf/kibana.yml
 
 
server.name: kibana 
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://你的es地址:9200"] 
xpack.monitoring.ui.container.elasticsearch.enabled: true

查看docker的es的ip地址

# docker inspect es

 

修改上述ip地址为图示的172.17.0.3 

3.构建kibana的容器

docker run -p 5601:5601 -d --name kibana -v /docker/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml --privileged=true kibana:7.12.1

查看docker容器状态

 # docker ps

 

 4.上述正常后,访问浏览器http://ip:5601,如下图

说明正常安装了kibana 。

安装IK分词器插件

Ik 分词器:比较适合中文的一个分词器

分词器:把一段文字划分成一个个关键字,我们在搜索的时候会把自己的搜索信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行匹配操作。elasticsearch默认分词器是把每个字分成一个词,这显然不行,所以想使用中文,建议用IK分词器

IK软件包下载地址:
https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v5.6.16

1、解压 elasticsearch-analysis-ik-5.6.16.zip
unzip elasticsearch-analysis-ik-5.6.16.zip

将解压文件放在 /docker/es/plugins/ik 目录下。

2. 重启es  

# docker restart es

查看状态及日志,看看是否启动成功。

#docker ps

#docker logs es

ES的花式查询

浏览器http://{你的es的ip}:5601

创建一个索引  

 

PUT /products/ 
{ 
"mappings": { 
"properties": { 
	"name":{ "type": "text", "analyzer": "ik_smart" },
	"long_name":{ "type": "text", "analyzer": "ik_smart" },
	"brand_id":{ "type": "integer" },
	 "category_id":{ "type":"integer" },
	 "shop_id":{ "type":"integer" },
	 "price":{ "type":"scaled_float", 
	 "scaling_factor":100 },
	 "sold_count":{ "type":"integer" },
	 "review_count":{ "type":"integer" },
	 "status":{ "type":"integer" },
	 "create_time" : { "type" : "date" },
	 "last_time" : { "type" : "date" } 
	} 
  } 
}
由此看到es执行提供的restful的api进行数据索引、检索等操作,GET 、POST、PUT等和http请求关键词一致,命令行参数是json格式,只要记住相关的参数语法就可以了。大致总结一下,如下图
再看看执行GET指令
GET /products/_search

kibana的dev tools工具右侧得到相应的结果,类似指令GET POST、PUT等可以一一类似执行查看,这里不再罗列。记住以下语法关键词:

精确查询term,模糊查询match

返回字段source

排序sort

分页from、size

过滤器条件filter、范围条件range

高亮选择highlight

 

Elasticsearchmysql数据同步

go-mysql-elasticsearch 是一款开源的高性能的 Mysql 数据同步 ES 的工具,其由 go语言开发,编译及使用非常 简单。 go-mysql-elasticsearch 的原理很简单,首先使用 mysqldump 获取当前 MySQL 的数据,然后在通过此
binlog name position 获取增量数据,再根据 binlog 构建 restful api 写入数据到 ES
 

猜你喜欢

转载自blog.csdn.net/yan_dk/article/details/117220653