Elasticsearch 查询优化
根据单个doc_id 查询
// 速度很快 近实时
// 不需要refrsh 落盘
// 不支持模糊查询
// 哈希直接定位 跳过引擎
// 用户 URL ──> [哈希路由计算] ──> 直接根据 ID 哈希直达分片 ──> 利用指针从磁盘/内存直接拔出数据 (_source)
GET /{index_name}/_doc/{document_id}
// 速度很快 非实时 三种性能流程都一样无差别
// 用户 JSON ──> [搜索解析器] ──> 解析语法树 ──> 【 🚀 直接转化为 TermInSetQuery 】 ──> 【 ❌ 自动斩断算分开销 (Scoring = 0) 】 ──> 【 ⚡ 捞出内部文档编号 】 ──> 读取源数据 (_source)
// Bitset 缓存:用户 JSON ──> [搜索解析器] ──> 解析语法树 ──> 【 💾 直接读取内存中的 Bitset 位图 (Scoring 依旧为 0) 】 ──> 读取源数据 (_source)
POST /my_index/_search
{
"query": { "ids": { "values": [ "1226430539" ] } }
// "query": { "bool": { "filter": { "term": { "_id": "1226430539" } } } }
// "query": { "constant_score ": { "filter": { "term": { "_id": "1226430539" } } } }
}
搜索引擎 + 倒排引擎 + lucuen chunck
// 搜索引擎(Elasticsearch 顶层):
负责分布式调度、路由(Routing)、将用户的 JSON 解析为语法树、管理集群、分片(Shard)以及最终把各分片的数据合并返回给用户.
// 倒排引擎(Lucene 核心层):
负责构建和检索 倒排索引(Inverted Index)。它的核心任务是快速通过你查的 _id 或关键词,在内存和磁盘交互中找出对应的内部 文档编号(Doc ID)。
Lucene Chunk(磁盘块存储层):
在 Lucene 中,正排索引(也就是你最终要拿到的完整原始数据 _source、stored fields)并不是像传统数据库那样一条条独立存放的,而是为了追求极致的压缩率,
每 16KB ~ 32KB(默认配置)的文档数据被打包成一个紧凑的压缩块(Chunk) 写入磁盘(.fdt 和 .fdx 文件)
// 流程
用户 JSON ──> [搜索引擎解析] ──> [倒排引擎扫描] ──> 【 算分开销 (Scoring ) 】 ──> 【 捞出内部文档编号 】 ──> 【 💾 定位 Lucene Chunk 索引 (.fdx) 】 ──> 【 💿 磁盘 IO:读取并解压目标 Chunk 块 (.fdt) 】 ──> 提取源数据 (_source)
// DSL的语法
┌─────────────────────────────────────────────────────────┐
用户发送的 DSL 语法层 (JSON 报文)
└────────────────────────────┬────────────────────────────┘
│ (搜索解析器 Parser 转化)
▼
┌─────────────────────────────────────────────────────────┐
1. Scoring(评分层 / 逻辑控制层)
- 决定是否算分、如何组合、如何对结果进行最终排序
- 核心芯片: bool (must/should),constant_score,
dis_max, function_score,nested .
└────────────────────────────┬────────────────────────────┘
│ (下发检索指令)
▼
┌─────────────────────────────────────────────────────────
2. QueryTerm层(词条检索层 / 倒排匹配层)
- 负责去底层的倒排索引里,精准命中关键词并吐出编号
- 核心芯片: 2. QueryTerm层(词条检索层 / 倒排匹配层)
│
├── 精准单值/批量:[term (TermQuery)]、[terms / ids (TermInSetQuery)] ── (⚡ 最推荐,天然契合 Bitset)
│
├── 区间与存在性:[range (PointRangeQuery/BKD树)]、[exists (列式存储标记判定)]
│
├── 文本智能分词:[match / combined_fields] ── (进入此层前会被拆解为 term 组合)
│
├── 位置与顺序约束:[match_phrase (PhraseQuery)]、[match_phrase_prefix]、[intervals]
│
└── 模糊与模式匹配:[prefix]、[wildcard]、[regexp]、[fuzzy] ── (⚠️ 扫描整个词典,高并发的性能杀手)
└─────────────────────────────────────────────────────────┘
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/22936186

浙公网安备 33010602011771号