es 总结

1. Elasticsearch中的每个分片其实都是Lucene中的一个索引文件

2.当构建索引进行写入操作时,首先在主分片上完成数据的索引,然后数据会从主分片分发到备份分片上进行索引

3.

Settings

Settings是对集群中索引的定义信息,比如一个索引默认的分片数、副本数等。

Mapping

Mapping表示中保存了定义索引中字段(Field)的存储类型、分词方式、是否存储等信息,有点类似于关系数据库(如MySQL)中的表结构信息。

在Elasticsearch中,Mapping是可以动态识别的。如果没有特殊需求,则不需要手动创建Mapping,因为Elasticsearch会根据数据格式自动识别它的类型。一个索引的Mapping一旦创建,若已经存储了数据,就不可修改了。

Analyzer

Analyzer表示的是字段分词方式的定义。一个Analyzer通常由一个Tokenizer和零到多个Filter组成。在Elasticsearch中,默认的标准Analyzer包含一个标准的Tokenizer和三个Filter,即Standard Token Filter、Lower Case Token Filter和Stop TokenFilter。

4.

节点类型

在Elasticsearch中,每个节点可以有多个角色,节点既可以是候选主节点,也可以是数据节点。

数据节点负责数据的存储相关的操作,如对数据进行增、删、改、查和聚合等。其中,数据节点负责数据的存储相关的操作,如对数据进行增、删、改、查和聚合等。正因为如此,数据节点往往对服务器的配置要求比较高,特别是对CPU、内存和I/O的需求很大。

候选主节点是被选举为主节点的节点,在集群中,只有候选主节点才有选举权和被选举权,其他节点不参与选举工作。

5. 分片:

abstraction layer

索引

========

分片

========

副本

6. Elasticsearch为了加快写入的速度,写入过程往往是并发实施的。为了解决在并发写的过程中出现的数据冲突的问题,Elasticsearch通过乐观锁进行控制,每个文档都有一个version(版本号),当文档被修改时版本号递增。

7. 计算输入的查询信息与网页内容相关性判断的模型主要有布尔模型、概率模型、向量空间模型等。

8. rest

架构风格是一种研究和评价软件架构设计的方法,它是比架构更加抽象的概念

引入链接后,我们可以将Web应用看作一个由很多状态组成的有限状态机

9. 显而易见,全文检索是一种空间换时间的做法——前期进行数据索引的创建,需要花费一定的时间和空间,但能显著提高后期搜索的效率

10. 网页库里存储的网页信息与我们在浏览器看到的页面内容相同

11. 索引过程先后经历正向索引和倒排索引阶段,最终建立索引库

12. 搜索阶段的过程

用户输入的关键词同样会经过预处理,如删除不必要的标点符号、停用词、空格、字符拼写错误识别等,随后进行相关的分词,分词后搜索引擎系统将向索引库发出搜索请求

13. 爬虫:

对软件开发人员来说,我们可以基于现有的爬虫框架来实现对网络数据的爬取。Java语言栈的读者可以使用WebMagic、Gecco;Python语言栈的读者可以使用Scrapy;Go语言栈的读者可以使用YiSpider

14. 网页分析:

链接其实是一种投票

网页A在多个网页间被主动链接、被主动投票的次数最多,因此我们认为网页A更权威

如果将网页间的链接关系视作有向图,则网页的链接关系就会变成入度和出度

在匹配字符串时分为正向匹配和逆向匹配两种

Python语言中的中文分词组件有jieba中文分词,Java语言中常用Jcseg、Ansj和庖丁分词,Go语言中常用sego

15. 倒排索引

在倒排索引中,有词条(Term)、词典(Term Dictionary)、倒排表(PostList)三个名词

16. 结果排序

多个关键词的倒排索引查询结果的交集即为搜索的结果

17. 中文分词

18. 关联

倒排索引的思想在日常生活中十分常见。比如在某个公交车站或者地铁站,我们会以站点为起始点做路线查询与规划,而非按公交线路或地铁线路——显然站点就是倒排索引中的词组,而文章就是倒排索引中的公交线路或地铁线路

19. 数据写入过程

可以试想一下,如果我们全部的文档集合仅构建在一个很大的倒排索引文件中,且数据量还在不断增加,当进行修改时,我们需要全量更新当前的倒排索引文件。这会使得数据更新时效性很差、且耗费大量资源,显然这不是我们希望看到的。

其实在Lucene中,分段的存储模式可以避免在读写操作时使用锁,从而大大提升Elasticsearch的读写性能。这有点类似于CurrentHashMap中“分段锁”的概念,二者有异曲同工之妙,都是为了减少锁的使用,提高并发

索引

======

20. 命名

如研发人员经常使用的“<>”操作符,英文原意为Diamond Operator。这个命名很有想象力,“<>”很像一个菱形,而菱形的英文单词是Diamond,同时Diamond还表示钻石

21. 去掉type后的index

index

==========

mapping

==========

document

22. 数据副本:

以数据为核心时,一般将数据拆分为若干个数据段,以数据段为单位去分发。一般来说,每个数据段的大小尽量相等,而且限制数据量大小的上线。在不同的系统中,数据段有很多不同的称谓,如在Lucene和Elasticsearch中称之为segment,在Kafka中称之为chunk和partition等

第4章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值