文章目录
昨日回顾
# django,flask,sanic,fastapi
# net/http的包,封装好了
# go 语言的beego框架,gin,echo
# beego:缓存,orm,session,日志内置(中文)
-整体的设计理念,都源自django
-bee工具(创建,允许项目)
-main.go
-到项目目录下:go build
# gin:文档,gorm(beego的orm)
-路由
-session
-表单验证(第三方模块)
# net/http包,可以做http客户端(爬虫),http服务端(web服务),beego,gin基于它写的
# template包,官方模板渲染的包
# es介绍
-java开发,基于Lucene,封装,做成服务,通过resful接口实现调用
-es和Solr,新型互联网都是es
-es核心概念
-集群
-节点
-分片(es都有了)
-副本
-全文检索
-大数据量的搜索:近实时,分析
-跟传统mysql比较
-数据库 ----索引
-表 ----类型(es 6以后,一个索引下只能有一个类型,7以后,完全不允许)
-一行行数据 ----文档
-字段属性 ----映射(mapping)
-haystack:只支持6之前的版本(django框架中的全文检索扩展)
-es,Solr,Whoosh(python写的全文搜索框架,简单,不需要额外安装软件)
-elk:
-elasticsearch+Logstash+kibana
# 中间件
-(django中间件)
-服务器中间件(uwsgi)
-消息队列中间件(rabbitmq)
-数据库中间(Mycat,分库分表,集群(mysql官方不支持集群))
# es安装
-任何平台都需要装jdk
-window一路下一步
-mac:一路下一步
-java -version
1.8以上(java15 ,85%以上的公司还在用1.8)
-官网把es对于平台的版本的zip下载下来,解压
-bin路径下指向elasticsearch可执行文件
-http://127.0.0.1:9200/
1 kibana安装(postman)
1 客户端:浏览器,postman,kibana,elasticsearch-head(没有桌面版客户端)
2 官方提供的
-Kibana 是一款开源的数据分析和可视化平台
-Kibana一定要跟es版本对应,咱们用的都是7.5.0
3 解压,就可以运行
4 连接es,需要配置
-修改kibana配置
# kibana监听的端口和地址
server.port: 5601
server.host: "127.0.0.1"
server.name: lqz
# 连接哪个es
elasticsearch.hosts: ["http://localhost:9200/"]
2 elasticsearch-head安装
1 第三方开发的一个es客户端(nodjs开发的,装node环境)
2 下载,解压
3 npm install 安装依赖
4 npm run serve 跑起来
5 会出现跨域,修改es配置
http.cors.enabled: true
http.cors.allow-origin: "*"
6 浏览器输入
http://localhost:9100/
3 es安装官方,第三方插件
# 三种安装方式
# 推荐用第三种
**第一种:命令行**
bin/elasticsearch-plugin install [plugin_name]
# bin/elasticsearch-plugin install analysis-smartcn 安装中文分词器
**第二种:url安装**
bin/elasticsearch-plugin install [url]
#bin/elasticsearch-plugin install https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-6.4.0.zip
**第三种:离线安装**
#https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-6.4.0.zip
#点击下载analysis-smartcn离线包
#将离线包解压到ElasticSearch 安装目录下的 plugins 目录下
#重启es。新装插件必须要重启es
```
**注意:插件的版本要与 ElasticSearch 版本要一致**
3 倒排索引
1 倒排索引:对文章进行分词,对每个词建立索引,由于这样建,会出现索引爆炸,索引索引跟标题建关系,标题再跟文章建索引,如下:
分词---文章建立索引 |
| 今天(索引) | (文章1,<2,10>,2) (文章3,<8>,1) |
| 星期天(索引) | (文章2,<12,25,100>,3) |
| 出去玩(索引) | (文章5,<11,24,89>,3)(文章1,<8,19>,2) |
今天出现在哪个文章,出现的位置和出现的次数
4 索引操作(数据库)
1 新建索引
PUT lqz2
{
"settings": {
"index":{
"number_of_shards":5,
"number_of_replicas":1
}
}
}
# 新建索引
PUT lqz2
{
"settings": {
"index":{
"number_of_shards":5,
"number_of_replicas":1
}
}
}
PUT lqz
# 查看索引
GET lqz2/_settings
GET lqz/_settings
GET _all/_settings
GET lqz,lqz2/_settings
GET _settings
# 修改索引(一般不太用,只能用来修改副本数量)
#修改索引副本数量为2 分片的数量一开始就要定好
# 副本数量可以改(有可能会出错)
PUT lqz/_settings
{
"number_of_replicas": 2
}
PUT _all/_settings
{
"index": {
"blocks": {
"read_only_allow_delete": false
}
}
}
# 删除索引
DELETE lqz
5 映射管理(类型)(表)
#1 在Elasticsearch 6.0.0或更高版本中创建的索引只包含一个mapping type。 在5.x中使用multiple mapping types创建的索引将继续像以前一样在Elasticsearch 6.x中运行。 Mapping types将在Elasticsearch 7.0.0中完全删除
##索引如果不创建,只有插入文档,会自动创建
# 创建映射(类型,表)
PUT books
{
"mappings": {
"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"}
}
}
}
###查看映射
GET lqz/_mapping
GET _all/_mapping
# 特殊说明索引映射都不存在,也可以插入文档
PUT lqz1/_doc/1
{
"title":"白雪公主和十个小矮人",
"price":"99",
"addr":"黑暗森里",
"publish_date":"2018-05-19",
"name":"lqz"
}
# 查看索引
GET lqz/_settings
#查看映射
GET lqz/_mapping
6 文档基本增删查改(一行一行数据)
# 1 插入文档
PUT books/_doc/1
{
"title":"大头儿子小偷爸爸",
"price":100,
"addr":"北京*",
"company":{
"name":"我爱北京*",
"company_addr":"我的家在东北松花江傻姑娘",
"employee_count":10
},
"publish_date":"2019-08-19"
}
PUT books/_doc/2
{
"title":"白雪公主和十个小矮人",
"price":"99", #写字符串会自动转换
"addr":"黑暗森里",
"publish_date":"2018-05-19"
}
PUT books/_doc/3
{
"title":"白雪公主和十个小矮人",
"price":"99", #写字符串会自动转换
"addr":"黑暗森里",
"publish_date":"2018-05-19",
"name":"lqz"
}
# 查询文档
GET lqz/_doc/1
# 修改文档两种方式
# 第一种
PUT lqz/_doc/1
{
"name":"顾老二",
"age":30,
"from": "gu",
"desc": "皮肤黑、武器长、性格直",
"tags": ["黑", "长", "直"]
}
# 第二种(局部修改)
POST lqz/_doc/1/_update
{
"doc": {
"desc": "皮肤很safasdfsda黄,武器很长,性格很直",
"tags": ["很黄","很长", "很直"]
}
}
# 删除文档
DELETE lqz/_doc/4
7 文档查询
###查询字符串
# 查询from字段是gu的所有人
GET lqz/_doc/_search?q=from:gu
# 查询age是22的人
GET lqz/_doc/_search?q=age:22
GET lqz/_doc/_search?q=desc:不知道
###结构化查询
GET lqz/_doc/_search
{
"query": {
"match": {
"from": "gu"
}
}
}
GET lqz/_doc/_search
{
"query": {
"match": {
"from":"gu"
}
}
}
8 模糊查询
match_all:查询所有
match_phrase:短语查询
GET t1/doc/_search
{
"query": {
"match_phrase": {
"title": {
"query": "中国世界",
"slop": 2 # 中国和世界之间最多间隔2个字符
}
}
}
}