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

 

posted @ 2022-03-11 15:18  甜甜de微笑  阅读(77)  评论(0)    收藏  举报