Es简介和基本增删查改

Es简介

  • Elasticsearch 是一个基于Lucene的分布式搜索和分析引擎
  • Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据
  • Java开发,在Apache开源协议
  • 使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,使得全文检索变得简单

一、Es核心概念

-集群:单台机器,多台机器
-节点:集群中的每一台机器叫一个节点
-分片:数据可以分为较小的分片。每个分片放到不同的服务器上
-副本:
-全文检索:

二、ELK是什么:做日志收集和分析

ELK=elasticsearch+Logstash+kibana
elasticsearch:后台分布式存储以及全文检索
logstash: 日志加工、“搬运工”
kibana:数据可视化展示。
ELK架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链。 三者相互配合,取长补短,共同完成分布式大数据处理工作。

Es的安装

一、安装java的jdk

二、下载es版本,解压,bin路径下,elastcsearch.bat

image-20210219160950816

三、测试时候安装成功

他有两个端口还有一个是9300,9300是做集群交互的端口,9200是外部可以访问的端口

image-20210217161635207

安装成功后,可以直接在浏览器访问

image-20210217161701022

四、Kibana(类似于Postman)

4.1Kibana介绍

Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。

你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。

你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。

Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的变化。

Kibana一定要和Es版本对应,这里使用的是7.5

4.2kibana安装(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: Ne
# 连接哪个es
elasticsearch.hosts: ["http://localhost:9200/"]

image-20210219162016524

运行KIbana

image-20210219163920953

如果部署后出现问题

20200326142600691

image-20210219170516144

一、并且es显示已经连接上,一般是上一个出现问题,我们需要在进程中,找到node并结束掉

image-20210219170644093

二、断开es的kibana索引

cmd

curl -XDELETE http://localhost:9200/.kibana*
三、重新启动kibana

成功

image-20210219170821600

image-20210219170915033

4.3 elasticsearch-head安装

github

image-20210219171345634

1 第三方开发的一个es客户端(nodjs开发的,装node环境),kibana是官方的所以不存在跨域
2 下载,解压
3 npm install  安装依赖
4 npm run serve 跑起来

5 会出现跨域,修改es配置
    http.cors.enabled: true
    http.cors.allow-origin: "*"
6 浏览器输入
	http://localhost:9100/
一、当我们跑起来时,

image-20210219172925953

二、现在去Es配置中解决跨域问题

image-20210219173115869

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bvzx5R9n-1613748063148)(C:\Users\S\AppData\Roaming\Typora\typora-user-images\image-20210219173057034.png)]

重启ES

三、查看Es-Head

image-20210219173359314

kibana的配置信息

至此两个都装完了,Kibana主要做查询和搜索,两个都是客户端,head有一个概览,仪表盘,方便查看。kibana没有

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

第三种:离线安装

  1. https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-6.4.0.zip
  2. 点击下载analysis-smartcn离线包
  3. 将离线包解压到ElasticSearch 安装目录下的 plugins 目录下
  4. 重启es。新装插件必须要重启es
**注意:插件的版本要与 ElasticSearch 版本要一致**

image-20210219174659670

倒排索引

详细

简单来说就是根据内容定位到标题,通过书中的关键字,文本信息,定位到书名,然后返回,只不过其中做了很多优化,比如数据的高可用,切片式复制到从节点等等

1 倒排索引:对文章进行分词,对每个词建立索引,由于这样建,会出现索引爆炸,索引索引跟标题建关系,标题再跟文章建索引,如下:
	分词---文章建立索引                             |

| 今天(索引)    | (文章1,<210>,2) (文章3,<8>,1)       |
| 星期天(索引) | (文章2,<12,25,100>,3)                 |
| 出去玩(索引) | (文章5,<11,24,89>,3)(文章1,<819>,2) |

今天出现在哪个文章,出现的位置和出现的次数

索引操作(数据库操作)

PUT ne
{
  "settings": {
    "index":{
      "number_of_shards":5,  # 索引分片数量,理论上一个能存21E个文档 5个也就是105E
      "number_of_replicas":1  # 索引副本数量
    }
  }
}
PUT ne2

'''
number_of_shards
每个索引的主分片数,默认值是 5 。这个配置在索引创建后不能修改。
number_of_replicas
每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改。
'''
方式一----head

image-20210219214056929

方式二—kibana

image-20210219214340597

image-20210219215409569

查看

image-20210219214530472

查看索引

# 查看索引
GET ne2/_settings
GET ne/_settings  # 查看指定
GET _all/_settings  # 查看所有

GET ne,ne2/_settings  # 查看ne和ne2的setting配置
GET _settings  # 产看所有

