返回资讯中心
外部精选
软件工程
#开发者实时流

Mwmbl 推出非营利开源搜索引擎,由社区决定排名

来源标题:Mwmbl: An open source, non-profit web search engine

Mwmbl 是一个非营利、开源的搜索引擎,旨在替代 Google 和 Bing 等商业搜索引擎,排名由社区决定。它拥有社区驱动的自有索引,抓取任务分布在志愿者运行的服务器上,目前索引规模远小于商业搜索引擎。用户可通过运行命令行爬虫或安装 Firefox 扩展参与贡献。

Hacker News 最新sonicrocketman2026/11/9 · 今天14 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

Mwmbl 是一个非营利、开源的搜索引擎,由社区决定排名。我们的目标是成为 Google 和 Bing 等商业搜索引擎的替代品。我们拥有由社区驱动的自有索引——索引本身是集中式的,但抓取工作分散在志愿者运行的服务器上。目前我们的索引规模远小于商业搜索引擎,但你可以加入我们,帮助改变这一现状!我们的主要社区在 Matrix 上,但也有一个 Discord 服务器,用于非开发相关的讨论。社区负责抓取网络(见下文)并整理搜索结果。我们友好且欢迎你。加入我们吧!

所有文档都在 https://book.mwmbl.org。make coverage 会测量 Python 和 Rust 代码,并打印一个综合的、按可执行行加权的百分比。有关先决条件、排除项和 CI 详情,请参阅覆盖率指南。

如果你有闲置的计算机算力和带宽,目前最好的帮忙方式是运行我们的命令行爬虫。如果你使用 Firefox,可以安装我们的扩展来帮忙。该扩展从商业搜索引擎获取搜索结果,用于评估我们自己的排名。它不会使用或访问你的任何个人数据。

广告资助的搜索引擎的动机与提供最佳用户体验是相冲突的。这些网站针对广告收入进行优化,用户体验则退居其次。这意味着页面上充斥着广告,而这些广告往往与搜索结果没有明显区分。此外,Hacker News 上的 eitland 评论道:仔细想想,对于一个实际上在用户方面拥有垄断地位的搜索引擎——正如 mattgb 指出的——[在某种程度上]在索引方面也拥有垄断地位——首先提供正确答案简直是愚蠢的:如果他们能让我在他们的搜索结果和嵌入广告的技术博客之间多来回一次、两次或五次,那就意味着多一次、两次或五次的广告展示。

近年来,替代搜索引擎的领域迅速扩展。以下是我感兴趣的一些搜索引擎的不完整列表:在这些引擎中,YaCy 在精神上最接近非营利搜索引擎的理念。索引分布在一个点对点网络中。不幸的是,这一设计决策减慢了搜索结果的获取速度。Marginalia Search 非常棒,但我们的目标不同:我们旨在成为商业搜索引擎的替代品,而 Marginalia 旨在提供一种不同类型的搜索。我遇到的所有其他搜索引擎都是营利性的。如果我漏掉了某个,请告诉我!

要成为一个好的搜索引擎,我们需要存储许多条目,但运行引擎的成本至少与存储的条目数量成正比。因此,我们的主要考虑是降低每个存储条目的成本。该设计基于这样一个观察:大多数条目只对一小部分词有排名。在这种极端情况下,即每个条目只对一个词有排名,通常的倒排索引设计效率极低,因为我们必须至少存储每个词两次:一次在索引中,一次在条目数据本身中。我们的设计是一个巨大的哈希映射。我们有一个单一的存储,由固定数量 N 个页面组成。每个页面大小固定(目前为 4096 字节,与一页内存匹配),由压缩的条目列表组成。给定一个我们希望某个条目对其有排名的词,我们计算该词的哈希值,即 0 到 N-1 之间的一个值。然后该条目被存储在相应的页面中。要检索页面,我们只需计算用户查询中各个词的哈希值,加载相应的页面,将条目过滤为包含该词的那些,并对条目进行排名。由于每个页面都很小,这可以非常快速地完成。因为我们压缩了条目列表,我们可以对多个词进行排名,并保持比倒排索引设计更小的索引。至少理论上是这样。这个想法尚未在大规模上得到测试。

如果你愿意以这些或其他任何方式提供帮助,非常感谢!请加入我们的 Matrix 聊天服务器,或给主要作者发邮件(电子邮件地址在 git 提交历史中)。

本地测试:要在本地试用该服务,请参阅 Mwmbl 手册中的相关章节。Python 代码使用 ruff 进行格式化和 lint 检查,并使用 ty 进行类型检查。两者都在 pyproject.toml 中配置,并固定在开发依赖组中,因此每个人运行相同的版本。在 uv sync 之后安装一次 git 钩子:make install-hooks。从那时起,每次提交都会被格式化和检查。要手动运行相同的检查:make check # 格式检查 + lint + 类型检查,与 CI 运行的完全一致;make fix # 重新格式化并应用安全的 lint 修复。ty 仅对错误级别的诊断进行门控。存在大量警告积压——Django 的 Model.objects 对 ty 不可见,因为 ty 没有 django-stubs 插件支持——因此,在 [tool.ty.rules] 中,存在既有违规的规则被降级为警告。运行 make typecheck-all 可查看整个积压,并在某个规则的计数降至零后将其提升回错误级别。注意:不建议使用此方法,因为它更为复杂,而且除非你设置一个爬虫来抓取到你的服务器,否则你的索引不会包含任何数据。你需要设置自己的 Backblaze 或等效的 S3 存储,或者拥有生产密钥的访问权限,而我们可能不会给你。

“mwmbl”怎么发音?就像“mumble”。我住在 Mumbles,在威尔士语中拼写为“Mwmbwls”。但本意是“to mumble”,就像“不要搜索,只管 mwmbl!”

非常感谢 Mohamed Alm 提供的安全咨询和建议。

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →