暴力文本搜索优化

主要观点:

  • 常见 mockup 有搜索框但需求模糊,多数人以为是输入时即时更新(100ms 防抖等)。
  • 用数据库实现最快方式是可怕的连接查询,在内存中可做更好的暴力搜索,Go 代码示例如下:通过遍历可搜索内容,检查每个内容是否包含所有搜索词来确定是否匹配。
  • 上述方法已能满足需求并让用户满意,性能也不错,可处理数万文档。
  • 探讨能否优化上述方法,可去除冗余,如对于搜索词a,只考虑第一个a,对于文本the fast theologian fastly ran,可优化为theologian fastly ran,通过函数bruteSearchOptimize实现。
  • 对 Jane Austen 的《Pride and Prejudice》进行测试,该函数处理约需 6 秒,但内存节省可观,初始长度 785141,优化后仅 80651,约为初始的 1/10。
  • 进行搜索基准测试,对比bruteSearchbruteSearchOptimize,前者处理 1030 次需 1150442ns/op,后者 18040 次需 62702ns/op,优化后搜索更快。

关键信息:

  • 有搜索相关的代码实现及优化尝试。
  • 对《Pride and Prejudice》文本进行了测试及性能分析。

重要细节:

  • Go 代码中通过遍历搜索词和可搜索内容来判断匹配。
  • 优化函数bruteSearchOptimize通过遍历 tokens 检查是否存在更长的包含词来去除冗余。
  • 基准测试中设置了搜索词并对比两种搜索方式的性能。
阅读 17
0 条评论