赞
踩
根据用户需求和一定的算法,运用特定策略从互联网检索出制定信息反馈给用户的一种搜索技术。
Elasticsearch,简称为ES。 ES是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据。
Elasticsearch是面向文档的一种数据库,这意味着其不再需要行列式的表格字段约束。
ES会存储整个构造好的数据或文档,然而不仅仅是储存数据,这使得文档中每个数据可以被标识,进而可以被检索。在ES中,执行index,search,sort或过滤文档等操作都不是传统意义上的行列式的数据。
ES从根本上对数据的不同思考方式也正是他能应对复杂数据结构的全文检索的原因之一。
数据库的select * from user where name like 'xxx'
:1. 不走索引,数据库量很大时,查询慢。2. 往往会返回大量的数据。3.用户输入的内容可能并不准确。
mysql中like进行模糊查询时,如果用前导模糊查询"%程序控"则不会走索引,如果用非前导模糊查询"程序控%"则会走索引。
=》
正排索引存储会以ID作为索引,来查询相应的数据。如果数据量很大,则会导致经常性的全表扫描。
=》
Elasticsearch优势:
倒排索引。
模糊搜索速度很快: 写入数据到Elasticsearch的时候会进行分词。
搜索到的数据可以根据评分排序,过滤掉大部分的内容。
能匹配有相关性的记录,没有那么准确的关键字也能搜出相关的结果。
搜索引擎肯定是根据用户搜索得出最符合用户搜索条件的放在最前面,这一点数据库是无法支持的,es中会根据搜索的数据的评分进行排序,越符合条件评分越高,原生支持这一点。
以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。
由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率
Elastic Search 中代码几乎全部是为搜索服务器服务的。真正处理倒排索引、具体搜索算法的,则Lucene 核心引擎。
无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
=》ElasticSearch基于Apache Lucene内核,通过标准的RESTful API覆盖Lucene的复杂性,以期全文检索技术能简单易用地被各种搜索应用所使用。
ELK架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链。 三者相互配合,取长补短,共同完成分布式大数据处理工作。
Kibana是一个针对Elasticsearch的开源分析及可视化平台 ,用来搜索、查看交互存储在Elasticsearch索引中的数据。 使用Kibana,可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板( dashboard )实时显示Elasticsearch查询动态。
Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。
Beats 是一个开源的用来构建轻量级数据汇集的平台,可用于将各种类型的数据发送至 Elasticsearch 与 Logstash。
Packetbeat:用于监控局域网内服务器之间的网络流量信息;
Filebeat:收集服务器上的日志信息——它是用来替代 Logstash Forwarder 的下一代 Logstash 收集器,是为了更快速稳定轻量低耗地进行收集工作,它可以很方便地与 Logstash 还有直接与 Elasticsearch 进行对接。
新推出的 Metricbeat,可以定期获取外部系统的监控指标信息。 除了以上三个核心产品外,还有:Winlogbeat(Windows事件日志轻量级工具)、Auditbeat(审计数据的轻量级工具)、Heartbeat(用于时间监控的轻量级工具)。 除此以外,你还可以非常方便的基于 libbeat 框架来构建你属于自己的专属 Beat。
名称 | 数据库概念 | 释义 | 备注 |
---|---|---|---|
Index | database | 文档在哪个索引存放 | 索引名称必须为小写 |
Type(废除,默认类型 _doc 代替) | Table | 文档对象类型 | 一个Index下支持多个Type Type只是Index中的虚拟逻辑分组,不同的Type应该有相似的结构。 从es6.0版本默认type是log。 |
Document | 数据库的一行记录row | Elasticsearch是面向文档的,使用JSON作为序列化格式存储整个对象。 | |
Field | 数据库的Column | 文档中包含的一组字段或者是键值对,字段的值可以是一个简单的(标量)值(如字符串,整数,日期),或者一个嵌套的结构就像一个数组或对象 | |
Mapping | 数据库的Schema | ||
DSL | SQL | ES读取API |
Elasticsearch为什么在6 7 版本后不再支持type了
名称 | 释义 | 备注 |
---|---|---|
_id | 文档唯一标识 | |
_version | 数据版本 |
ElasticSearch 是分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个实例。单个实例称为一个节点(node),一组节点构成一个集群(cluster)。
为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。一个集群是一些运行 Elastic Search 的节点服务器(node)的总称。
一个Elasticsearch集群可能包含一个或多个节点:一个主节点Master Node,多个从节点。如果主节点挂了,会选举出一个新的主节点。
这些节点受到集群的管理。你可以向一个集群中增加或者删除一些节点(扩容或者减容),也可以查询节点的信息(比如这个节点的 CPU 使用状况如何等等)。
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html
数据分片sharding:分布式服务中常见的一个手段。
当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。
如果一个Index的数据量太大,只有一个分片,那只会在一个节点上存储,随着数据量的增长,一个节点未必能把一个Index存储下来。 =》横向扩展 =》分片
分片是底层的工作单元,文档保存在分片内,分片又被分配到集群内的各个节点里,每个分片仅保存全部数据的一部分。
一个Index(数据库表)的数据我们可以分发到不同的Node上进行存储(1个Index、4个Node :设置4个分片)。
为提高查询吞吐量或实现高可用性,可以使用分片副本。
副本是一个分片的精确复制,每个分片可以有零个或多个副本。
数据写入到主分片,副本分片会复制主分片的数据,读取的时候主分片和副本分片都可以读。如果某个节点挂了,主节点就会把对应的副本分片提拔为主分片,数据就不会丢。
可在index创建后更改,其值越大搜索效率越高,但写入性能越低(一条数据写入操作需要做(1+replicas)遍),具体值与集群data节点数量相关,不宜超过【data节点数-1】。
当ElasticSearch的节点启动后,它会利用多播(multicast)(或者单播,如果用户更改了配置)寻找集群中的其它节点,并与之建立连接。
客户端写入一条数据,Elasticsearch集群由节点来处理这次请求。
集群上的每个节点都是coordinating node(协调节点),协调节点表明这个节点可以做路由(请求转发)。
shard = hash(document_id) %(num_of_primary_shards)
主分片写完后,会将数据并行发送到副本集节点上,等到所有的节点写入成功就返回ack给协调节点,协调节点返回ack给客户端,完成一次的写入。
给对应的doc记录打上【.del】标识。
足够多的segement文件存在时会合并成一个segement文件。合并时,把带有delete状态的doc给物理删除掉。
根据ID查询doc(实时)
1.1 检索内存的Translog文件
1.2 检索硬盘的Translog文件
1.3 检索硬盘的Segement文件
根据query(搜索词)去查询匹配的doc(写入后1s才能查,segement文件是每隔一秒才生成一次的)
2.1 同时查询内存和硬盘的Segement文件
public TopDocs search(Query query, int n);
public Document doc(int docID);
Character Filters(文本过滤器,去除HTML)
Tokenizer(按照规则切分,比如空格)
TokenFilter(将切分后的词进行处理,比如转成小写)
配置es,打开elasticsearch.yml文件,在最后一行加入(注意yalm语法,冒号后要加一个空格)
http.cors.enabled: true
http.cors.allow-origin: "*"
重启es。
在Kibana目录下的config中修改Kibana.yml文件,最后一行加上
i18n.locale: "zh-CN"
重启。
elasticsearch初学终极教程 - 第二章: 把Elastic Search在本地跑起来
终于有人把Elasticsearch原理讲透了!
搜索引擎入门
教程
官方教程
ElasticSearch 快速上手学习入门教程
书
Elastic社区
集群配置
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。