ES数据库

文章目录

  • ES数据库
    • 一、入门
      • 1.索引
      • 2.搜索
        • - 检索文档(id匹配)
        • - 轻量搜索(Query-string 搜索)
        • - 使用查询表达式搜索
        • - 更复杂的搜索(添加过滤)
        • - 全文搜索
        • - 短语搜索
        • - 高亮搜索
        • - 分析(聚合功能aggregation)

一、入门

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

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

ES数据库入门(elasticsearch上手指南)-2021.3.26相关推荐

  1. linux es数据库 head,elasticsearch安装es-sql插件

    说明:本示例是在CentOs Linux7.4上运行,安装的es版本为6.8.0,对应es-sql版本6.8.0,es-head版本5.0.0,需要安装JDK 下载es安装包 wget https:/ ...

  2. python连接es数据库_Python Elasticsearch API操作ES集群

    环境Centos 7.4 Python 2.7 Pip 2.7 MySQL-python 1.2.5 Elasticsearc 6.3.1 Elasitcsearch6.3.2 知识点调用Python ...

  3. linux es数据库 head,Elasticsearch 5.3.x 使用 Head 插件

    0.前言 时光荏苒,ES转眼间就从2.X跳到了5.X... 忆往昔峥嵘岁月,奈何ES社区太活跃,版本跳的比房价还快啊... 话说回来,需要部署一套Elasticsearch 5.2.1 即本月最新推出 ...

  4. Elasticsearch(ES)入门,这一篇就够了

    实时搜索引擎Elasticsearch Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进 ...

  5. 搜索引擎之ElasticSearch(es)入门学习、ELK 和 beats

    好记星不如烂笔头,这里记录平时工作中用到的东西,不喜可以留言. 一.ElasticSearch为啥要用 ElasticSearch简称es是一个ElasticSearch是一个分布式,高性能.高可用. ...

  6. Android原生UI开发框架 《Jetpack Compose入门到精通》最全上手指南

    前言 在去年的Google/IO大会上,亮相了一个全新的 Android 原生 UI 开发框架-Jetpack Compose, 与苹果的SwiftIUI一样,Jetpack Compose是一个声明 ...

  7. docker删除es数据_木杉入门Elasticsearch(4):安装ES

    木杉入门 本系列的目标是在本地搭建一个Elasticsearch的服务集群,通过在阿里云服务器搭建FRP通道对外提供服务,为小规模应用提供一种高性价比的解决思路. 系列内容: 木杉入门Elastics ...

  8. 【elasticsearch】ES数据库重建索引 -- Reindex(数据迁移)

    1.应用背景: 1.当你的数据量过大,而你的索引最初创建的分片数量不足,导致数据入库较慢的情况,此时需要扩大分片的数量,此时可以尝试使用Reindex. 2.当数据的mapping需要修改,但是大量的 ...

  9. MySQL数据同步到ES集群(MySQL数据库与ElasticSearch全文检索的同步)

    简介:MySQL数据库与ElasticSearch全文检索的同步,通过binlog的设置对MySQL数据库操作的日志进行记录,利用Python模块对日志进行操作,再利用kafka的生产者消费者模式进行 ...

最新文章

  1. arm02gnu/linux,2.1. 支持的硬件 - Debian GNU/Linux 安装手册(PPC架构)
  2. 上传文件 微信小程序input_快速上手微信小程序UI框架
  3. 秒表项目_【速看】2021年陕西中考体育怎么考?中考体育项目及考试评分标准最全整理来了!...
  4. createjs中shape的属性regX和regY
  5. 利用Python把四张图片按照顺序拼接起来
  6. java实现编辑距离算法(levenshtein distance),计算字符串或者是文本之间的相似度【附代码】
  7. java sbyte_Java Byte parseByte()方法
  8. python sphinx_Python Sphinx使用实例及问题解决
  9. 计算机无论采用何种方式接入网络,自考计算机网络实用技术考核知识点之Internet的结构及其接入方式...
  10. CTO职场解惑指南系列(二)春节篇
  11. onenote快捷键_onenote快捷键的高效用法
  12. java 短信备份宝_Android实战教程第八篇之短信备份
  13. 关于matlab影像处理imhist直方图均衡化问题
  14. SQL注入语句(详细)
  15. 小米2s刷原生安卓_小米2/2s/2a刷android4.4教程(附2/2s/2a安卓4.4卡刷包下载)
  16. Python计算离散序列的自相关函数
  17. Unity全新的版本发布计划(2018)【转自游戏蛮牛】
  18. Docker服务以及容器如何设置自动启动
  19. 关于Anaconda(Miniconda)虚拟环境中的包的问题pkgs
  20. 第1章 微处理器、微型计算机、微型计算机系统的区别

热门文章

  1. 服务器风扇状态,服务器用风扇转速
  2. Orleans 2.0 官方文档 —— 1.1 概览 - 介绍
  3. node 加密解密模块_NodeJS之crypto模块公钥加密及解密
  4. Visio画组织结构
  5. 電話號碼和手機號碼常識!
  6. 【数学建模|Python】蒙特卡洛算法
  7. 2020年招投标加分资质排行榜!
  8. win10无法调节屏幕亮度-向日葵远程桌面冲突
  9. 如何实现园区智慧化数字化运营管理?
  10. 【数据结构与算法】高斯消元法