海量数据我们是如何去检索数据呢,如何快速定位呢,去查询后台数据库吗?还是走缓存,是什么缓存能承载这么大的符合呢,并且快速检索出来?对于海量的数据是对系统极大的压力我们该从什么角度去处理这个棘手的问题呢

ElasticSearch 处理检索海量数据“神器”?

1.1 介绍

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful
web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache
Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache
Solr,也是基于Lucene。

1.2 es 介绍“官网地址们”

  1. 官方文档
  2. 中文官方文档 3.中文社区

2.1 基本介绍

1、Index(索引) 动词,相当于 MySQL 中的 insert; 名词,相当于 MySQL 中的 Database
2、Type(类型) 在 Index(索引)中,可以定义一个或多个类型。 类似于 MySQL 中的 Table;每一种类型的数据放在一起;
3、Document(文档)
保存在某个索引(Index)下,某种类型(Type)的一个数据(Document),文档是 JSON 格
式的,Document 就像是 MySQL 中的某个 Table 里面的内容;

2.2 ES是如何进行检索的呢

2.3 ElasticSearch 长啥样呢,有无操作界面

ElasticSearch
是有操作界面的,它需要配置Kibana,和它一起操作方便,也是主流的一种搭配方式,安装这两个工具,不做过多介绍

Kibana介绍 Kibana是一款开源的数据分析和可视化平台,它是Elastic Stack成员之一,设计用于和Elasticsearch协作。您可以使用Kibana对Elasticsearch索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现

2.4 初步检索

1、_cat
GET /_cat/nodes:查看所有节点
GET /_cat/health:查看 es 健康状况
GET /_cat/master:查看主节点
GET /_cat/indices:查看所有索引 show databases;
2、索引一个文档(保存)
保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识
PUT customer/external/1;在 customer 索引下的 external 类型下保存 1 号数据为
PUT 和 POST 都可以,
POST 新增。如果不指定 id,会自动生成 id。指定 id 就会修改这个数据,并新增版本号
PUT 可以新增可以修改。PUT 必须指定 id;由于 PUT 需要指定 id,我们一般都用来做修改
操作,不指定 id 会报错

2.4.1 在postMan测试数据

PUT customer/external/1
{ "name": "John Doe"
}

2.4.2、查询文档

GET customer/external/1
结果:
{ "_index": "customer", //在哪个索引
"_type": "external", //在哪个类型
"_id": "1", //记录 id
"_version": 2, //版本号
"_seq_no": 1, //并发控制字段,每次更新就会+1,用来做乐观锁
"_primary_term": 1, //同上,主分片重新分配,如重启,就会变化
"found": true, "_source": { //真正的内容
"name": "John Doe"
}
}

2.4.3、更新文档

POST customer/external/1/_update
{ "doc":{ "name": "John Doew"
}
}
或者
POST customer/external/1
{ "name": "John Doe2"
}
或者
PUT customer/external/1
{ "name": "John Doe"
}
 不同:POST 操作会对比源文档数据,如果相同不会有什么操作,文档 version 不增加
PUT 操作总会将数据重新保存并增加 version 版本;
带_update 对比元数据如果一样就不进行任何操作。
看场景;
对于大并发更新,不带 update;
对于大并发查询偶尔更新,带 update;对比更新,重新计算分配规则。
 更新同时增加属性
POST customer/external/1/_update
{ "doc": { "name": "Jane Doe", "age": 20 }
}
PUT 和 POST 不带_update 也可以

2.4.4、删除文档&索引

DELETE customer/external/1
DELETE customer

2.4.5 bulk 批量 API

