1.elasticsearch_course_创建 index,添加,删除,更新文档
ELK概述
1、全文检索的需求介绍
比如我们查找:”护手霜“ , 那么这期间内部会经过大体的:1、分词(护手,手霜,”“ 1行排序展示给我们
那么对于一般的公司,初期是没有那么多数据的,所以很多公司更倾向于使用传统的数据库:mysql;比如我们要查找关键字”传智播客“,那么查询的方式大概就是 "select * from table where filed like "传智播客",然后很多公司开始对数据库进行横向和纵向的扩容,开始进行数据库表的“拆分”:横向拆分和纵向拆分;但是即便这样操作,仍然会出现很多问题,比如:
1、数据库会出现单点故障问题,于是先天主从复制关系,于是增加了运维成本
2、因为对表的拆分,增加了后期维护的难度,同样也是增加了运维成本
3、即便做了大量的维护,但对于大数据的检索操作,依然很慢,完全达不到期望值
2.全文检索需求:
传统关系型数据库性能不能满足海量数据的快速查询,所以引入了全文检索。最原生的是lucene,经过封装有了solar,solar有一个缺点,在建立索伊的时候,搜索性能会大幅下降,后面有了elasticsearch,性能最高
- :顺序扫描法(Serial Scanig)
所谓顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用 windows 的搜索也可以搜索文件内容,只是相当的慢。
- 全文检索(Ful-tex Search)
将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。
3.ELK 协议栈基本介绍
Elasticearch
Elasticearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个基于Apache lucene 基础上的搜索引擎,使用 Java 语言编写。
主要特点
- 实时分析
- 分布式实时文件存储,并将每一个字段都编入索引
- 文档导向,所有的对象全部是文档
- 高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)。
- 接口友好,支持 JSON
Logstah
Logstah 是一个具有实时渠道能力的数据收集引擎。
主要特点
- 几乎可以访问任何数据
- 可以和多种外部应用结合
- 支持弹性扩展
它由三个主要部分组成
- Shiper-发送日志数据
- Broker-收集数据,缺省内置 Redis – Indexr-数据写入
- Broker-收集数据,
Kiban
Kibana 是一款基于 Apache 开源协议,为Elasticsearch 提供分析和可视化的 Web平台。他可以在索引中查找,交互数据,并生成各种维度的表图。
4. es 概述
Elasticearch 是面向文档(document orientd)的,这意味着它可以存储整个对象或文档这意味着它可以存储整个对象或文档。然而不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在elasticsearch中,你可对文档(而非成列、成行的数据)进行索引、搜索、排序、过滤。
Elasticearch 比传统关系型数据库如下:
Relational DB -> Datbase -> Tables -> Rows -> Columns
Elasticsearch -> indices --> type -- document --fields
es 中的核心概念
index: 索引库,我们来es中创建的一个个索引库,类似于mysql数据库
type:类型,在索引库下面创建的类型,类似于mysql当中的数据表
document:文档,es当中一条数据就是一个document
filed:字段,一条document数据是由多个字段组成的
mapping:处理数据的方式和规则方面做的一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等,这些都是在映射里面可以设置的
elasticsearch 操作
crul 相关知识
-X 指定http的请求方法 有 HEAD、GET、POST、PUT、DELETE
-d 指定要传输的数据
-H 指定http 请求头数据
-i 显示http头部信息
浅谈http协议六种请求方法,get、head、put、delete、post、options区别
创建elasticsearch index
创建一个 index,名字是 blog
curl -XPUT http://192.168.0.141:9200/blog/?pretty
-u elastic:1234 v #curl 如果有用户名密码,可以填写用户名密码
?pretty #以JSON查询条件最后面
插入文档
crul -XPUT http://192.168.0.141:9200/blog/article/1?pretty -d '{"id":"1","title":"what is lucene"}' -H "Content-Type: application/json"
article 指定类型
查询文档
curl -XGET http://192.168.0.141:9200/blog/article/1?pretty
更新文档
更改和插入,其实是一样的
curl -XPUT http://192.168.0.141:9200/blog/article/1?pretty -d '{"id":"1","title":"what is lucene"}' -H "Content-Type: application/json"
查询文档
curl -XGET http://192.168.0.141:9200/blog/article/_search?q=title:elasticsearch
删除
删除文档
curl -XDELETE http://192.168.0.141:9200/blog/article/1?pretty
删除索引
curl -XDELETE http://192.168.0.141:9200/blog?pretty
多条数据插入
POST /school/student/_bulk
{"index": {"_id":1 }}
{"name":"liubei","age":21,"sex":"boy","birth":"1996-01-02","about":"i like diaocao he girl"}
{"index": {"_id":2 }}
{"name":"guanyu","age":21,"sex":"boy","birth":"1995-01-02","about":"i like diaocan"}
{"index": {"_id":3 }}
{"name":"zhangfei","age":18,"sex":"boy","birth":"1998-01-02","about":"i like travel"}
{"index": {"_id":4 }}
{"name":"diaocan","age":20,"sex":"gril","birth":"1996-01-02","about":"i like travel and sport"}
{"index": {"_id":5 }}
{"name":"panjinlian","age":25,"sex":"gril","birth":"1991-01-02","about":"i like travel and wosong"}
{"index": {"_id":6 }}
{"name":"caocao","age":30,"sex":"boy","birth":"1988-01-02","about":"i like xiaoqiao"}
{"index": {"_id":7 }}
{"name":"zhaoyun","age":31,"sex":"boy","birth":"1997-01-02","about":"i like travel and music"}
{"index": {"_id":8}}
{"name":"xiaoqiao","age":18,"sex":"girl","birth":"1998-01-02","about":"i like caocao"}
{"index": {"_id":9 }}
{"name":"daoqiao","age":20,"sex":"girl","birth":"1996-01-02","about":"i like travel and history"}
# 创建 index并指定文档的索引
POST twitter/_doc/1
{
"user": "GB",
"uid": 1,
"city": "Shenzhen",
"province": "Guangdong",
"country": "China"
}
# 创建 index并指定文档索引 (方式都一样)
PUT twitter/_doc/1?op_type=create
{
"user": "双榆树-张三",
"message": "今儿天气不错啊,出去转转去",
"uid": 2,
"age": 20,
"city": "北京",
"province": "北京",
"country": "中国",
"address": "中国北京市海淀区",
"location": {
"lat": "39.970718",
"lon": "116.325747"
}
}
# 获取 文档ID是 1 的数据
GET twitter/_doc/1
# 获取 文档ID是 1 的数据 ,并且只返回 文档数据
GET twitter/_doc/1/_source
# 获取 文档id是 1 的数据 ,并且只返回 文档 指定字段的 数据
GET twitter/_doc/1?_source=city,age,name
# 不指定文档id,有elasticsearch 自动创建索引
POST my_index/_doc
{
"content": "this is really cool"
}
# 根据 多个文档id ,查找数据
GET twitter/_doc/_mget
{
"ids": ["1", "2"]
}
# 根据 文档id删除文档
DELETE twitter/_doc/spHVdH0BPy_Vj1s2Ql6I
# 根据 文档id 更新文档
POST twitter/_update/1
{
"doc":{
"user":"makuo",
"city":"shandong"
}
}