栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

2021-10-14

2021-10-14

Elasticsearch
是一个分布式、RESTful 风格的搜索和数据分析引擎。

ES 介绍 {#es-介绍}

玩“飞花令”游戏时,让游戏参与者说出带“月”字的诗句,我们可以去百度输入“带月字的古诗”,
百度就会返回相关的信息。

ES
也是一个类似的搜索引擎,它的作用就是从海量的数据中找到我们所关心的问题,如:

  • 带月字的古诗?
  • 24 小时内带 connection lost 关键字的日志?
  • 某个产品包含卡顿关键字的用户评论?

ES 也能处理数据聚合的问题,如:

  • 包含卡顿关键字的用户评论的数量?
  • 7天内接口调用的平均耗时,最小耗时,最大耗时?

ES 实现快速查询的关键就是倒排索引。

正向索引与倒排索引 {#正向索引与倒排索引}

如果我们需要查找带月的古诗,首先我们要有数据。

如我们提供两首李白的古诗:

《静夜思》

床前明月光,疑是地上霜。举头望明月,低头思故乡。

《玉阶怨》唐·李白

玉阶生白露,夜久侵罗袜。却下水晶帘,玲珑望秋月。

对于一般的数据库,我们常常会把诗名作为索引的键,内容作为值。

这种情况下如果我们查询“静夜思”对应的内容是非常快的。

但是查询带月的诗就慢得多,需要先找到所有诗的内容,然后找其中是否有月。
想要快速查询,可以建立一个以“月”为键,诗名为值的索引。

keyvalue
静夜思
静夜思
静夜思
静夜思 玉阶怨

如果我们查找带月的古诗就能快速找到“静夜思 玉阶怨”
,然后再根据正向索引就能找到内容。

以内容作为键的索引就叫做倒排索引,也叫反向索引。

搜索引擎的核心就是建立倒排索引。

ES 系统 {#es-系统}

ES 是基于 Apache Lucene ,Lucene
可以看是一个建立倒排索引的库。ES 基于 Lucence 封装,
实现了分布式的搜索引擎,并且所有的操作都提供 rest api。

ES中的重要概念 {#es中的重要概念}

在使用 ES 之前,需要先了解以下 ES 中的几个重要概念。

索引库 indices {#索引库-indices}

索引库类似与 mysql 中库(database)的概念,indices 是 index
的复数,意思是有许多索引。

文档 document {#文档-document}

文档就是存入索引中的原始数据,每一条信息就是一个文档。ES
中的文档格式都是 json, 每个文档都是一个 json 对象。

字段 field {#字段-field}

文档中的属性,一个文档中可以有多个属性,如:

{
    "user_name": "123",
    "user_password": "111"
}

上面这个文档包括 user_name 和 user_password 。

字段数据类型 {#字段数据类型}

每个字段都有它的数据类型,如 string 类型,=boolean=
类型。类型指示字段的数据 类型及索引动作对字段的操作。

例如一个字符串可以为 text 类型,也可以为 keyword 类型。=text=
类型是为了全文搜索, keyword
类型是为了索引和排序。在创建字段时需要根据用途选择类型。

所有的数据类型:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html

映射 Mapping {#映射-mapping}

映射是定义文档及其包含的字段如何存储和索引的过程。

文档中的每个字段都有它们的数据类型,Mapping
可以定义字段的类型及其它的一些属性。

如:

{
  "mappings": {
    "properties": {
      "user_name": {
        "type":  "keyword"
      }
    }
  }
}

上面的 mapping 定义了属性 user_name 的类型为 keyword 。

索引模板 Index Template {#索引模板-index-template}

索引模块定义了索引的相关设置(setting)和映射(Mapping),当创建一个新的索引时直接应用模板快速创建。

搜索 {#搜索}

搜索就是将我们的问题以 ES 能够理解的方式向 ES 发出请求,ES
会返回对应的数据, 如:

  • 找出所有带月的诗句
查询 DSL {#查询-dsl}

一个搜索可以分解成多个查询,要想 ES 能够理解查询请求,就得用 ES 的查询
DSL。

比如下面的查询意思就是 verse 字段中有月的数据

{
  "query": {
    "match": {
      "verse": "月"
    }
  }
}
聚合 Aggregations {#聚合-aggregations}

聚合操作可以将 ES 中的数据进行统计或度量,如:

  • 网站的平均加载时间
  • 带月的古诗的数量

这里只是简单介绍,更多的内容可以看官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

ES 实战 {#es-实战}

ES 是一个比较复杂的分布式系统,但是我们可以在自己的PC上体验它的功能。

安装 ES {#安装-es}

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html

Windows 就是下载一个压缩包,解压后执行 .binelasticsearch.bat 启动
ES。

ES 服务的默认端口为 9200 ,ES 启动后就可以用 rest api 使用 ES。

创建索引 {#创建索引}

下面创建一个索引来保存古诗。

PUT http://127.0.0.1:9200/poetry
Content-Type: application/json
{
    "mappings":
    {
        "properties":
        {
            "poetry_name" : { "type" : "keyword" },
            "poetry_content" : { "type" : "text" }
        }
    }
}

它有两个字段,poetryname 表示诗名,类型为
keyword,poetrycontent 表示诗内容,类型为 text 。

增加文档 {#增加文档}

一个文档即一条记录,下面向索引中添加文档

POST http://127.0.0.1:9200/poetry/_doc/
Content-Type: application/json
{
    "poetry_name" : "静夜思",
    "poetry_content" : "床前明月光,疑是地上霜。举头望明月,低头思故乡。"
}
POST http://127.0.0.1:9200/poetry/_doc/
Content-Type: application/json
{
    "poetry_name" : "玉阶怨",
    "poetry_content" : "玉阶生白露,夜久侵罗袜。却下水晶帘,玲珑望秋月。"
}
查询带月的诗 {#查询带月的诗}
GET http://127.0.0.1:9200/poetry/_search/
Content-Type: application/json
{
    "query" :
    {
        "term" :
        {
            "poetry_content" :
            {
                "value" : "月"
            }
        }
    }
}
带月的诗的数量 {#带月的诗的数量}
GET http://127.0.0.1:9200/poetry/_count/
Content-Type: application/json
{
    "query" :
    {
        "term" :
        {
            "poetry_content" :
            {
                "value" : "月"
            }
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327036.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号