es查询数据的工作原理是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了es查询数据的工作原理是啥?相关的知识,希望对你有一定的参考价值。

参考技术A

查询,GET某一条数据,写入了某个document,这个document会自动给你分配一个全局唯一的id,doc id,同时也是根据doc id进行hash路由到对应的primary shard上面去。也可以手动指定doc id,比如用订单id,用户id。

我们可以通过doc id来查询,会根据doc id进行hash,判断出来当时把doc id分配到了哪个shard上面去,从那个shard去查询

1)客户端发送请求到任意一个node,成为coordinate node(协调结点)
2)coordinate node进行hash后对document进行路由,将请求转发到对应的node,此时会使用round-robin 随机轮询算法 ,在primary shard以及其所有replica node中 随机选择一个 ,让读请求负载均衡
3)接收请求的node返回document给coordinate node
4)coordinate node返回document给客户端

es最强大的是做全文检索,就是比如你有三条数据

java真好玩儿啊
java好难学啊
j2ee特别牛

你根据java关键词来搜索,将包含java的document给搜索出来

es就会给你返回:java真好玩儿啊,java好难学啊

1)客户端发送请求到一个coordinate node
2)协调节点 将搜索请求转发到 所有的shard 对应的primary shard或replica shard
3)query phase: 每个shard将自己的搜索结果 (其实就是一些 doc id ), 返回给协调节点 ,由协调节点进行数据的 合并、排序、分页 等操作,产出最终结果
4)fetch phase:接着由 协调节点,根据doc id去各个节点上拉取实际的document数据 ,最终返回给客户端

尤其要注意的这里是先拿的id哟

es工作原理及如何构建集群

搜索引擎与MySQL

mysql搜索一个词 %查询条件%
es:天然的分布式 api对外接口,提供数据写入(java写的占用内存大)
solr: api接口对外,
sphinx: 基于sql的全文检索

es安装

docker镜像

docker pull elasticsearch:7.6.1

es配置 elasticsearch.yml

#es集群名称
cluster.name:elasticsearch-cluster
#节点名称
node.name:es-master-10
#
network.host:0.0.0.0
#es部署在对应服务器的ip
network.publish_host:180.200.7.10

http.port:9200
transport.tcp.port:9300
http.cors.enabled:true
http.cors.allow-origin:"*"
#标识为是否可以成为主节点
node.master:true
node.data:true
#集群间的节点信息(每个es节点至少需要200M内存)
discovery.zen.ping.unicast.hosts:
["180.200.7.10:9300","180.200.7.11:9300","180.200.7.12:9300"]
discovery.zen.minimum_master_nodes:1
#初始化的时候确定  节点对象是谁
cluster.initial_master_nodes:es-master-10

持续更新~~

以上是关于es查询数据的工作原理是啥?的主要内容,如果未能解决你的问题,请参考以下文章

es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?...

ES 查询数据的工作原理是什么?

ES读写数据的工作原理

ES(六) ElasticSearch搜索原理

es工作原理及如何构建集群

es工作原理及如何构建集群