美文网首页
elasticsearch 的基础概念及应用

elasticsearch 的基础概念及应用

作者: ClownFreeMan | 来源:发表于2020-10-02 13:52 被阅读0次

目录

=== 1、什么是elasticsearch
——1、搜索引擎干了什么
——2、elasticsearch 如何提供搜索服务
——3、elasticsearch 中的restful接口、索引、分词器、类型mapping

=== 2、索引的操作
——1、创建、删除索引
——2、索引对数据项的字段类型mapping
——3、在kibana中查看和管理索引

=== 3、数据的操作
——1、restfull接口的插入、删除数据项
——2、restfull接口的查询、批量查询、聚合查询、复合查询、过滤查询
——3、python的客户端sdk 对数据条目的增、删、改、查

=== 4、kibana的可视化数据
——1、kibana的功能简介
——2、kibana的索引管理和数据查询
——3、kibana添加饼图、柱状图、折线图并选取数据
——4、kibana在dashboard中展示可视化统计数据

1、什么是elasticsearch

1、搜索引擎干了什么

思考一下:
(1)百度搜索、谷歌搜索、必应搜索,是怎么通过我们输入的关键词找到相关的文字链接的呢 ?
(2) 搜索引擎怎么知道哪些文章里有我想要的信息?
(3) 搜索引擎怎么去找到的这些文章?
(4) 搜索引擎怎么在那么短(毫秒级)时间内检索那么多文章?
我们不去做搜索引擎,也不必详细知道百度内部是什么架构,用的什么核心技术。但是我们可以通过相关知识的探索大致知道,搜索引擎实现的逻辑是怎么样的,以百度为例:
首先,当有新的网页、博客、帖子被提交发布,百度的爬虫服务器就把这些新的网页信息下载到百度的云主机上,这个动作也可能是定期的,保障搜索的最新内容。
然后,下载下来的网页内容,根据标题、主体内容等文本信息,提取分词、关键词。并通过建立类似数据库索引的方式,提高这些关键词的搜索效率。
最后,当你在网页输入 要查找的关键词,百度的搜索服务器会根据关键词检索,所有有关的文档,根据关键词出现的频率、关键词相似程度,给出排序后的文档链接。
当然,百度也就可以修改排序置顶的顺序来达到广告植入的收益。
那么,里面涉及到的几个关键的地方:第一,定期爬取全网修改或者新发的文档;第二,文档内容分词和关键词建立高速索引;第三,通过关键词查询索引。

2、elasticsearch 如何提供搜索服务

elasticsearch 的设计初始 根据搜索引擎lucence,据说是一个外国佬为老婆简化查找菜谱做的(映像野史)。
elasticsearch的内部,也有分词器,插件化的,有语法分词器、中文分词器、特定语义分词器等等,灵活的保留了文档的关键字的意义。
elasticsearch的内部,也有索引,类似于mysql的表结构,有索引名称、索引类型、索引字段及类型,也可以通过gmapping设定将某个值映射为某个类型。
elasticsearch的内部,有索引倒排。大概就是说 哪个条目有哪些索引,搜索的时候比重多少,主要是在对索引名称查找到数据之后,根据各个字段来聚合或者过滤,具体不再展开。

3、elasticsearch 中的restful接口、索引、分词器、类型mapping

满足restful的接口规范,使用 put、get、post、delete发送json格式的请求,并得到json的响应。
可以通过restful的接口,设置索引,然后添加条目。(可以理解创建表、插入表数据项)
也有一个修改、删除的接口。但不是我们关心的重点,生产环境大多数不会去把他仅仅当做数据库使用,那样干嘛不直接选择关系型数据库或者k-v数据库。
生产环境中,大家更加在意的是,elasticsearch集成了大规模数据存储(分布式的),索引查询,kibana的可视化数据统计的功能。能够很少工作量的情况下,拿到直观的统计图表信息。

举几个例子:
淘宝网希望看看,全国在线销售苹果的销量在各个地区的分别情况,那么kibana的热力图可以直观查看。
淘宝网希望看看,近半年来苹果手机在线成交情况的按半月统计的数据,那么kibana的柱状图能直接查询到。
这些,只需要在产生数据的源头,往elastic插入信息条目,然后通过查询索引获得图表。
传统的数据库,需要建立复杂的关系表系统存储数据,查询结果再单独做一个chart的页面来展示,费时费力。

2、索引的操作

https://www.elastic.co/guide/en/kibana/7.6/managing-indices.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.6/indices.html
(版本差异很大,确定好自己用到版本再看api)
以下操作建议多在kibana的tools里面完成,或者postman。

1、创建、删除索引

// 一般创建索引会指定 分片和副本数量, 以及数据条目中字段的类型、分词方式
PUT /my_index_name
{
    settings:
    {
        "number_of_shards":3,    //  分片
        "number_of_replicas":0,  //  副本
    },
    mappings:
    {
        “index_type1”:{"properties":{...}}
        “index_type2”:{"properties":{...}}
    }
}
GET /my_index_name/_settings  // 查询索引配置
GET _all/_settings // 查询所有索引配置

DELETE /my_index_name // 删除索引, 类似于删除表(表项都会丢)

2、索引对数据项的字段类型mapping

