不要急,总有办法的

Es查询原理提问,一个分片segment最理想状态只有一个吗,那限制是什么。

Elasticsearch | 作者 heartM | 发布于2021年01月13日 | 阅读数:2105

场景是数据每天半夜增量插入。强制合并了segment查询速度好了点。这里有点不明白,一是搜索是去分片里的segment遍历查数据,不是多线程查吗,会不会适当得几个segment效率会更好。二是segment内部存有多个数据结构,除了存倒排索引,是不是也存原文档数据,因为我查看segment的磁盘总量就是总数据量,那segment放在内存的是不是只是倒排索引,以及其他映射表。三是,segment的缓存和我们Es的查询缓存的关系
已邀请:

Charele - Cisco4321

赞同来自:

ES的一个分片就是是Lucene的一个索引。
 
Lucene提供了多线程查询实现,在IndexSearcher
public IndexSearcher(IndexReaderContext context, Executor executor) {
 
构造时可传线程池实现多线程查询。
 
不过ES并没有用,用的是单线程。ES本身线程就多,这里再搞多线程意义不大。

pony_maggie - 公众号:犀牛饲养员的技术笔记

赞同来自:

倒排索引是在内存里
 
segment缓存是lucene层面的,查询缓存包括的情况很多,要看具体是哪种

JiangJibo - 喊我雷锋

赞同来自:

es单个请求在node上默认是单线程运行的;通过倒排索引检索时速度很快的,而且多个segment的结果最终要merge,还是需要某个线程来做这个工作,不能多线程,而单个segment检索通过倒排索引足够块了,除非是模糊查询那种形式
 es除了倒排索引,还有很多数据啊,比如fieldData, DocValues,正排索引(通过doc_id查询_source)等其他数据结构
 
es的filter cache 用的是 segment的filter cache

要回复问题请先登录注册