在Django中使用MongoDB进行实时搜索?

3 投票
2 回答
1785 浏览
提问于 2025-04-15 23:10

我正在做一个以搜索为主的项目。简单来说,用户会往网站上添加内容,而这些内容应该能立刻出现在搜索结果中。这个项目还在开发中。

到目前为止,我一直在用Haystack和Xapian。不过我有点担心,当网站上内容变多后,网站的性能会受到影响。如果我想实现实时搜索,就必须频繁地进行索引更新。

最近我在了解MongoDB。我还没有找到一个让我满意的答案,但我觉得MongoDB可能会对我预期会遇到的实时搜索索引问题有所帮助。这种想法对吗?换句话说,MongoDB提供的搜索功能是否更适合实时搜索?

网站上将会有大量的非结构化文本(包括HTML)和相关数据(比如价格、标签、时间信息)。

提前谢谢你,

Laundro

2 个回答

1

MongoDB其实并不是一个“专门的全文搜索引擎”。根据他们的全文搜索文档,你只能创建一个标签数组,这个数组会重复字符串数据或其他列的数据。如果这个数组里有很多元素(成百上千个),那么插入数据的成本就会变得非常高。

我同意Tomasz的看法,Sphinx Search可以满足你的需求。如果你想要真正的实时搜索,可以使用实时索引,如果几秒钟的延迟可以接受的话,可以使用增量索引

1

我对MongoDB了解不多,但我用Sphinx Search取得了很好的效果。这是一个简单、强大且非常快速的工具,用于全文索引和搜索。它还自带Python的封装,使用起来很方便。

如果Haystack能提供对它的支持,那就更简单了,但遗憾的是,Sphinx的支持目前还在愿望清单上。不过,设置Sphinx非常快(我在几小时内就完成了,针对一个已经在用的基于Django的客户关系管理系统),所以在切换到更通用的解决方案之前,你可以先试试这个。

撰写回答