2 ES
1 es介绍与安装
# es跟传统数据库的比较
# elk是什么:日志的采集和分析
# elk在咱们项目中的使用场景:搜索场景
# es能处理多大数据:一个es的分片是一个Lucene,es可以有多个分片
1.1 安装
# es由java开发的,需要安装jdk
# 编程语言:解释型,编译型
-编译型:c,go---》源代码直接编译成可执行文件
-解释型:python,nodejs,php--》边解释边执行---》源代码--》运行在解释器上
-把源代码编译成可执行文件exe:pipinstaller
-https://zhuanlan.zhihu.com/p/430490285
-保护代码:1 代码加密 2 打包成exe 3 运行起来,直接把代码删掉
-java:编译型--》不是直接编译成可执行文件(一处编码处处运行,夸平台)---》java虚拟机(jvm)
---》可以安装在不通的操作系统行---》java编译后的字节码文件(jar,war)---》运行在jvm上
--->java程序都吃内存---》安卓原生开发需要使用java--》安卓虚拟机---》kotlin
-iso开发:objectC, swift ,苹果公司工程师开发的---》跳槽去了facebook
-谷歌跟甲骨文打了长达10几年的官司--》用了很多jdk的包--》谷歌赢了
-java是sun公司---》被甲骨文收购了---》收费 oracle-jdk 收费
-openjdk,毕昇jdk(华为做的)
-装jvm---》
-现在基本上运行java程序,大家都装jdk--》java 8 java17--》最低支持java8
jdk:java开发环境,做java开发要装它
jre:java运行环境,java要运行,需要装它
jvm:java虚拟机,java的字节码运行在上面
# win虚拟机---》win上装jdk-->一路下一步---》cmd中敲java -version 显示就ok
java 1.8 以后,就叫java8
# 官网下载相应版本的es:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-5-0
# 解压,运行即可,可执行文件在bin路径下:elasticsearch.bat
# 访问 http://127.0.0.1:9200/ 看到东西,表示装好了
2 安装 ElasticSearch-head和 Kibana
# 服务---》9200端口---》发送http请求---》操作es数据增删查改
# 装es客户端:
-postman:es接收http的请求
-kibana:https://www.elastic.co/cn/downloads/past-releases#kibana
-找跟es对应的版本
-ElasticSearch-head:第三方node写的一个es客户端https://github.com/mobz/elasticsearch-head
# kibana,解压,运行
-配置 kibana目录下conf kibana.yml
server.port: 5601
server.host: "127.0.0.1"
server.name: lqz
elasticsearch.hosts: ["http://localhost:9200/"]
# ElasticSearch-head:node写的,需要有node环境
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
浏览器打开 http://localhost:9100/
# 发现连不上---》跨域问题---》配在服务端(es)
# 9100端口:ElasticSearch-head
# 9200端口:elasticsearch
# 5601端口:kibana
3 倒排索引介绍
# 对文章进行分词,然后对分词建立索引的过程叫倒排索引
# 百度搜索----》百度是个大爬虫--->一刻不停的在互联网上爬取数据---》爬完存到百度自己的库中---》我们在百度的搜索框中搜索---》输入关键字---》去百度自己的库中搜索---》从当时爬取这个网站的内容---》并且返回该网站的地址
# 百度搜索爬取动态网站比重低一些,伪静态(xx.html)--》优化搜索引擎的抓取
# 百度本质就是爬虫+搜索引擎
# 自己搭建搜索引擎---》专注于it相关的搜索引擎
keywrods类型:不分词,直接建立索引
text类型:分词,建立索引
4 索引操作
####### 发送http请求
# 新增索引
PUT lqz2
{
"settings": {
"index":{
"number_of_shards":5,
"number_of_replicas":1
}
}
}
####### 查看索引
#获取lqz2索引的配置信息
GET lqz2/_settings
#获取所有索引的配置信息
GET _all/_settings
#同上
GET _settings
#获取lqz和lqz2索引的配置信息
GET lqz,lqz2/_settings
####### 删除索引
#删除lqz索引
DELETE lqz
# 修改索引(一般不用)
#修改索引副本数量为2
PUT lqz/_settings
{
"number_of_replicas": 2
}
#如遇到报错:cluster_block_exception,因为
#这是由于ES新节点的数据目录data存储空间不足,导致从master主节点接收同步数据的时候失败,此时ES集群为了保护数据,会自动把索引分片index置为只读read-only
PUT _all/_settings
{
"index": {
"blocks": {
"read_only_allow_delete": false
}
}
}
5 映射管理(类型--->表)
# 在Elasticsearch 6.0.0或更高版本中创建的索引只包含一个mapping type。 在5.x中使用multiple mapping types创建的索引将继续像以前一样在Elasticsearch 6.x中运行。 Mapping types将在Elasticsearch 7.0.0中完全删除
# es 6.x以后删除了一个索引下可以建多个类型
# 通过映射创建类型---》建表语句,建立表
#### es 即便没有类型(表),也可以插入数据
在创建索引的时候,可以预先定义字段的类型及相关属性
Es会根据Json数据源的基础类型,猜测你想要映射的字段,将输入的数据转变成可以搜索的索引项。
Mapping是我们自己定义的字段数据类型,同时告诉es如何索引数据及是否可以被搜索
作用:会让索引建立的更加细致和完善
## 类型中的字段
string类型:text,keyword (text和keyword有什么区别)
数字类型:long,integer,short,byte,double,float (java的数据类型)
-byte:int8 -128---127之间 +-2的七次方-1
-short:int16
-integer:int42
-long:int64
-float:单精度 小数,表示小数范围小
-double:双精度 小数,表示小数范围大
日期类型:data
布尔类型:boolean
binary类型:binary 二进制类型
复杂类型:object(实体,对象),nested(列表)
geo类型:geo-point,geo-shape(地理位置) es也可以做地理位置信息
专业类型:ip,competion(搜索建议)
# 通过映射(mapping)创建类型type 7.x及以后
PUT books
{
"mappings": {
"properties":{
"title":{
"type":"text",
},
"price":{
"type":"integer"
},
"addr":{
"type":"keyword"
},
"company":{
"properties":{
"name":{"type":"text"},
"company_addr":{"type":"text"},
"employee_count":{"type":"integer"}
}
},
"publish_date":{"type":"date","format":"yyy-MM-dd"}
}
}
}
## es 6.x及之前通过映射创建类型(创建一个book索引,里面有一个book类型)
PUT books
{
"mappings": {
"book":{
"properties":{
"title":{
"type":"text",
"analyzer": "ik_max_word"
},
"price":{
"type":"integer"
},
"addr":{
"type":"keyword"
},
"company":{
"properties":{
"name":{"type":"text"},
"company_addr":{"type":"text"},
"employee_count":{"type":"integer"}
}
},
"publish_date":{"type":"date","format":"yyy-MM-dd"}
}
}
}
}
5.1 插入数据测试
PUT books/_doc/1
{
"title":"大头儿子小偷爸爸",
"price":100,
"addr":"北京天安门",
"company":{
"name":"我爱北京天安门",
"company_addr":"我的家在东北松花江傻姑娘",
"employee_count":10
},
"publish_date":"2019-08-19"
}
#测试数据2
PUT books/_doc/2
{
"title":"白雪公主和十个小矮人",
"price":"99", #写字符串会自动转换
"addr":"黑暗森里",
"company":{
"name":"我的家乡在上海",
"company_addr":"朋友一生一起走",
"employee_count":10
},
"publish_date":"2018-05-19"
}
5.2 查看映射(类型)
#查看books索引的mapping
GET books/_mapping
#获取所有的mapping
GET _all/_mapping