博客搜索功能正式上线

博客搜索功能正式上线

💡 原文中文,约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 个标签或分类的组合过滤。

➡️

继续阅读