主要观点:
- 常见 mockup 有搜索框但需求模糊,多数人以为是输入时即时更新(100ms 防抖等)。
- 用数据库实现最快方式是可怕的连接查询,在内存中可做更好的暴力搜索,Go 代码示例如下:通过遍历可搜索内容,检查每个内容是否包含所有搜索词来确定是否匹配。
- 上述方法已能满足需求并让用户满意,性能也不错,可处理数万文档。
- 探讨能否优化上述方法,可去除冗余,如对于搜索词
a
,只考虑第一个a
,对于文本the fast theologian fastly ran
,可优化为theologian fastly ran
,通过函数bruteSearchOptimize
实现。 - 对 Jane Austen 的《Pride and Prejudice》进行测试,该函数处理约需 6 秒,但内存节省可观,初始长度 785141,优化后仅 80651,约为初始的 1/10。
- 进行搜索基准测试,对比
bruteSearch
和bruteSearchOptimize
,前者处理 1030 次需 1150442ns/op,后者 18040 次需 62702ns/op,优化后搜索更快。
关键信息:
- 有搜索相关的代码实现及优化尝试。
- 对《Pride and Prejudice》文本进行了测试及性能分析。
重要细节:
- Go 代码中通过遍历搜索词和可搜索内容来判断匹配。
- 优化函数
bruteSearchOptimize
通过遍历 tokens 检查是否存在更长的包含词来去除冗余。 - 基准测试中设置了搜索词并对比两种搜索方式的性能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。