内容提要
RawWeb.org是一个搜索引擎项目,旨在帮助用户发现被主流搜索引擎忽视的个人数字花园。该项目使用PostgreSQL作为数据库,Redis进行缓存,Elasticsearch进行全文搜索,支持多语言内容索引。经过Django、Nest.js和Go三个版本的开发,最终选择Go作为主要技术栈,前端使用SvelteKit,基础设施采用Docker Compose和VPS。未来计划包括建立监控系统。
关键要点
-
RawWeb.org是一个搜索引擎项目,旨在帮助用户发现被主流搜索引擎忽视的个人数字花园。
-
该项目使用PostgreSQL作为数据库,Redis进行缓存,Elasticsearch进行全文搜索,支持多语言内容索引。
-
目前已索引17000个网站和615000篇文章,用户可以提交独立博客。
-
使用PostgreSQL而非SQLite是因为未来可能需要Pg的丰富插件。
-
Elasticsearch用于全文搜索,选择它是因为其对中文分词的支持更好。
-
爬虫仅从网站的RSS源获取数据,简化了实现过程。
-
支持多语言内容索引,使用专门的分词器提高搜索结果质量。
-
使用lingua进行语言检测,选择其高低准确率模式以提高性能。
-
后端经历了Django、Nest.js和Go三个版本的开发,最终选择Go作为主要技术栈。
-
Django的开发体验良好,但由于其复杂性,最终决定转向Node.js。
-
Nest.js引入了过多的复杂性,导致开发负担加重,因此最终选择Go。
-
Go的基本语法和ORM问题已得到改善,使用GORM Gen提升了CRUD体验。
-
前端使用SvelteKit,编译为混合SSG和SPA页面,推荐使用Svelte。
-
基础设施使用Docker Compose进行服务编排,避免了供应商锁定。
-
未来计划建立Prometheus + Grafana监控系统,以可视化搜索量和新索引量等指标。
延伸解读
技术选择的影响
RawWeb.org在技术栈的选择上经历了多次迭代,最终选择Go作为主要开发语言。这一选择不仅提高了开发效率,还简化了基础设施的管理。Go的基本语法和ORM的改进使得CRUD操作更加顺畅,适合快速迭代的项目需求。
多语言支持的重要性
该项目支持多语言内容索引,使用专门的分词器来提高搜索结果的质量。随着全球用户的增加,能够有效处理多种语言的搜索引擎将更具竞争力,尤其是在中文等语言的处理上,Elasticsearch的选择显得尤为重要。
简化爬虫实现的策略
RawWeb.org的爬虫仅从RSS源获取数据,这一策略大大简化了实现过程,降低了开发复杂性。通过这种方式,项目能够快速获取更新内容,同时避免了对网站的过度抓取,减少了潜在的法律风险。
延伸问答
RawWeb.org的主要目标是什么?
RawWeb.org旨在帮助用户发现被主流搜索引擎忽视的个人数字花园。
RawWeb.org使用了哪些技术栈?
RawWeb.org使用PostgreSQL作为数据库,Redis进行缓存,Elasticsearch进行全文搜索,前端使用SvelteKit。
为什么选择Go作为RawWeb.org的主要后端技术?
选择Go是因为其基本语法和ORM问题已得到改善,且开发体验更佳。
RawWeb.org如何处理多语言内容的索引?
RawWeb.org使用专门的分词器和语言检测技术来处理多语言内容的索引。
RawWeb.org的爬虫是如何工作的?
爬虫仅从网站的RSS源获取数据,简化了实现过程,作为HTTP请求者和RSS解析器。
未来RawWeb.org有哪些计划?
未来计划包括建立Prometheus + Grafana监控系统,以可视化搜索量和新索引量等指标。