ElasticSearch介绍

  1. 什么是搜索?
  2. 如果使用数据库做搜索会怎样?
  3. 什么是全文检索和Lucene
  4. 什么是ElasticSearch?

1. 什么是搜索?

百度、google上查询任何需要的内容信息。这种是通用的搜索。但是百度只是一个通用的搜索引擎,并不等于搜索。

垂直搜索(站内搜索): 在指定领域或内容区域搜索内容,

互联网的搜索:

​ 比如淘宝,拉钩,今日头条等。

IT系统的搜索:

​ OA软件,办公自动化软件,会议管理,日程管理,项目管理等。

搜索:就是在任何场景下,找寻你想要的信息,这个时候,会输入一段你想要的关键字,然后就期望找到这个关键字相关的信息。

2. 如果使用数据库做搜索会怎样?

关系型数据库: RDBS

select * from a where product_name LIKE "%关键字%"

上面,如果没有做索引的话,就会每条记录都会去查询匹配。

建了索引的,可以提高查询的效率,随着数据的增加的,时间也会增加。

另外一个问题,如果关键词是严格匹配的。不能将搜索词拆分开来。尽可能去搜索更多的符合预期的结果。

缓存型数据库: NOSQL

3. 全文检索和Lunence

倒排索引:

词条,索引

全文检索:

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。

(2)Lucene,就是一个jar包,里面封装好的各种倒排索引,以及进行搜索的代码,包括各种算法。我们就用java开发的时候,引入lucene jar,然后基于lucene进行开发就可以了。用lucene,我们就可以将已有的数据建立缩影,lucene会在本地磁盘上面,给我们组织缩影的数据结构,另外的话,我们也可以用lucene提供的功能和api来针对磁盘上额。

Lucene是封装了搜索引擎大的功能。

4.什么是ElasticSearch?

数据量很大的,多台服务器上存放数据,

  1. 数据的搜索
  2. 高可用

数据量很大的时候,超过单台机器的承受的能力。必须用多台的机器的搜索和管理。

1.数据丢失

如何高性能的建立索引,以及执行搜索

特点:

1.自动维护数据的分布到多个节点的索引的建立,还有搜索请求分布到多个节点的执行。

2.自动维护数据的冗余副本,保证说,一些机器的宕机了,不会丢失任何数据。

3.封装了更多的高级功能,以给我们提供更多高级的支持,让我们快速的开发应用,开发更加复杂的应用。

ElasticSearch介绍

  1. ES功能
  2. 使用场景
  3. 特点

1. ES的功能

  1. 分布式的搜索引擎和数据分析引擎 搜索,百度,网站的站内搜索,IT系统检索,数据分析 分布式、搜索、数据分析
  2. 全文检索、结构化检索、数据分析 全文检索: 查询所有商品的包含mac的商品 select * from products where product_name like "%mac%" 结构化搜索 部分匹配、自动完成、搜索纠错、搜索推荐 数据分析:数据统计、聚合等
  3. 对海量数据进行近实时的处理 分布式:ES自动可以将海量数据分散到多台服务器上去存储和检索。 海量数据的处理,分布式以后,就可以采用大量的服务器去存储和检索数据,自然而然可以实现海量数据的处理。 近实时:检索一个数据 (离线数据批处理 batch-processing)

2. ES的适用场景

  • 维基百科
  • The Guardian、新闻
  • Stack Overflow
  • Github
  • 电商网站、检索商品
  • 日志数据分析、logstash采集日志、ES进行复杂的数据分析(ELK)
  • 商品价格监控网站、用户设定价格阈值
  • BI系统、商业智能、ES执行数据分析和挖掘

3. ES特点

  1. 可以作为一个大型的分布式集群(数百台服务器)技术,处理PB级数据,服务大公司,可以运行在单机上,服务小公司。
  2. ES不是什么新技术,主要是将全文检索、数据分析以及分布式技术合并在一起,才形成了独一无二的ES.lucene(全文检索)、商用的数据分析软件、分布式数据库 (mycat)
  3. 对用户而言,是开箱即用,非常简单,作为中小型的应用,直接3分钟部署ES,就可以作为生产环境的系统使用,数据量不大,操作不是很复杂。
  4. 数据库的功能面对很多领域是不够用的(事务,还有各种联机事务的操作):特殊的功能,比如全文检索、同义词处理、相关度排名、复杂数据分析、海量数据近实时处理;ES作为传统数据库的一个补充,提供了数据库所不能提供的很多功能。

ES的核心概念

1.  Lucene和es的前世今生

2.  es的核心概念

3.  es的核心概念 vs 数据库核心概念

1. lucene和ES的前世今生

lucene,最先进、功能最强大,基于lucene开发非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理解原理(各种索引结构)

ES,基于lucene,隐藏了复杂性,提供了简单易用的restful api接口、java api接口(还有其他语言的api接口)

  • 分布式的文档存储引擎
  • 分布式的搜索引擎和分析引擎
  • 分布式、支持PB级数据

开箱即用,优秀的默认参数,不需要任何额外设置,完全开源。