主要是在指定条目的字段类型,默认情况下,数字是long,带小数是double,除了date外,其他的都是string。
其中string 分为text 和keyword 。区别在于 text 会被分词,keyword 不会分词。影响检索时的最小词粒度。
还有一些其他的mapping配置项,store选项、分词器类型、boost字段分数加权、ignore_above超长文本忽略分词和索引、index可否索引选择项等等。
进阶项为动态mapping,此处不做展开。我也不会。

一个比较简单的例子, ik中文分词器的设置(ik_smart 分词少,ik_max_word分词多),keword和text的区别,嵌套object的数据类型,日期的格式format

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

直接插入, 会自动创建的mapping, 但是非常不推荐这样做

PUT /lib/person/1
{
    ''name'':"tom",
    "age":25,
    "address":{
        "country":"china",
        "city":"wuhan"
    }
} // 直接插入, 会自动创建的mapping
GET /lib/persion/_mapping  // 查询索引的mapping

// 手动创建mapping ,主要是date类型, string的text,keyword区别
// 可以 根据查询出来的mapping 拷贝出来,修改指定的字段类型
“properties”:{
    "title":{"type":"text"},
    "name":{"type":"text", "analyzer":"standard"}, // 标准分词器
    "date":{"type":"date", "index":false}, // 不会被索引, 默认每个字段都会建立倒排索引。
}

3、在kibana中查看和管理索引

https://www.elastic.co/guide/en/kibana/7.6/managing-indices.html
kibana中的索引有索引模板、索引的配置settings,索引的类型映射,索引的状态和统计。
提供了索引管理的API 和 索引模板的API,此处不再缀述。

3、数据的操作

1、restfull接口的插入、删除数据项

PUT /my_index_name/my_index_type/index_id
{
} // 指定 _id 的情况下,用put是插入 ,或者覆盖更新

POST /my_index_name/my_index_type 
{
}  // 不指定ID的情况下,使用post插入,由es自动生生成_id
GET /my_index_name/my_index_type/index_id  // 已知id查询

POST /my_index_name/my_index_type/index_id/_update 
{
}// 对指定字段的更新

 DELETE /my_index_name/my_index_type/index_id // 仅仅删除已知id的条目

2、restfull接口的查询、批量查询、聚合查询、复合查询、过滤查询

查询操作是最核心的部分,实际应用中更新和删除操作很少,主要就是插入大量数据后,做查询和展示。

// 基本查询

// 索引和类型映射说明
PUT /lib/user/2 
{
    "name":"zhangsan",
    "age":24,
    "birthday":"1998-12-12"
    "interests":"guitar,baskitball,haking"
}

// query查询(基本查询)
GET /lib/user/_search?q+name:zhangsan
GET /lib/user/_search?+interests:guitar&sort=age:desc // 爱好有guitar ,按照age排序

// term terms 查询, 不知道分词器
GET /lib/user/_search {“query”:{"term":{"name":"zhangsan"}}} 
GET /lib/user/_search {“query”:{"terms":{"interests":["guitar","haking"]}}} 

// match  match_phrase  match_phrase_pretix查询, 知道分词器
GET /lib/user/_search {“query”:{"match":{"name":"zhangsan lisi"}}}  // 会查出名字包含zhangsan 或者lisi的, 使用term/terms 查不到内容
GET /lib/user/_search {"query":{"match_all":{}}} // 查询所有记录
GET /lib/user/_search {
    “_source”:["name", "address"], // 查询结果带哪些字段, 也可用 include exclude 控制。
    "query":{"match_all":{}},
    "range":{"age":{"from":20, "to":25}}, // 查询范围
    “sort”:{"age":{"order":"desc"}}, // 查询结果根据字段排序
} // 查询所有记录

// 模糊查询 通配符 fuzzy wildcard 
.... 找些例子

// filter 过滤查询

// filter 查询不计算相关性, 速度快于query。
1、简单过滤查询
2、bool过滤查询、嵌套bool过滤

// 聚合查询, 求平均值、最大值、最小值、sum、count

GET /lib/iterms/_search
{
    "eggs":{
        "price_of_sum":{"sum":{"field":"price"}}
    }
}

// 复合查询

不例举了,麻烦

3、python的客户端sdk 对数据条目的增、删、改、查

pip install elasticsearch
import elasticsearch
...

4、kibana的可视化数据

1、kibana的功能简介

kibana 可以理解为 es的客户端,es提供存储和高效检索数据的服务,kibana将es的服务功能和配置可视化。
kibana 可以可视化配置索引:索引的mapping、setting,可以查看索引的状态和统计。
kibana 可以查询数据,query查询、filter查询、聚合查询等,tools工具栏能干几乎所有restful接口的事情
kibana 可以可视化数据, 将查询的结果用图标展示,自定义dashboard显示。
附加的其他功能,大数据分析和集成了深度学习,集成了监控和告警,各种格式的生产日志的采集。还有些像APM、SIEM一堆看似...看都不想看的功能(我理解不把东西做到平民化就是设计的根本缺陷,这个功能就废了)

2、kibana的索引管理和数据查询

image.png
image.png

3、kibana添加饼图、柱状图、折线图并选取数据

查看官网教程

4、kibana在dashboard中展示可视化统计数据

查看官网教程

相关文章

网友评论

      本文标题:elasticsearch 的基础概念及应用

      本文链接:https://www.haomeiwen.com/subject/gyybuktx.html