image-20210219215741594

修改索引

修改主要是修改索引的副本,分片不能修改,一般不用,名字也不能改

# 修改索引(一般不太用,只能用来修改副本数量)
#修改索引副本数量为2  分片的数量一开始就要定好
# 副本数量可以改(有可能会出错)
PUT lqz/_settings
{
  "number_of_replicas": 2
}

# 如果出错 就修改一下配置
PUT  _all/_settings
{
"index": {
  "blocks": {
    "read_only_allow_delete": false  # 索引只允许读和删
    }
  }
}

删除索引

DELETE ne

image-20210219220415365

也可以在head中删除

image-20210219220501364

映射管理(类型)(表)

创建映射

索引如果不创建,只有插入文档,会自动创建

PUT books  # 创建索引books 然后里面有那么多字段
{
  "mappings": {
    "properties":{
      "title":{  # 字段
        "type":"text",  # 类型
        "analyzer": "ik_max_word"  # 用ik做分词
      },
      "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"}
      
    }
    
  }
}

# 后续把注释删掉

image-20210219223616420

查看映射

GET books/_mapping
GET _all/_mapping

image-20210219223749876

特殊说明

索引映射都不存在,也可以插入文档,也就是说他会自动帮你创建好索引和映射

PUT xxx/_doc/1
{
  "title":"白雪公主和十个小矮人",
  "price":"99",
  "addr":"黑暗森里",
  "publish_date":"2018-05-19",
  "name":"lqz"
}


# 查看索引
GET lqz/_settings
#查看映射
GET lqz/_mapping

image-20210219224402975

修改映射的规则是: 可以添加新字段,已有字段不允许修改。如果说要涉及修改mapping结构的,有两种解决方案,一种是,新建索引然后进行数据迁移,还有一种是索引映射

文档基本增删查改(一行一行数据)

插入文档

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"
}

image-20210219224815121

数据存放之后,我们可以通过head来查看我们的数据

image-20210219225052934

查询文档

GET books/_doc/1

image-20210219225142727

修改文档

方式一 直接覆盖

PUT books/_doc/1
{
  "title":"三体",
  "price":"99", #写字符串会自动转换
  "addr":"china",
  "publish_date":"2018-05-19",
   "name":"lcx"
}

方式二 局部修改

POST books/_doc/1/_update
{
  "doc": {
    "addr":"china",
    "price":"8888888",  # 会自动进行格式转化
  }
}

POST books/_update/1  # 推荐使用方法
{
  "doc": {
    "addr":"china",
    "price":"8888888"
  }
}

删除文档

DELETE books/_doc/4

文档查询–基础

###查询字符串
# 查询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"
    }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的示例: 1. 引入依赖 在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. 配置 Elasticsearch 在 application.properties 文件中添加 Elasticsearch 相关配置: ```properties spring.elasticsearch.rest.uris=http://localhost:9200 ``` 3. 定义实体类 创建一个实体类,例如: ```java @Document(indexName = "user") public class User { @Id private String id; private String name; private Integer age; // getter/setter 略 } ``` 4. 创建 Elasticsearch Repository 创建一个继承自 ElasticsearchRepository 的接口,例如: ```java public interface UserRepository extends ElasticsearchRepository<User, String> { } ``` 5. 编写增删查改方法 在业务逻辑层中编写增删查改方法,例如: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public void save(User user) { userRepository.save(user); } public void delete(String id) { userRepository.deleteById(id); } public List<User> search(String keyword) { return userRepository.findByNameContaining(keyword); } public void update(User user) { userRepository.save(user); } } ``` 以上示例中,save 方法用于保存用户信息,delete 方法用于删除用户信息,search 方法用于根据关键字搜索用户信息,update 方法用于更新用户信息。 6. 测试 编写测试类,例如: ```java @RunWith(SpringRunner.class) @SpringBootTest public class UserServiceTest { @Autowired private UserService userService; @Test public void testSave() { User user = new User(); user.setId("1"); user.setName("张三"); user.setAge(20); userService.save(user); } @Test public void testDelete() { userService.delete("1"); } @Test public void testSearch() { List<User> userList = userService.search("张三"); System.out.println(userList); } @Test public void testUpdate() { User user = new User(); user.setId("1"); user.setName("张三"); user.setAge(25); userService.update(user); } } ``` 以上示例中,testSave 方法用于测试保存用户信息,testDelete 方法用于测试删除用户信息,testSearch 方法用于测试根据关键字搜索用户信息,testUpdate 方法用于测试更新用户信息。 运行测试类,查看控制台输出结果,即可验证增删查改功能是否正常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值