POST customer/external/_bulk
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
语法格式:
{ action: { metadata }}\n
{ request body }\n
{ action: { metadata }}\n
{ request body }\n
复杂实例:
POST /_bulk
{ "delete": { "_index": "website", "_type": "blog", "_id": "123" }}
{ "create": { "_index": "website", "_type": "blog", "_id": "123" }}
{ "title": "My first blog post" }
{ "index": { "_index": "website", "_type": "blog" }}
{ "title": "My second blog post" }
{ "update": { "_index": "website", "_type": "blog", "_id": "123", "_retry_on_conflict" : 3} }
{ "doc" : {"title" : "My updated blog post"} }
bulk API 以此按顺序执行所有的 action(动作)。如果一个单个的动作因任何原因而失败,
它将继续处理它后面剩余的动作。当 bulk API 返回时,它将提供每个动作的状态(与发送
的顺序相同),所以您可以检查是否一个指定的动作是不是失败了。

2.4 SearchAPI

ES 支持两种基本方式检索 :
 一个是通过使用 REST request URI 发送搜索参数(uri+检索参数)
 另一个是通过使用 REST request body 来发送它们(uri+请求体)
1)、检索信息
 一切检索从_search 开始
GET bank/_search 检索 bank 下所有信息,包括 type 和 docs
GET bank/_search?q=*&sort=account_number:asc 请求参数方式检索
响应结果解释:
took - Elasticsearch 执行搜索的时间(毫秒)
time_out - 告诉我们搜索是否超时
_shards - 告诉我们多少个分片被搜索了,以及统计了成功/失败的搜索分片
hits - 搜索结果
hits.total - 搜索结果
hits.hits - 实际的搜索结果数组(默认为前 10 的文档)
sort - 结果的排序 key(键)(没有则按 score 排序)
score 和 max_score –相关性得分和最高得分(全文检索用)

其他在Kibana操作的语句,都可以在es官网去查询,不做过多的赘述!!!

2.5、Mapping映射

Mapping(映射) Mapping 是用来定义一个文档(document),以及它所包含的属性(field)是如何存储和
索引的。比如,使用 mapping 来定义:  哪些字符串属性应该被看做全文本属性(full text fields)。 
哪些属性包含数字,日期或者地理位置。  文档中的所有属性是否都能被索引(_all 配置)。  日期的格式。 
自定义映射规则来执行动态添加属性。

2.6 分词

个 tokenizer(分词器)接收一个字符流,将之分割为独立的 tokens(词元,通常是独立 的单词),然后输出 tokens 流。
例如,whitespace tokenizer 遇到空白字符时分割文本。它会将文本 “Quick brown fox!” 分割 为
[Quick, brown, fox!]。 该 tokenizer(分词器)还负责记录各个 term(词条)的顺序或 position
位置(用于 phrase 短 语和 word proximity 词近邻查询),以及 term(词条)所代表的原始 word(单词)的
start (起始)和 end(结束)的 character offsets(字符偏移量)(用于高亮显示搜索的内容)。
Elasticsearch 提供了很多内置的分词器,可以用来构建 custom analyzers(自定义分词器)。


2.6.1 安装分词器

注意:不能用默认 elasticsearch-plugin install xxx.zip 进行自动安装
https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v6.4.2
对应 es 版本安装

总结

elasticsearch
功能是非常强大的,可以作为生成环境的ELK日志存储,方便检索,也可以部署集群,提高效率,最主要是它是走内存的,查询效率极高,为大数据检索而生!!!

使用场景(Es)


明天就要上班了,@lcc 很可惜

