ES数据库入门(elasticsearch上手指南)-2021.3.26[通俗易懂]

ES数据库入门(elasticsearch上手指南)-2021.3.26[通俗易懂]ES数据库文章目录ES数据库一、入门1.索引2.搜索-检索文档(id匹配)-轻量搜索(Query-string搜索)-使用查询表达式搜索-更复杂的搜索(添加过滤)-全文搜索-短语搜索-高亮搜索-分析(聚合功能aggregation)一、入门1.索引索引:名词时,类似于传统数据库中的数据库概念;​ 动词类似于插入这一概念。eg:对于员工目录,我们将做如下操作:每个员工索引一个文档,文档包含该员工的所有信息。每个文档都将是employee类型。该类型位于索引

大家好,又见面了,我是你们的朋友全栈君。

ES数据

一、入门

1.索引

索引:名词时,类似于传统数据库中的数据库概念;

​ 动词类似于插入这一概念。

eg:

对于员工目录,我们将做如下操作:

  • 每个员工索引一个文档,文档包含该员工的所有信息。
  • 每个文档都将是 employee 类型
  • 该类型位于 索引 megacorp 内。
  • 该索引保存在我们的 Elasticsearch 集群中。

操作如下:

PUT /megacorp/employee/1     -- 这里包含了索引名称、类型名词、特定雇员id
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}    -- 这里为具体内容

注意,路径 /megacorp/employee/1 包含了三部分的信息:

  • megacorp

    索引名称

  • employee

    类型名称

  • 1

    特定雇员的ID

请求体 —— JSON 文档 —— 包含了这位员工的所有详细信息,他的名字叫 John Smith ,今年 25 岁,喜欢攀岩。

2.搜索
– 检索文档(id匹配)

执行 一个 HTTP GET 请求并指定文档的地址——索引库、类型和ID。 使用这三个信息可以返回原始的 JSON 文档

GET /megacorp/employee/1

​ 返回结果包含了文档的一些元数据,以及 _source 属性,内容是 John Smith 雇员的原始 JSON 文档:

{
  "_index" :   "megacorp",
  "_type" :    "employee",
  "_id" :      "1",
  "_version" : 1,
  "found" :    true,
  "_source" :  {             
      "first_name" :  "John",
      "last_name" :   "Smith",
      "age" :         25,
      "about" :       "I love to go rock climbing",
      "interests":  [ "sports", "music" ]
  }
}

_source里面是原json文档

将 HTTP 命令由 PUT 改为 GET 可以用来检索文档,同样的,可以使用 DELETE 命令来删除文档,以及使用 HEAD 指令来检查文档是否存在。如果想更新已存在的文档,只需再次 PUT

– 轻量搜索(Query-string 搜索)

a.查询所有雇员信息(返回结果包括了所有三个文档,放在数组 hits 中。一个搜索默认返回十条结果。)

GET /megacorp/employee/_search

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

b.带初步的筛选

GET /megacorp/employee/_search?q=last_name:Smith

仍然在请求路径中使用 _search 端点,并将查询本身赋值给参数 q= 。返回结果给出了所有的 Smith:

在这里插入图片描述

– 使用查询表达式搜索

领域特定语言 (DSL), 使用 JSON 构造了一个请求。我们可以像这样重写之前的查询所有名为 Smith 的搜索 :

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}

请求使用 JSON 构造,并使用了一个 match 查询(属于查询类型之一,后面将继续介绍)。

– 更复杂的搜索(添加过滤)

同样搜索姓氏为 Smith 的员工,但这次我们只需要年龄大于 30 的。查询需要稍作调整,使用过滤器 filter ,它支持高效地执行一个结构化查询。

GET /megacorp/employee/_search
{
    "query" : {
        "bool": {
            "must": {
                "match" : {
                    "last_name" : "smith" 
                }
            },
            "filter": {
                "range" : {
                    "age" : { "gt" : 30 } 
                }
            }
        }
    }
}

a. 这部分与我们之前使用的 match 查询 一样。

b. 这部分是一个 range 过滤器 , 它能找到年龄大于 30 的文档,其中 gt 表示_大于_(great than)。

现在结果只返回了一名员工,叫 Jane Smith,32 岁。

– 全文搜索

全文搜索,搜索下所有喜欢攀岩(rock climbing)的员工

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "about" : "rock climbing"
        }
    }
}

使用match 查询在about 属性上搜索 “rock climbing” 。

在这里插入图片描述

这是一个很好的案例,阐明了 Elasticsearch 如何 全文属性上搜索并返回相关性最强的结果。Elasticsearch中的 相关性 概念非常重要,也是完全区别于传统关系型数据库的一个概念,数据库中的一条记录要么匹配要么不匹配。

– 短语搜索

想要精确匹配一系列单词或者_短语_ ,以短语 “rock climbing” 的形式进行匹配。

GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    }
}

毫无悬念,返回结果仅有 John Smith 的文档。

– 高亮搜索

在每个搜索结果中 高亮 部分文本片段,以便让用户知道为何该文档符合查询条件。在 Elasticsearch 中检索出高亮片段也很容易。

再次执行前面的查询,并增加一个新的 highlight 参数:

GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    },
    "highlight": {
        "fields" : {
            "about" : {}
        }
    }
}

当执行该查询时,返回结果与之前一样,与此同时结果中还多了一个叫做 highlight 的部分。这个部分包含了 about 属性匹配的文本片段,并以 HTML 标签 <em></em> 封装:

在这里插入图片描述

– 分析(聚合功能aggregation)

聚合与 SQL 中的 GROUP BY 类似但更强大。

挖掘出员工中最受欢迎的兴趣爱好:

GET /megacorp/employee/_search
{
  "aggs": {
    "all_interests": {
      "terms": { "field": "interests" }
    }
  }
}

返回

在这里插入图片描述

两位员工对音乐感兴趣,一位对林业感兴趣,一位对运动感兴趣。

叫 Smith 的员工中最受欢迎的兴趣爱好,可以直接构造一个组合查询:

GET /megacorp/employee/_search
{
  "query": {
    "match": {
      "last_name": "smith"
    }
  },
  "aggs": {
    "all_interests": {
      "terms": {
        "field": "interests"
      }
    }
  }
}

在这里插入图片描述

聚合还支持分级汇总 。比如,查询特定兴趣爱好员工的平均年龄:

GET /megacorp/employee/_search
{
    "aggs" : {
        "all_interests" : {
            "terms" : { "field" : "interests" },
            "aggs" : {
                "avg_age" : {
                    "avg" : { "field" : "age" }
                }
            }
        }
    }
}

在这里插入图片描述

参考:
参考文档1

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135189.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Mybatis 拦截器简述[通俗易懂]

    Mybatis 拦截器简述[通俗易懂]一、Mybatis拦截器可以做到什么慢查询,SQL异常监控数据预处理(加密,自生成字段)数据脱敏数据权限过滤二、MybatisSQL执行流程这里重点关注InterceptorChain,它会为Mybatis的四大对象织入代理。我们自定义生成的拦截器也将通过InterceptorChain织入。三、Mybatis拦截器使用方式拦截粒度为方法签名自定义拦截器需使用@Intercepts和@Signature注解来指定拦截类和方法。例如拦截Exceptor的query和update

    2025年10月9日
    3
  • 基于单片机的电子时钟设计(keil+protues仿真,含代码及原理图)

    基于单片机的电子时钟设计(keil+protues仿真,含代码及原理图)  本学期单片机课程要求做课程设计,我选取的课题如下:基于单片机的电子时钟设计,要求:(1)实时显示当前时间;(2)能够对时间进行设置;(3)包括年月日,小时,分钟,秒.(4)整点提醒功能.经过一周的时间已实现上述功能,故在此分享一下;所选用器材单片机最小系统(这就不用细说了吧,这里我选用AT89C51),排阻,四个按钮开关,8位共阴数码管,蜂鸣器;prot……

    2022年6月28日
    28
  • 计算两个日期中间的天数_excel两个日期相减计算天数

    计算两个日期中间的天数_excel两个日期相减计算天数25:计算两个日期之间的天数25:计算两个日期之间的天数查看提交统计提问查看提交统计提问总时间限制: 1000ms 内存限制: 65536kB描述给

    2022年8月4日
    6
  • CodeForces 191C 树链剖分 第4遍「建议收藏」

    CodeForces 191C 树链剖分 第4遍

    2022年1月26日
    49
  • linux常用命令菜鸟教程_初学者化妆必备用品清单

    linux常用命令菜鸟教程_初学者化妆必备用品清单一.学习Linux终端命令的原因1.Linux刚面世时并没有图形界面,所有的操作全靠命令完成,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等2.在职场中,大量的服务器维护工作都是在远程通过SSH客户端来完成的,并没有图形界面,所有的维护工作都需要通过命令来完成在职场中,作为后端程序员,必须要或多或少的掌握一些Linux常用的终端命令。3.Linux发行版本的命令大概有200多个,但是常用的命令只有10多个而已二.linux常用指令ls命令…

    2022年8月21日
    7
  • java分布式(java入门)

    java分布式(java入门)【声明:版权所有,欢迎转载,请勿用于商业用途。联系信箱:feixiaoxing@163.com】说起来,在大学里面我学过的编程语言只有c++和java。这其中c++是作为必修课学的,而java是作为选修课学的。至于后面的c、汇编、python、js这些语言,那都是工作了之后才学的。至于这些语言有什么用,在什么场景下使用效率最高,其实说实话,当时心里不是很清楚,等到真正明白过…

    2022年5月1日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号