ES 父子文档
ES 删除父文档时,子文档不会被删除
ES 搜索时各个节点是怎么工作的(ES 读数据的流程)
- 客户端向任意节点发送请求,处理请求的节点就是协调节点
- 协调节点将请求转发到所有 shard
- query phase: 每个 shard 将自己的搜索结果(doc id)返回给协调节点,由协调节点进行数据的合并、排序、分页等
- fetch phase: 协调节点根据 doc id 去各个节点拉取实际的 doc 文档,最后返回给客户端
ES 写数据过程
- 客户端向任意节点发送请求,处理请求的节点就是协调节点
- 协调节点将请求路由到主分片节点
- 主分片节点处理请求后,同步到副本分片
- 协调节点返回响应
ES 索引设计优化
- 字段拉平:将复合字段拆分为多个不同字段,查询时减少查询的字段个数
- 提前建立 mapping: 预先建立 mapping,而不是让 ES 自动生成数据类型,加速索引
- 实使用 keyword 代替 int/long
ES 查询方法优化
- 使用 filter: filter 过滤器用户回答
这个文档是否匹配子句,ES 只需要回答是或者否,不需要为过滤器子句计算相关性分数,而且过滤器结果可以缓存