主要观点:Val Town 的搜索功能不佳,目前基于 Postgres 的 ILIKE 功能,存在诸多问题,如无排序、多词查询支持差等,作者正在改进但未找到合适解决方案,研究发现主流搜索解决方案适合自然语言而非代码,大公司有自己的定制代码搜索方案,需考虑数据量和扩展性等因素。
关键信息:
- Postgres 的 ILIKE 功能只是子串搜索,无排序和多词查询支持差。
- 主流搜索方案设计用于自然语言,对代码效果不佳,如停止词去除、词干提取等规则在代码中不适用。
- Postgres 的 Full Text Search 扩展在某些规模下效果好,但之前项目有性能问题,Observable 已迁移到 Elasticsearch。
- 已推出基于
pg_trgrm
的 v2 搜索算法,用于正则搜索效果好,但自由形式搜索的排名困难。 - 介绍了多种搜索选项,如 Meilisearch、Typesense、Zoekt、ParadeDB、Sonic 等,各有特点和限制。
重要细节: - 停止词去除会去掉常见词如“the”“it”,词干提取会将“running”变为“run”等,这些在代码中不合适。
pg_trgrm
基于三字母组搜索,在代码搜索中似乎可行,但用于自由形式搜索排名困难。- 各种搜索选项的架构、语言和 star 数量等信息,如 Meilisearch 用 Rust 语言等。
- 提到 GitHub 搜索出色但为专用团队开发,Sourcegraph 的 Zoekt 很酷但 niche 且需新基础设施投入,Elasticsearch 可能是最终解决方案但需学习 Java 等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。