Apache Lucene开发一直充满活力,但最近几个月尤其见证了对查询评估的大量优化。这里没有一个可以单独突出的优化,而是围绕机械同情(Mechanical Sympathy,在计算机编程和系统设计领域被广泛使用的术语。它指的是开发者对于他们的软件在硬件上运行时的深入理解,包括了解计算机的硬件架构如何影响软件性能。简而言之,就是软件设计者对于他们的程序如何有效利用硬件资源的认识和优化。)和改进的算法组合的许多改进。
特别有趣的是,这些优化不仅仅有利于一些非常具体的情况,它们实际上加快了Lucene的夜间基准测试的速度,这旨在追踪代表现实世界的查询的性能。只需将鼠标悬停在注释上,就可以看到速度提升(或有时减慢)的来源。顺便说一句,特别感谢Mike McCandless在过去近13年里,用自己的时间和硬件维护Lucene的夜间基准测试!
以下是夜间基准测试在Lucene 9.6(2023年5月)和Lucene 9.9(2023年12月)之间观察到的一些速度提升:
- AndHighHigh:快了35%
- AndHighMed:快了15%
- OrHighHigh:快了60%
- OrHighMed:快了38%
- CountAndHighHigh:快了15%
- CountAndHighMed:快了11%
- CountOrHighHigh:快了145%
- CountOrHighMed:快了155%
- TermDTSort:快了24%
- TermTitleSort:快了290%(没错!)
- TermMonthSort:快了7%
- DayOfYearSort:快了25%
- VectorSearch:快了5%
如果你对这些变化感到好奇,以下是描述我们应用的一些优化的资源:
- 为带有许多高频词的top-k查询带来加速(注释 FK)
- 使用block-max MAXSCORE进行更多跳过(注释 FU)
- 使用SIMD指令加速向量搜索
- FMA风格的向量相似性计算
Lucene 9.9刚刚发布,并预计将被集成到即将发布的Elasticsearch 8.12中。敬请期待!