白日梦的Elasticsearch实战笔记,ES账号免费借用、32个查询案例、15个聚合案例、7个查询优化技巧。(一)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 白日梦的Elasticsearch实战笔记,ES账号免费借用、32个查询案例、15个聚合案例、7个查询优化技巧。(一)

一、导读#


Hi!大家久等了!时隔10天,白日梦的Elasticsearch笔记进阶篇终于甘完了!本次更新依然是干货满满!



下面会和大家分享 32种查询方法、15中聚合方式、7种优化后的查询技巧。欢迎大家转发支持!


如果对ES中的各种概念不太清楚可以去看上一篇文章,白日梦的ES笔记-基础篇,并且有些概念不理解并不会影响你看懂本文中为大家介绍的各种查询方式。


下一篇(白日梦的ES系列笔记第三篇)文章会跟大家一起杀回到基础部分,系统的做一次概念上的扫盲!


最后一篇(ES系列笔记第四篇)以编程语言实战为主,不出意外的话会以视频的方式和大家见面。

欢迎关注白日梦!第一时间追更新!



二、福利:账号借用#


好消息!!!如果你嫌安装ES麻烦,想使用现成的ES学习,可以免费白嫖白日梦的搭建在公网上的ES实例(有效期还有340多天,预计到2022年初才过期哦)。关注此公号后台回复:白嫖 可得到账号密码。



Notice!!!我不能保证它一定是安全可用哦,毕竟IP直接暴露在公网上是极有可能被黑的。如果你发现服务不可用,可以跟我说一下。我提前做好了镜像,可快速将系统回复如初。(为了安全,我也会不定期更新IP、账号密码)所以大家拿它用来学习还行,不要往上面放重要的数据哈!


关注白日梦后台回复:白嫖 ,即可领取账号密码。

关注白日梦后台回复:白嫖 ,即可领取账号密码。

关注白日梦后台回复:白嫖 ,即可领取账号密码。

点击链接阅读原文:可以找到我公众号的二维码。


另外我也推荐大家阅读原文,json的格式会好看很多!


三、_search api 搜索api#


search api也是我们最需要了解和掌握的APi。因为绝大部分时间你使用ES就是为了检索嘛,所以下面一起看一下ES有哪些检索API,当然最终的目的是大家有拥有选择出一种适合自己业务的检索方式的能力。

我又来吹牛了!



如果你不学白日梦跟你介绍的这些查询方式、技巧。我敢说你八成不懂别人用Java或者Golang写出来的代码。


相反如果你看懂了下面的几十个Case后,我敢说你自己可以分分钟独立的用熟悉的编程语言写出对应的查询代码!


3.1、什么是query string search?#


所谓的query string search其实就是ES为我们提供的一种检索方式。下面这行请求就是典型的通过 query string search的方式进行检索。

其实这种检索方式很少用。直观上看 query string search 这种检索方式的特点就是它的请求参数全部写在URI中。


GET /your_index/your_type/_search?q=*&sort=account_number:asc&pretty


解读一下上面的 query string search: q=* ,表示匹配index=bank的下的所有doc,sort=account_number:asc表示告诉ES,结果按照account_number字段升序排序,pretty是告诉ES,返回一个漂亮的json格式的数据。


上面的q还可以写成下面这样:


GET /your_index/your_type/_search?q=自定义field:期望的值
GET /your_index/your_type/_search?q=+自定义field:期望的值
GET /your_index/your_type/_search?q=-自定义field:期望的值


解读ES返回的响应如下(包括后面的query dsl的几十种查询案例的返回值也长这样,并且下面不再重复分析这个返回值都有啥字段了,所以推荐你好好看下这个返回值再去浏览本文的重头戏:query dsl 和 查询优化技巧哈):


{
  "took" : 63,// 耗费的时间
  // 是否超时了,默认情况下不存在time_out,比如你的搜索耗时1分钟,它就等1分钟,但是不超时
  // 在发送搜索请求时可以指定超时时间
  // 比如你指定了10ms超时,它就会把这10ms内获得的数据返回给你
  "timed_out" : false,
  "_shards" : { // 你的搜索请求打到了几个shard上面去。
    // Primary Shard可以承接读、写流量。Replica Shard会承接读流量。
    // 因为我是默认配置,有五个primary shard。
    // 所以它的搜索请求会被打到5个分片上去,并且都成功了
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,// 跳过了0个
    "failed" : 0 // 失败了0个
  },
  "hits" : {//命中的情况
    "total" : 1000,// 命中率 1000个
    // _score 全文检索时使用,这个相关性得分越高,说明doc和检索的内容的越相关、越匹配
    // max_score就是最大的 _score
    "max_score" : null,
    // 默认查询前10条,直接返回每个doc的完整数据
    "hits" : [ {   
      "_index" : "bank",// 索引
      "_type" : "_doc",// type
      "_id" : "0",// id 
      "sort": [0],
      "_score" : null,// 相关性得分
      // _source里面存放的是doc的具体数据
      "_source" :     {"account_number":0,
                       "balance":16623,
                       "firstname":"Bradshaw",
                       "lastname":"Mckenzie",
                       "age":29,
                       "gender":"F",
                       "address":"244 Columbus Place",
                       "employer":"Euron",
                       "email":"bradshawmckenzie@euron.com",
                       "city":"Hobucken",
                       "state":"CO"}
        },
     {
      "_index" : "bank",
      "_type" : "_doc",
      "_id" : "1",
      "sort": [1],
      "_score" : null,
      "_source" : {"account_number":1,
                   "balance":39225,
                   "firstname":"Amber",
                   "lastname":"Duke",
                   "age":32,
                   "gender":"M",
                   "address":"880 Holmes Lane",
                   "employer":"Pyrami",
                   "email":"amberduke@pyrami.com",
                   "city":"Brogan",
                   "state":"IL"}
    }, ...
    ]
  }
}


指定超时时间: GET /_search?timeout=10ms 在进行优化时,可以考虑使用timeout, 比如: 正常来说我们可以在10s内获取2000条数据,但是指定了timeout,发生超时后我们可以获取10ms中获取到的 100条数据。


3.2、什么是query dsl?#


dsl 全程 domain specified language

不论是query string search 还是这小节的query specified language它们本质上都是在发送Resutful类型的网络请求。相对于 query string search 的将所有的请求参数都写在URI中,query dsl 一般长下面这样:


GET /yourIndex/yourType/_search
{
  // 很多请求参数
}

说的直白一点,query string search 更像是http中的GET请求,因为它没有请求体。而本小节的query dsl 更像是http 中的POST请求。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
12天前
|
存储 SQL 监控
|
1月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
174 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
1月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
117 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
1月前
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
49 0
|
1月前
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
34 0
|
2月前
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
|
2月前
|
JSON 自然语言处理 数据库
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
概念、ik分词器、倒排索引、索引和文档的增删改查、RestClient对索引和文档的增删改查
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
|
3月前
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
119 1
|
3月前
|
机器学习/深度学习 存储 搜索推荐
Elasticsearch与深度学习框架的集成案例研究
Elasticsearch 是一个强大的搜索引擎和分析引擎,广泛应用于实时数据处理和全文搜索。深度学习框架如 TensorFlow 和 PyTorch 则被用来构建复杂的机器学习模型。本文将探讨如何将 Elasticsearch 与这些深度学习框架集成,以实现高级的数据分析和预测任务。
39 0