ElasticSearch的相关问题

82 阅读3分钟

1、ES了解多少

ES:是一个Lucene框架的搜索引擎产品。提供Restful风格的操作接口 Lucene:是一个非常高效的全文检索引擎框架。java

ES的核心概念

  1. 索引index:类似关系型数据库中文table
  2. 文档document:对应数据库的row
  3. 字段field text\keyword\byte:对应数据库的r列
  4. 映射mapper:对应数据库的rschema
  5. 查询方式DSL:对应数据库的SQL
  6. 分片sharding 和 副本 replias:index都是有sharding组成的。每个sharding都有一个或多个备份。ES集群健康状态

2、如何进行中文分词?用过哪些分词器

IK分词器 HanLp分词

3、ES写入数据的流程

在这里插入图片描述

  1. 客户端发写数据的请求时,可以发往任意节点。这个节点就会成为coordingating node
  2. 计算文档所要写入的分片:计算时就采用hash取模的方式来计算
  3. 协调节点就会进行路由,将请求转发给对应的primary sharding所在的datanode
  4. datanode节点上的primary sharding处理请求,写入数据索引库,并且将数据同步到对应的replica sharding
  5. 等primary sharding 和 replica sharding 都保存好文档之后,返回给客户单响应

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

  1. 客户端发请求可发任意的节点,这个节点就成为协调节点。
  2. 协调节点将查询请求广播到每一个数据节点,这些数据节点的分片就会处理该查询的请求。
  3. 每个分片进行数据查询,将符合条件的数据放在一个队列中,并将这些数据的文档ID、节点信息,分片信息都返回给协调节点。
  4. 由协调节点将所有结果汇总,并排序。
  5. 协调节点向包含这些文档ID的分片发起get请求,对应的分片将文档数据返回给协调节点,最后协调节点将数据整合返回给客户端。

5、倒排索引

例句 doc1:我是一名学生 doc2:我同桌的父亲是一名教师,也是校长 doc3:我母亲刚好也是一名教师

单词ID单词倒排列表倒排列表(DocID;TF;)
11,2,3(1;1;<1>),(2;1;<1>),(3;1;<1>)
21,2,3(1;1;<2>,(2;2;< 5,9 >),(3;1;<5>)
3一名1,2,3(1;1;<3>),(2;1;<6>,(3;1;<6>))
4学生1(1;1;<4>)
5同桌2(2;1;<2>)
62(2;1;<3>)
7父亲2(2;1;<4>)
8教师2(2;1;<7>)
92(2;1;<8>)
10校长2(2;1;<10>)
11母亲3(3;1;<2>)
11刚好3(3;1;<3>)

TF(term frequency): 单词在文档中出现的次数。 Pos: 单词在文档中出现的位置。

索引的修改应该怎么办

首先索引会到内存中,做分段处理 其实并不是修改,只是会添加新的索引,以前的索引实际上只会在.del的文件中被标记删除。查询可以查询到,不过会给过滤了。 什么时候会删除? 当倒排索引(段)合并了,才会删除带有.del的文件标记上的索引