2024年7月6日
摘要: 1. 背景 1.1. 接手老系统 最近我们又接手了一套老系统,老系统的迭代效率和稳定性较差,我们打算做重构改造,但重构周期较长,在改造完成之前还有大量的需求迭代。因此我们打算先从稳定性和迭代效率出发做一些微小的升级,其中一项效率提升便是升级编译工具 和 GCC 版本。 老系统使用 Autotools 阅读全文
posted @ 2024-07-06 21:14 烛秋 阅读(1139) 评论(11) 推荐(9) 编辑
  2023年10月29日
摘要: 字符串分割是很常见的功能,通常其实现代码也很简洁,这就使得开发者容易忽略其性能,写出非最佳性能的代码,譬如:没有使用现代 C++ 中的 string_view、对遍历过程没有精细考虑。通过精细的控制计算量以及应用 SIMD 指令可以获得比较好的收益,特别是 SIMD 指令在任意多分隔符场景下性能优化效果非常明显。 阅读全文
posted @ 2023-10-29 22:00 烛秋 阅读(2133) 评论(6) 推荐(10) 编辑
  2019年4月14日
摘要: 本文主要介绍B+树的Copy-On-Write,包括由来、设计思路和核心源码实现(以Xapian源码为例)。中文的互联网世界里,对B树、B+树的科普介绍很丰富,但对它们在工业界的实际使用却几乎没有相关介绍文章,本文既是总结分享,也是资料索引。 在阅读本文之前需要先对B+树有概念上的认识,可以阅读wi 阅读全文
posted @ 2019-04-14 22:58 烛秋 阅读(2865) 评论(0) 推荐(1) 编辑
  2019年3月23日
摘要: 总结今天遇到的一个so库链接、运行问题。 这几天修改了xapian的源码,重新编译so库,再重新编译之前的demo程序,跑起来后却发现执行的函数并非我修改过的,使用的还是老版本。折腾了一会儿,发现是因为/usr/local/lib目录中含有同名so库导致。这里记录下正确的解决思路。 1 确保链接到了 阅读全文
posted @ 2019-03-23 00:25 烛秋 阅读(2177) 评论(0) 推荐(2) 编辑
  2019年3月18日
摘要: 本文属于文档检索过程分析的一部分,重点分析文档匹配百分比(percent)的计算过程。 1 percent是什么? 我们之前分析的检索demo: 2 为什么需要percent? 先说一下背景,做过搜索的人应该都知道BM25算法,这也是xapian内部默认的相关性打分算法,它是一个针对term做打分的 阅读全文
posted @ 2019-03-18 21:03 烛秋 阅读(704) 评论(0) 推荐(0) 编辑
  2019年3月10日
摘要: 本文是Xapian检索过程的分析,本文内容中源码比较多。检索过程,总的来说就是拉取倒排链,取得合法doc,然后做打分排序的过程。 1 理论分析 1.1 检索语法 面对不同的检索业务,我们会有多种检索需求,譬如:要求A term和B term都在Doc中出现;要求A term或者B term任意在Do 阅读全文
posted @ 2019-03-10 23:58 烛秋 阅读(1386) 评论(0) 推荐(0) 编辑
  2019年3月3日
摘要: 本文主要记录Xapian的内存索引在添加文档过程中,做了哪些事情。 内容主要为函数执行过程中的流水线。 demo代码: 1.创建并填充Document 定义好文档对象,使用add_posting接口,添加term,以及对应的position、wdfinc; 内部实现细节: 1.1 先尝试读取doc已 阅读全文
posted @ 2019-03-03 22:16 烛秋 阅读(805) 评论(0) 推荐(0) 编辑
  2019年2月22日
摘要: 关键字:xapian、内存索引 xapian除了提供用于生产环境的磁盘索引,也提供了内存索引(InMemoryDatabase)。内存索引。我们可以通过观察内存索引的设计,来了解xapian的设计思路。 1 用途 官方文档说法: “inmemory, This type is a database 阅读全文
posted @ 2019-02-22 12:49 烛秋 阅读(1158) 评论(0) 推荐(0) 编辑
  2019年2月19日
摘要: 关键字:搜索引擎、Xapian 一篇拖了两三年的入门总结文章,今天发出来,一方面是自己的总结,另一方面是给自己和他人的备忘。读者需要对搜索引擎有初步了解,譬如了解倒排、term、doc、相似度打分等概念。 Xapian是一个C++搜索引擎内核,提供了类似Lucene的功能,功能没有Lucene丰富, 阅读全文
posted @ 2019-02-19 18:52 烛秋 阅读(5941) 评论(1) 推荐(1) 编辑
  2018年12月21日
摘要: 两年未写总结博客,今天先来练练手,总结最近遇到的一个crash case。 注意:以下的分析都基于GCC4.4.6 一、解决crash 我们有一个复杂的排序,涉及到很多个因子,使用自定义排序函数的std::sort做排序。Compare函数类似下文的伪代码: 后来,我们给排序函数加了更多的复杂逻辑: 阅读全文
posted @ 2018-12-21 12:07 烛秋 阅读(4800) 评论(2) 推荐(2) 编辑