💡
原文中文,约3900字,阅读约需10分钟。
📝
内容提要
作者使用 Hexo 和 Hugo 框架搭建博客,因静态博客搜索功能不足,决定构建搜索引擎,选择了 Tantivy,支持复杂查询和高亮显示,最终实现高效的关键词搜索和时间范围检索。
🎯
关键要点
- 作者使用 Hexo 和 Hugo 框架搭建博客,发现静态博客搜索功能不足。
- 决定构建搜索引擎,选择了 Tantivy,支持复杂查询和高亮显示。
- 静态博客的搜索方案存在数据保存在客户端、请求频繁和不支持复杂表达式等缺点。
- 选择 Tantivy 的原因包括支持复杂查询、内存占用小和高亮显示功能。
- 在构建搜索引擎时,作者希望减少系统设计的复杂度,避免不必要的依赖。
- 使用 Rust 编写搜索引擎,学习新编程语言的过程有其挑战。
- 在 Rust 中遇到全局变量和空指针处理的困难,表达了对这些设计的吐槽。
- 最终完成了博客搜索引擎的搭建,性能表现良好,内存占用极低。
- 关键词搜索采用 TermQuery 和 PhraseQuery 的组合,以提高精确率。
- 时间范围检索使用 int64 类型的时间戳,支持 ISO8601 格式的查询参数。
- 标签和分类查询使用 TermQuery 实现,最多允许 5 个标签或分类的组合过滤。
❓
延伸问答
作者为什么决定构建自己的博客搜索引擎?
因为静态博客的搜索功能不足,无法支持复杂查询和高亮显示,且存在数据保存在客户端等缺点。
选择 Tantivy 作为搜索引擎的原因是什么?
Tantivy 支持复杂查询、内存占用小和高亮显示功能,适合作者的需求。
作者在构建搜索引擎时遇到了哪些编程挑战?
作者在 Rust 中遇到了全局变量和空指针处理的困难,感到不爽。
博客搜索引擎如何实现关键词搜索的精确率?
通过结合使用 TermQuery 和 PhraseQuery,确保搜索结果的精确性。
时间范围检索是如何实现的?
使用 int64 类型的时间戳,并支持 ISO8601 格式的查询参数,允许用户指定时间范围。
标签和分类查询的限制是什么?
标签和分类查询最多允许 5 个标签或分类的组合过滤。
➡️