ElasticSearch01 - 核心概念

1、什么是搜索:百度、垂直搜索(站内搜索)

搜索:通过一个关键词或一段描述,得到你想要的(相关度高)结果。

2、如何通过Mysql实现搜索功能?

如果我们使用Mysql等关系型数据库实现搜索功能,我们需要对搜索的字段进行模糊查询,比如 where name like '%王%',这样的模糊查询导致索引失效,需要进行全表查询,时间复杂度是O(N)。
另外Mysql不支持分词,所以搜索的结果必须完全包含搜索字段。

所以使用关系型数据库:性能差、不可靠、结果不准确(相关度低)

3、倒排索引

举例说明:
我们有若干数据,如图所示:


模拟存储的数据

建立倒排索引:(简单的举例)

  1. 根据brandName进行分词,得到小米、手机、NFC等
  2. 记录分词在brandName中出现的id
  3. 比如搜索小米NFC手机,会找到对应匹配的词项,从而找到有匹配度的内容


    倒排索引图示
倒排索引的数据结构

1、包含这个关键词的document list ——可以简单理解为这个关键字在哪些数据中出现过,比如小米在ID为1,2,4的文档中出现过,则包含小米的document list为1,2,4
2、关键词在每个doc中出现的次数 TF term frequency——TF越高则相关度越高
3、关键词在整个索引中出现的次数 IDF inverse doc ——IDF越高则相关度越低,可以理解为如果每一个document都有某个关键词,则用这个关键词评判相关度是没有意义的
4、关键词在当前doc中出现的次数
5、每个doc的长度,越长相关度越低
6、包含这个关键词的所有doc的平均长度

4、Lucene

本质是jar包,帮我们创建倒排索引,提供了复杂的API
如果用Lucene做集群实现搜索,会有那些问题:

① 节点一旦宕机,节点数据丢失,后果不堪设想,可用性差。
② 自己维护,自己创建管理索引,单台节点(Lucene是单点的)的承载请求的能力是有限的,需要人工做负载。

5、Elasticsearch:分布式、高性能、高可用、可伸缩、易维护 ES≠搜索引擎

(1) 分布式的搜索,存储和数据分析引擎
(2) 优点:

① 面向开发者友好,屏蔽了Lucene的复杂特性,集群自动发现(cluster discovery)
cluster discovery:在集群内启动了新的服务,集群会自动发现这个服务并把该服务加入进来
② 自动维护数据在多个节点上的建立
③ 搜索请求的负载均衡
④ 自动维护冗余副本,保证了部分节点宕机的情况下仍然不会有任何数据丢失
⑤ ES基于Lucene提供了很多高级功能:复合查询、聚合分析、基于地理位置等。
⑥ 对于大公司,可以构建几百台服务器的大型分布式集群,处理PB级别数据;对于小公司,开箱即用,门槛低上手简单。
⑦ 相遇传统数据库,提供了全文检索,同义词处理(美丽的>漂亮的),相关度排名。聚合分析以及海量数据的近实时(NTR)处理,这些传统数据库完全做不到。

(3) 应用领域:

① 百度(全文检索、高亮、搜索推荐)
② 各大网站的用户行为日志(用户点击、浏览、收藏、评论)
③ BI(Business Intelligence商业智能),数据分析:数据挖掘统计。
④ Github:代码托管平台,几千亿行代码
⑤ ELK:Elasticsearch(数据存储)、Logstash(日志采集)、Kibana(可视化)

6、ES核心概念:

(1) cluster(集群):每个集群至少包含两个节点.
(2) node:集群中的每个节点,一个节点不代表一台服务器
(3) field:一个数据字段,与index和type一起,可以定位一个doc
(4) document:ES最小的数据单元 Json
(5)Type:逻辑上的数据分类,es 7.x中删除了type的概念
(6)Index:一类相同或者类似的doc,比如一个员工索引,商品索引。

{
    #document
    "id": "1",
    "name": "小米",
    "price": {
        "标准版": 3999,
        "尊享版": 4999,
        "吴磊签名定制版": 19999
    }
}

Shard分片:

1:一个index包含多个Shard,默认5P(主分片),默认每个P分配一个R(从分片),P的数量在创建索引的时候设置,如果想修改,需要重建索引。
2:每个Shard都是一个Lucene实例,有完整的创建索引的处理请求能力。
3:ES会自动在nodes上为我们做shard 均衡。
4:一个doc是不可能同时存在于多个PShard中的,但是可以存在于多个RShard中。

你可能感兴趣的:(ElasticSearch01 - 核心概念)