海量数据检索 - “ElasticSearch”
海量数据我们是如何去检索数据呢,如何快速定位呢,去查询后台数据库吗?还是走缓存,是什么缓存能承载这么大的符合呢,并且快速检索出来?对于海量的数据是对系统极大的压力,我们该从什么角度去处理这个棘手的问题呢?
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 介绍“官网地址们”
- 官方文档
- 中文官方文档 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”相关推荐
- Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析
Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析 生鲜电商搜索引擎的特点 众所周知,标准的搜索引擎主要分成三个大的部分,第一步是爬虫系统,第二步是数据分析,第三步才 ...
- elasticsearch说了一些了,这次说说Solr【入门Solr这篇就够了】
在之前的博客中,我提到过ElasticSearch学习,请先看这一篇(win_Elasticsearch) 并在空闲之余写了一篇关于反向索引和手写分词器,具体在搜索引擎--反向索引原理揭秘及手写ik分 ...
- Elasticsearch+Spring Boot集成实践
ELK-技术栈 Elasticsearch 简介 Elasticsearch 是一个分布式.RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例. 作为 Elastic Stac ...
- elasticsearch原理及使用
目录 1 简介 1.1 Elasticsearch是什么 1.2 Elasticsearch 的用途是什么 1.3 对比同类中间件 1.3.1 ElasticSearch VS Lucene 1.3. ...
- 重温Elasticsearch
什么是 Elasticsearch ? Elasticsearch (ES) 是一个基于 Lucene 构建的开源.分布式.RESTful 接口全文搜索引擎.还是一个分布式文档数据库,其中每个字段均是 ...
- Elasticsearch专栏-1.为什么引入es
为什么引入es 现有系统架构 存在的问题 解决的方法 引入es原因 核心功能 特点 使用场景 es基本介绍 基础概念 对比mysql 常用数据类型 现有系统架构 存在的问题 现有系统采用redis+m ...
- 新一代海量数据搜索引擎 TurboSearch 来了!
本文作者:sololzluo,腾讯 AI Lab 开发工程师 一. TurboSearch 简介 AI Lab 多年一直在搜索领域进行深耕和积累,继搜搜网页搜索之后,陆续服务于微信搜一搜(公众号文章. ...
- 主流云计算厂商产品服务介绍
整体来看,云计算市场产品线大致分为:计算.网络.存储.安全.CDN.中间件.数据库.大数据.AI,再加个IoT.本文主要以产品类型为目录进行介绍,不做过多技术性解释,只做基本的产品描述以及适用场景,能 ...
- Elasticseach:从微服务架构演变到大宽表思维的架构转变
序言 图示:Elasticsearch 在DB-Engine综合排名第8 Elasticsearch 简称"ES", 在DB-Engine 综合排名第8,已经持续了相当长的时间,按 ...
- Elastic与阿里云助力汽车及出行产业数字化转型
简介:目前,阿里云和Elastic在全国已经有很多的项目正在开展合作,而在移动出行领域与享道出行的合作案例,则是代表性的. 在汽车产业变革逐步深入的当下,云计算.大数据等信息技术成为了汽车企业经历数字 ...
最新文章
- 使用Spring Boot和Project Reactor处理SQS消息
- ImageWatch的使用
- linux perl 单例模式,Perl脚本学习经验(三)--Perl中ftp的使用
- java各map中存放null值
- Java 数组排序及元素查找
- mysql条件变量单引号_mysql语法
- ACL 2021 | 信息抽取与词表学习
- Oracle 11.2.0.4.0 Dataguard部署和日常维护(6)-Active Dataguard篇
- visio教程仓库流程图_教你使用visio 2013绘制产品流程图
- 两种索引:MyISAM(非聚集索引)和InnoDB(聚集索引)的介绍
- php js广告,JavaScript_用JS调用谷歌 AdSense广告的方法, 具体的google广告的js文件做 - phpStudy...
- #.net在技术上远超Java,可是为什么大多数公司还是选择使用Java
- 由Tomcat 8005端口想到的...
- 树木根际微生物、树木-真菌互作研究方向博后和出站博后
- Android中全局搜索(QuickSearchBox)详解(一)
- 微信公众系列之百度天气预报开发
- 1024程序员狂欢节,来领当当大额优惠券
- Halcon 第三章『Morphology形态学』◆第3节:顶帽运算与底帽运算
- uni-app + uview 头像更换与头像预览
- 查找论文和代码实现的网站
热门文章
- 物联网ARM开发高级
- 那些APP活动中的刷量与作弊
- linux下载m3u8工具,m3u8命令行下载工具
- win10 Kafka环境搭建 + 编译C++(librdkafka) 封装库
- 红外传感器型号和参数_各类红外传感器比较
- c语言计算一个三位数的个十百位之和_C语言的那些经典程序
- c语言如何输出数组最大值和最小值,C语言输出数组中最大和次大的数
- Spring Security:自动登录(降低安全风险)
- phpcms移动端和pc端_phpcms 实现PC端、手机端的双模版
- dsp2812 pmsm foc之中断初始化