ElasticSearch基础知识

一、关于ElasticSearch

ElasticSearch是什么

  • 独立的网络上的一个或一组进程节点,可以理解为一个可独立部署的应用程序,一个中间件
  • 对外提供搜索服务(http或transport协议)
  • 对内就是一个搜索数据库

名词定义

  • 索引=数据库
  • 类型=表,es7中逐步废除类型定义
  • 文档=行数据
  • 关系型数据库和ES名词对比图解:
Relational database ElasticSearch
Database Index
Table Type
Row Document
Column Field
Schema Mapping
Index Everything is indexed
SQL Query DSL
SELECT * FROM Table … GET http://…
UPDATE Table Set PUT http://…

索引

  • 搜索中的数据库或表定义
  • 构建文档时候的索引创建

分词

  • 搜索是以词为单位做最基本的搜索单元
  • 依靠分词器构建分词
  • 用分词构建倒排索引

搜索引擎处理过程图解

搜索引擎处理过程图解

倒排索引

  • 正向索引:遍历所有document,遍历每个document下的所有字段,才能确定是否是目标记录
    正向索引图解
  • 倒排索引:以词为单位,根据词能找到所有包含该词的文档,所以并不需要遍历所有文档,而只需要遍历所有的词
    倒排索引图解

TF-IDF打分

  • 试想根据某个词查找,查找出一堆文档,那到底是哪个匹配度更高呢,这时候就需要打分的逻辑
  • TF:词频,这个document文档包含了多少个这个词,包含越多表明越相关
  • DF:文档频率,包含该词的文档总数目
  • IDF:DF取倒数
  • 打分常用计算公式:TF * IDF

二、ElasticSearch安装

ElasticSearch

Kibana

三、分布式原理

分片

  • 分片是依托于一个索引的,假设一个索引是倒排索引加文档的结构,当索引加文档数量超过了一台机器磁盘的上限,因此要进行一个分片处理,默认创建索引是分配一个分片,所有的文档都会在这个分片做索引

主从

  • 一个主分片对应一个从分片

路由

  • 主分片和从分片需要一个路由信息
  • numbers_of_shards:定义一个主分片数量,用于响应写操作(也可响应读)
  • numbers_of_replicas:定义索引备份分片数量,用于响应读操作
  • 读请求可不经过主节点,直接发生在从节点上,若对应节点无分片则路由到有分片的节点中

举例

PUT /test
{
    
    
	"settings": {
    
    
		"numbers_of_shards": 1, // 表示生成1个主分片
		"numbers_of_replicas": 0 // 表示生成0个从分片
	}
}

搭建集群

  • 启动三个节点
  • 修改配置文件:config/elasticsearch.yml
cluster.name: dianping-app # 相同集群的所有节点配置一样
node.name: node-1 # 同一个集群下的每个node.name唯一
network.host: 127.0.0.1 # 当前节点启动在哪个IP上面,如果在一台机器上的话可以用端口区分
http.port: 9200 # 端口
transport.tcp.port: 9300 # 做集群之间的指令通信,三个节点之间通过对方的这个端口做集群协商以及指令传输
http.cors.enabled: true # 允许前端做跨域访问
http.cors.allow-origin: "*"
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"] # 用来发现对应的集群节点
cluster.initail_master_nodes: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"] # 竞选主节点

猜你喜欢

转载自blog.csdn.net/qq_36221788/article/details/109704278