1、ES了解多少
ES:是一个Lucene框架的搜索引擎产品。提供Restful风格的操作接口 Lucene:是一个非常高效的全文检索引擎框架。java
ES的核心概念
- 索引index:类似关系型数据库中文table
- 文档document:对应数据库的row
- 字段field text\keyword\byte:对应数据库的r列
- 映射mapper:对应数据库的rschema
- 查询方式DSL:对应数据库的SQL
- 分片sharding 和 副本 replias:index都是有sharding组成的。每个sharding都有一个或多个备份。ES集群健康状态
2、如何进行中文分词?用过哪些分词器
IK分词器 HanLp分词
3、ES写入数据的流程
- 客户端发写数据的请求时,可以发往任意节点。这个节点就会成为coordingating node
- 计算文档所要写入的分片:计算时就采用hash取模的方式来计算
- 协调节点就会进行路由,将请求转发给对应的primary sharding所在的datanode
- datanode节点上的primary sharding处理请求,写入数据索引库,并且将数据同步到对应的replica sharding
- 等primary sharding 和 replica sharding 都保存好文档之后,返回给客户单响应
4、ES查询数据的工作原理是什么?
- 客户端发请求可发任意的节点,这个节点就成为协调节点。
- 协调节点将查询请求广播到每一个数据节点,这些数据节点的分片就会处理该查询的请求。
- 每个分片进行数据查询,将符合条件的数据放在一个队列中,并将这些数据的文档ID、节点信息,分片信息都返回给协调节点。
- 由协调节点将所有结果汇总,并排序。
- 协调节点向包含这些文档ID的分片发起get请求,对应的分片将文档数据返回给协调节点,最后协调节点将数据整合返回给客户端。
5、倒排索引
例句 doc1:我是一名学生 doc2:我同桌的父亲是一名教师,也是校长 doc3:我母亲刚好也是一名教师
| 单词ID | 单词 | 倒排列表 | 倒排列表(DocID;TF;) |
|---|---|---|---|
| 1 | 我 | 1,2,3 | (1;1;<1>),(2;1;<1>),(3;1;<1>) |
| 2 | 是 | 1,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>) |
| 6 | 的 | 2 | (2;1;<3>) |
| 7 | 父亲 | 2 | (2;1;<4>) |
| 8 | 教师 | 2 | (2;1;<7>) |
| 9 | 也 | 2 | (2;1;<8>) |
| 10 | 校长 | 2 | (2;1;<10>) |
| 11 | 母亲 | 3 | (3;1;<2>) |
| 11 | 刚好 | 3 | (3;1;<3>) |
TF(term frequency): 单词在文档中出现的次数。 Pos: 单词在文档中出现的位置。
索引的修改应该怎么办
首先索引会到内存中,做分段处理 其实并不是修改,只是会添加新的索引,以前的索引实际上只会在.del的文件中被标记删除。查询可以查询到,不过会给过滤了。 什么时候会删除? 当倒排索引(段)合并了,才会删除带有.del的文件标记上的索引