知其然,知其所以然
ZooKeeper 内部原理 2026-10-01

ZooKeeper 与 Consul 对比

3 节点 Consul 2.0.4 与 ZooKeeper / etcd 对比:KV 写延迟 5.0 ms;阻塞查询 watch 合并更新(208 次写唤醒 62 次);kill -9 锁持有者后 session 19 s 才失效、默认 lock-delay 下 34 s 才能拿锁;TTL 健康检查 2.0 s;默认 leader 切换 6–14 s;KV 上限 512 KiB。

ZooKeeper Consul 对比 真实验证 动画演示
Elasticsearch 2026-10-01

standard、whitespace、keyword 分词器对比

本机真实用同一句'Hello-World, ES 8.15 is running_fast!'分别喂给standard、whitespace、keyword三种tokenizer:standard真实按Unicode词边界切成6个干净单词;whitespace真实只认空格,标点原样粘连;keyword真实整句不分词。真实又建了三个字段做词项聚合,三组桶的数量差异直接量化了选错tokenizer的后果。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

中文分词器的实际效果

本机真实验证ES默认standard分词器对中文完全不做词语切分,逐字拆成单字token;真实装上analysis-smartcn插件重启后切出词语级别结果。真实用检索实验量化后果:standard下查询'北京天气'真实把无关的'南京路边小吃'当命中返回了,换smartcn后真实被正确排除。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

自定义 Analyzer

本机真实搭建edge_ngram自定义analyzer做自动补全:'Elastic'真实被切成el/ela/elas一路到elastic共6个前缀片段。真实验证写入用edge_ngram、查询用standard的正确配置能让'elas'命中相关文档;真实又验证两边都用edge_ngram的常见误用——搜'stick'真实命中了毫不相关的'Elastic Stack',因为st这个前缀片段两边共享。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

match 查询如何分析搜索词

本机真实用_validate/query的explain模式打印出match查询'QUICK fox'底层真实生成的body:quick body:fox两个词项查询。真实验证operator参数(and/or默认)如何组合这些词项,又验证keyword字段没有analyzer可跑,match在它上面真实退化成大小写敏感的精确比对。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

term 查询为什么不分词

本机真实用explain对比term和match查询:match把'QUICK fox'分析成小写body:quick body:fox,term查body字段的'Quick'真实原样保留大写一个字母没变。真实验证后果:term搜大写Quick在text字段上查不到(0命中),必须搜索引里真实存的小写quick才行;而在keyword字段上term才是真实设计初衷,精确比对存储值。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

match_phrase 的位置间隔

本机真实验证match_phrase的slop:紧挨着的quick brown不需要slop直接命中;隔1词的quick fox slop=0查不到slop=1才命中。真实最意外的发现:反转顺序搜fox quick,同样隔1词,slop=2依然查不到,要slop=3才行——词序颠倒真实的代价远超单纯间隔数的直觉估算。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

bool 查询中的 must、filter、should

本机真实对比同样的status:active条件放must里(doc1得分1.04)和放filter里(doc1得分降到0.57)。真实用_explain拆开打分明细,filter版本的sum of里只剩title:quick一项,status条件完全没参与打分。真实又验证must_not排除逻辑,以及should单独使用时真实表现成OR语义。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

minimum_should_match 的计算方式

本机真实用5篇文档对4词查询测minimum_should_match:不设置默认OR全部5篇命中;整数2要求至少命中2词剩4篇;百分比75%真实算出4*0.75=3向下取整剩1篇;负数-1真实换算成4-1=3,跟75%结果完全一致。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

operator: and 与默认 or

本机真实用explain打印出默认or('body:quick body:brown body:fox',词项平级)和operator=and('+body:quick +body:brown +body:fox',每词前加+号)的底层查询语句差异,+号真实代表必须匹配。真实用4篇文档量化命中数量:or命中3篇,and直接收紧到只剩全词命中的1篇。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

multi_match 的字段权重

本机真实对title/body跑multi_match查python:不加权重时标题命中的doc1(0.64)反而高于正文3次命中的doc2(0.28),字段长度归一化生效。title加^3后doc1暴涨到1.92,doc2完全不变。真实用_explain对比best_fields(max of)和most_fields(sum of)两种type的计算公式差异。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

prefix、wildcard、regexp 查询性能

本机真实灌3万条随机8位字符串测耗时:prefix和结尾通配符真实稳定1ms,开头通配符wildcard真实稳定6ms,regexp约4ms。真实用profile API看到两者同为MultiTermQueryConstantScoreBlendedWrapper,但开头通配符因为FST前缀定位优化失效,真实多花了约35万纳秒。

Elasticsearch 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号