Elasticsearch

关键字:
每个服务器最大的吞吐量也就是每秒两千个请求
高可用性的目标是确保系统能够持续提供服务,减少因故障或中断而造成的影响。通常通过冗余设计、自动故障检测和恢复机制等方式来实现高可用性。
(个人理解就是互为备份。一个宕机另一个还在。系统健壮性,遇到故障或者中断还能可用!!!)
用户画像:客户用户各个方面的画像形成不同的群体,针对性的形成一些不同的营销策略
中文分词,ES默认是一个字一个字分,可以用HanLP和IL分词器(hanlp是java的一个maven坐标)、可以加用户字典,然后单身狗就可以成为一个词了

除了splunk、solr
b+树
数据只存储在叶子节点-树更矮
叶子节点通过双向链表相连范围查询性能好

一般就那些概念:
NRT近实时(从写入数据到数据可以被搜索到的一个小延迟)、
集群(每个节点属于哪个集群是通过一个配置来决定的)、
node节点(默认节点会去加入一个名称为elasticSearch的集群),启动一堆节点会自动组成一个集群
document是es里的最小数据单元,一般是json的存储格式。每个index下的type中可以存储多个document、键值对嘛,这里面的键就是field
一个index包含多个document,一个index就代表了一类相同或者类似的document
type:一个index可以有多个type
分片(Shard):将索引分成多个物理分片,用于水平扩展和提高性能。分别放在多个node、index会被拆分为多个shard,
1、每个shard就会存放这个index的一部分数据,这些shard会散落在多台服务器上面
2、数据分布在多个shard,多台服务器上所有的操作,都会在多台服务器上并行分布式执行,提升香吐星和性能
replica:每个replica也是shard。实际是每个shard的副本。replica的建立也提高了qps(查询率),也就是吞吐量
一般shard和replica不会放在同一个服务器上,所以就互为主备

1、Elasticsearch的功能
(1)分布式的搜索引擎和数据分析引擎
(2)
全文搜索:包含牙膏的商品,大概就是模糊查询, 百度搜文章。
结构化检索:大概就是分类查询
数据分析:count也就是计数,每个分类下的商品有多少个

(3)对海量数据进行近实时的处理
分布式:ES自动可以将海量数据分散到多台服务器上去存储和检索
海量数据的处理:分布式以后,就可以采用大量的服务器去存储和检索数据,自然而然的就可以实现海量数据的处理了
2.适用场景
日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logstash+kibana)
商品价格监控网站,设定价格阈值,当低于阈值的时候,发送通知消息给用户,低于多少钱,就通知我。

创建监视器:使用Watcher API或Kibana的Watcher UI来创建一个监视器。在监视器中,你可以定义监视的条件、触发的动作以及定时规则。

用户行为日志(点击,浏览,收藏,评论)
电商网站:检索商品
BI系统,商业智能,消费增长,用户群体多是白领,开一个新商场。ES执行数据分析和挖掘,kibana进行数据可视化
维基百科,百度百科,全文检索。
OA、CRM、ERP

这特点就是
分布式的实时文档存储。搜索引擎
每一字段都可以被索引。
支持上百个服务节点扩展
支持pb级别的结构化和非结构化数据
高可用架构:磁盘或者机器坏了都能保证数据不会丢失
elk技术栈支持,存储,搜索,分析,到展示全部都打包好了!!!

端口9200

ES
索引Index Index类似于关系型数据库的Database,用来存储各种类型的文档。一个索引应该是因共同的特性被分组到一起的文档集合。
类型 Type Type类似于关系型数据库的Table,用来存储相似文档的地方。
文档Document Document类似于关系型数据库里面的Row,存储具体的一个对象,
字段 Field Field类似于关系型数据库的Column,存储某一个具体的属性。

集群的概念
节点node:一台装有lucene的实例的服务器,也可以是虚拟机也可以是物理机。或者是容器。
node会有分片的概念。
一个node装有es,es一个node中有多个分片。每个分片都有一个搜索引擎。
数据存储在分片当中。
分片、副本分片。
水平扩容。