2. ES的核心概念

  • Near Realtime(NRT):近实时,两个意思,从写入数据到数据可以被搜索到有一个小延迟(大概1秒):基于ES执行搜索和分析可以达到秒级
  • Cluster:集群:包括多个节点,每个节点属于哪个集群(集群名称,默认是elasticsearch)来决定的,对于中小型应用来说,刚开始一个集群就是一个节点很正常。
  • Node:节点,集群中的一个节点,节点也有一个名称(默认随机分布的),节点名称很重要,在执行运维管理的时候,默认节点会加入一个名称为"elasticsearch"的集群,如果直接启动一堆节点,那么他们会自动组成一个elasticsearch集群,当然一个节点也可以组成一个集群。
  • Document:文档,ES中最小的数据单元,一个document通常是使用json的数据格式表示的。每个index下的type,都可以存储多个document. 一个document中有很多字段field,一个field就是一个数据字段。
{
name: "JmyvpeE",
cluster_name: "elasticsearch_youdi",
cluster_uuid: "spAvb2wnQe-xVghYxleJ5A",
version: {
number: "6.2.4",
build_hash: "ccec39f",
build_date: "2018-04-12T20:37:28.497551Z",
build_snapshot: false,
lucene_version: "7.2.1",
minimum_wire_compatibility_version: "5.6.0",
minimum_index_compatibility_version: "5.0.0"
},
tagline: "You Know, for Search"
}
  • Index:索引,包含一堆相似的结构的文档数据。一个index包含多个document,一个index就代表一类类似的或者相同的document,
  • Type: 类型,每个索引里面都有一个或者多个type,type是index的一个逻辑数据分类,一个type 下的document,都有相同的field,比如博客系统,有一个用户数据type,博客数据type,评论数据type. 商品index,里面存放了所有商品,商品document,但是商品分类有很多种,每个种类的document的field可能不太一样,比如电器商品,可能还包含一些售后时间的field,等等 type,日化商品type,电器商品type Pid,name,desc,category, Pid,name,desc,category, serivice_time Pid,name,desc,category, eat_time ​ 每个type里面都包含一堆document
  • shard: index会被拆分多个shard,每个shard就会存放这个index的一部分数据,这些shard会分散在多台服务器上 优点:
    • 横向扩展,比如说数据增加,可以重新建立多shard的索引
    • 数据分布在多个shard上,多台服务器上,所有的操作,就会在多台服务器上并行分布式执行,提升吞吐量和性能。
  • repi: 如果某个节点宕机,一部分数据彻底丢失。 sahrd其实叫primary shard,一般简称shard,replica其实叫replica shard,简称:replicate
    • 高可用,一个shard宕机,数据不丢失,服务继续提供
    • 提升了搜索这类请求的吞吐量和性能
  • ES核心概念 VS 数据库概念 ES 关系数据库 Document row Type table index 库

ES的安装和使用

ES特点之一就是开箱即用 http://127.0.0.1:9200?pretty

{
    name: "JmyvpeE",
    cluster_name: "elasticsearch_youdi",
    cluster_uuid: "spAvb2wnQe-xVghYxleJ5A",
    version: {
    number: "6.2.4",
    build_hash: "ccec39f",
    build_date: "2018-04-12T20:37:28.497551Z",
    build_snapshot: false,
    lucene_version: "7.2.1",
    minimum_wire_compatibility_version: "5.6.0",
    minimum_index_compatibility_version: "5.0.0"
    },
    tagline: "You Know, for Search"
}

name: node名称 cluster_name 集群名称

 ES的配置文件
 修改集群名称:elastic search.yml

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序你好

微服务架构入门(Micro-Architecture)

14250
来自专栏杨建荣的学习笔记

和开发同学讨论的一个技术问题(r8笔记第73天)

今天下午的时候,有一位开发同事找我,说有一个技术问题想请教一下。 当然正如他所说,这个问题比较奇怪,而且已经影响了他的测试流程,他说有一个表查看对应的表空...

30050
来自专栏鸿的学习笔记

聊聊分布式系统的时钟问题

诸如此类的问题,还能提出很多,因此需要一个靠谱的时钟来保证分布式系统里事件的处理不会出错。

16810
来自专栏Golang语言社区

7大决定决定服务器性能的指标,你测试过几个?

一,服务器PING值 PING测试在一定程度上可以代表服务器的宽带速度。 使用站长工具提供的Ping服务(http://ping.chinaz.com),来测试...

54750
来自专栏Brian

Effective Debugging-高效调试

概述 最近在看《Effective Debugging》,作者(Diomidis Spinellis)将30多年的系统开发和调试的经验融入到书中,从策略、方法以...

36580
来自专栏前端黑板报

搜索技巧

外事不决问谷歌,内事不决还问谷歌。 如何问? 我们的提问如何能被搜索引擎更好的识别或者说如何更准确的得到我们想要的答案,快速解决我们的问题。下面就带来一些搜索的...

20770
来自专栏喵了个咪的博客空间

Goalng软件包推荐

前言 哈喽大家好呀! 马上要迎来狗年了大家是不是已经怀着过年的心情了呢? 今天笔者给大家带来了一份礼物, Goalng的软件包推荐, 主要总结了一下在go语言中...

42540
来自专栏java一日一条

微信、QQ这类IM App怎么做——谈谈Websocket

关于我和WebSocket的缘:我从大二在计算机网络课上听老师讲过之后,第一次使用就到了毕业之后的第一份工作。直到最近换了工作,到了一家是含有IM社交聊天功能的...

35020
来自专栏高性能服务器开发

9 百万用户级游戏服务器架构设计

所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求。所以,结构本无所谓正确与错误;当然,优秀的结构更有助于系统的搭建,对系统的可扩展性及可...

99450
来自专栏北京马哥教育

从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点。 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在...

71250

扫码关注云+社区

领取腾讯云代金券