海量数据检索 - “ElasticSearch”相关推荐

  1. Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析

    Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析 生鲜电商搜索引擎的特点 众所周知,标准的搜索引擎主要分成三个大的部分,第一步是爬虫系统,第二步是数据分析,第三步才 ...

  2. elasticsearch说了一些了,这次说说Solr【入门Solr这篇就够了】

    在之前的博客中,我提到过ElasticSearch学习,请先看这一篇(win_Elasticsearch) 并在空闲之余写了一篇关于反向索引和手写分词器,具体在搜索引擎--反向索引原理揭秘及手写ik分 ...

  3. Elasticsearch+Spring Boot集成实践

    ELK-技术栈 Elasticsearch 简介 ​ Elasticsearch 是一个分布式.RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例. 作为 Elastic Stac ...

  4. elasticsearch原理及使用

    目录 1 简介 1.1 Elasticsearch是什么 1.2 Elasticsearch 的用途是什么 1.3 对比同类中间件 1.3.1 ElasticSearch VS Lucene 1.3. ...

  5. 重温Elasticsearch

    什么是 Elasticsearch ? Elasticsearch (ES) 是一个基于 Lucene 构建的开源.分布式.RESTful 接口全文搜索引擎.还是一个分布式文档数据库,其中每个字段均是 ...

  6. Elasticsearch专栏-1.为什么引入es

    为什么引入es 现有系统架构 存在的问题 解决的方法 引入es原因 核心功能 特点 使用场景 es基本介绍 基础概念 对比mysql 常用数据类型 现有系统架构 存在的问题 现有系统采用redis+m ...

  7. 新一代海量数据搜索引擎 TurboSearch 来了!

    本文作者:sololzluo,腾讯 AI Lab 开发工程师 一. TurboSearch 简介 AI Lab 多年一直在搜索领域进行深耕和积累,继搜搜网页搜索之后,陆续服务于微信搜一搜(公众号文章. ...

  8. 主流云计算厂商产品服务介绍

    整体来看,云计算市场产品线大致分为:计算.网络.存储.安全.CDN.中间件.数据库.大数据.AI,再加个IoT.本文主要以产品类型为目录进行介绍,不做过多技术性解释,只做基本的产品描述以及适用场景,能 ...

  9. Elasticseach:从微服务架构演变到大宽表思维的架构转变

    序言 图示:Elasticsearch 在DB-Engine综合排名第8 Elasticsearch 简称"ES", 在DB-Engine 综合排名第8,已经持续了相当长的时间,按 ...

  10. Elastic与阿里云助力汽车及出行产业数字化转型

    简介:目前,阿里云和Elastic在全国已经有很多的项目正在开展合作,而在移动出行领域与享道出行的合作案例,则是代表性的. 在汽车产业变革逐步深入的当下,云计算.大数据等信息技术成为了汽车企业经历数字 ...

最新文章

  1. 使用Spring Boot和Project Reactor处理SQS消息
  2. ImageWatch的使用
  3. linux perl 单例模式,Perl脚本学习经验(三)--Perl中ftp的使用
  4. java各map中存放null值
  5. Java 数组排序及元素查找
  6. mysql条件变量单引号_mysql语法
  7. ACL 2021 | 信息抽取与词表学习
  8. Oracle 11.2.0.4.0 Dataguard部署和日常维护(6)-Active Dataguard篇
  9. visio教程仓库流程图_教你使用visio 2013绘制产品流程图
  10. 两种索引:MyISAM(非聚集索引)和InnoDB(聚集索引)的介绍
  11. php js广告,JavaScript_用JS调用谷歌 AdSense广告的方法, 具体的google广告的js文件做 - phpStudy...
  12. #.net在技术上远超Java,可是为什么大多数公司还是选择使用Java
  13. 由Tomcat 8005端口想到的...
  14. 树木根际微生物、树木-真菌互作研究方向博后和出站博后
  15. Android中全局搜索(QuickSearchBox)详解(一)
  16. 微信公众系列之百度天气预报开发
  17. 1024程序员狂欢节,来领当当大额优惠券
  18. Halcon 第三章『Morphology形态学』◆第3节:顶帽运算与底帽运算
  19. uni-app + uview 头像更换与头像预览
  20. 查找论文和代码实现的网站

热门文章

  1. 物联网ARM开发高级
  2. 那些APP活动中的刷量与作弊
  3. linux下载m3u8工具,m3u8命令行下载工具
  4. win10 Kafka环境搭建 + 编译C++(librdkafka) 封装库
  5. 红外传感器型号和参数_各类红外传感器比较
  6. c语言计算一个三位数的个十百位之和_C语言的那些经典程序
  7. c语言如何输出数组最大值和最小值,C语言输出数组中最大和次大的数
  8. Spring Security:自动登录(降低安全风险)
  9. phpcms移动端和pc端_phpcms 实现PC端、手机端的双模版
  10. dsp2812 pmsm foc之中断初始化