inverted index倒排索引用于搜索;倒排索引以词项为单位,存储每个词项出现在哪些文档中
term index用于加速搜索;
stored field用于存放文档的原始信息。
doc values用于排序和聚合。
这四个结构组成了一个复合文件也就是segment
多个文档写进segment,为了提高体验,就固定文档个数,但又新增文档就要新建segment,程序读就并发读取多个segment
不定期合并多个小segment变成一个大segment,段合并,segment merging
多个segment就构成一个单机文本检索库。就是非常有名的开源基础搜索库lucene
为了高性能和高并发,就优化lucene也就是es,然后对写进的数据进行分类。每一个类是一个index name

在Elasticsearch(ES)面试中,以下是一些常见的问题:

什么是Elasticsearch?它的主要特点是什么?
Elasticsearch是一个开源的分布式搜索和分析引擎,用于快速搜索、分析和存储大量的数据。
其主要特点包括全文搜索、分布式和可扩展、实时性、强大的查询和分析能力等。

重点分布式搜索和分析引擎。存储大量
特点:分布式、可扩展、实时性。

Elasticsearch与传统关系型数据库的区别是什么?
Elasticsearch是一个面向文本数据的搜索引擎,而关系型数据库更适合结构化数据。
Elasticsearch具有全文搜索、实时性和分布式扩展能力等特点,适用于大规模数据的搜索和分析。

什么是倒排索引(Inverted Index)?为什么Elasticsearch使用倒排索引?
倒排索引是一种将文档中的词语映射到其所在文档的索引结构。它通过词语来查找文档,而不是通过文档来查找词语。
Elasticsearch使用倒排索引来加速全文搜索,通过将文档中的词语建立索引,可以快速定位包含特定词语的文档。

什么是分片(Shard)和复制(Replica)?它们的作用是什么?
分片是将索引划分为多个部分,每个部分称为一个分片。分片可以在多个节点上分布存储和处理数据,提高性能和容错性。
复制是指在分片之间创建副本,用于提供数据冗余和高可用性。复制可以在不同的节点上存储相同的数据副本。

Elasticsearch的查询语言是什么?可以进行哪些类型的查询?
Elasticsearch使用Query DSL(Domain Specific Language)作为查询语言,可以进行各种类型的查询,包括全文搜索、范围查询、聚合等。
Query DSL可以使用JSON格式的查询语句来构建复杂的查询和过滤条件。
{
"query": {
"match": {
"title": "Elasticsearch"
}
}
}

Elasticsearch如何处理中文分词和搜索?
Elasticsearch提供了中文分词器(Analyzer)来处理中文文本。中文分词器可以将中文文本分解成词语,并建立倒排索引。
在搜索时,Elasticsearch会对搜索词进行中文分词,并根据倒排索引来匹配包含相关词语的文档。

Elasticsearch的数据一致性如何保证?
Elasticsearch使用分布式一致性协议来保证数据的一致性。当数据更新时,它会使用分布式协调机制来同步更新所有副本,以保证数据的一致性。

如何进行Elasticsearch集群的监控和性能优化?
可以使用Elasticsearch提供的监控工具(如Elasticsearch Monitoring、Elasticsearch Metrics)来监控集群的健康状况和性能指标。
包括CPU使用率、内存使用率、磁盘使用率、搜索请求响应时间等,以便及时发现性能瓶颈和问题。

通过调整分片和副本的数量、优化查询语句、合理配置硬件资源等方式,可以提高Elasticsearch集群的性能。

MySQL和Elasticsearch(简称ES)的双写一致性?
指的是在将数据同时写入MySQL和Elasticsearch时,保证两个系统中的数据一致性。写入数据的同步性和准确性。
采用事务保证一致性。

支持各种查询和聚合操作。
使用词项聚合,即对字段中的词项进行统计。

PB结构化或非结构化

posted @ 2024-08-28 17:40  launch  阅读(31)  评论(0)    收藏  举报