参考于蚂蚁课堂
官方文档
概述
- Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是适用于数据采集、充实、存储、分析和可视化的一组开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。
Elasticsearch 使用哪种方式实现版本控制?
- 使用CAS无锁机制(乐观锁)
为什么要进行版本控制
- 为了保证数据再多线程操作下的准确性。
悲观锁和乐观锁
- 悲观锁:假设会发生并发冲突,屏蔽一切可能违反数据准确性的操作
- 悲观锁:假设不会发生并发冲突,只在提交操作是检查是否违反数据完整性。
内部版本控制和外部版本控制
- 内部版本控制:_ version自 增长,修改数据后,_ version会 自动的加1
- 外部版本控制:为了保持_version与外部版本控制的数值一-致使用yers ion _type= external检查数据当前的version值是否小于请求中的vers ion值
9200 端口和 9300 端口有什么区别?
- 9300 是 Elasticsearch 节点之间通讯使用,9300 是TCP 协议端口号
- 9200 是 Elasticsearch 节点与外部进行通讯使用,9200 是暴露RESTful接口端口号
正向索引
正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出,所有包含查询关键字的文档。
这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护;因为索引是基于文档建立的,若是有新的文档加入,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面。若是有文档删除,则直接找到该文档号文档对应的索引信息,将其直接删除。但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,
检索效率低下。尽管正排表的工作原理非常的简单,但是由于其检索效率太低,除非在特定情况下,否则实用性价值不大。
倒排索引
倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID 和字符在该文档中出现的位置情由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率。
Dsl语言查询与过滤
Elasticsearch中的查询请求有两种方式,-种是简易版的查询,另外一种是使用JSON完整的请求体,
叫做结构化查询(DSL)。由于DSL查询更为直观也更为简易,所以大都使用这种方式。DSL查询是POST过去一个ison,由于post的请求是jison格式的,所以存在很多灵活性,也有很多形式。
Term查询与Match查询的区别
- Term 查询是精确匹配的,不会对字段进行分词查询
- Match 会根据分词器,进行分词查询
文档映射
-
动态映射:
我们知道,在关系数据库中,需要事先创建数据库,然后在该数据库实例下创建数据表,然后才能在该数据表中插入数据。而Elast icSearch中不需要事先定义映射(Mapping) ,文档写入ElasticSearch时,会根据文档字段自动识别类型,这种机制称之为动态映射。 -
静态映射:
在ElasticSearch中也可以事先定义好映射,包含文档的各个字段及其类型等,这种方式称之为静态映射。String类型里面
网友评论