到目前为止的故事:
之所以决定将Xapian用作搜索后端,是因为它具有我一直在寻找的所有搜索引擎功能,了解Unicode,词干分析,几乎没有依赖关系并且不需要在其之上进行大量的应用服务器安装。
尝试使用Django和Haystack(以及xapian-haystack,这是将Haystack绑定(bind)到Xapian的后端胶水代码),因为它在很多博客上都被宣传为“有效”。不工作。 django-haystack或xapian-haystack项目均未提供实际可一起使用的版本组合。这两个项目的MASTER都会产生Xapian错误,因此根本不稳定。 Haystack 1.0.1和xapian-haystack 1.0.x / 1.1.0不兼容API。另外,在最低工作的Haystack 1.0.1和xapian-haystack MASTER安装中,由于django-haystack或xapian-haystack中的错误(我对此进行了两次验证),任何复杂的查询都将产生零结果,这也许是因为单元测试实际上测试非常简单的情况,根本没有边缘情况。
试过贾比亚人。源代码充满了拼写错误(请注意,使用变量名,而不是注释),文档也充满了歧义和过时的信息,这些信息永远不会导致安装正常。毫不奇怪,用户很少会要求功能,而是首先要如何使其工作。
接下来的内容:探索Solr(安装Java环境以及Tomcat使我头疼,机器受RAM和CPU限制)或Lucene(头疼程度稍小,但仍然如此)。
在我花更多的时间来解决可能不如广告宣传的解决方案之前,我想知道:有没有人在Django中获得过实际的,实际的搜索解决方案?我是认真的。我发现阅读“大部分已解决的大问题”确实令人沮丧,然后意识到您永远都无法从源代码获得有效的安装,因为实际上,处理这些“已解决的大多数问题”的所有博客作者都从未超越过基本安装,复制粘贴官方教程。
所以这是要求:
那里有什么可以做的吗?我对轶事证据或某些声称它应该起作用的博客帖子的引用不感兴趣。我想听听有人真正在实际环境中,在真实条件下,具有真实查询的情况下使用功能齐全的设置的情况。
编辑:
让我再说一遍,我对传闻证据不太感兴趣,因为传闻中某人某处正在运行的安装程序在使用未指定的属性。我已经去过那里,阅读了所有博客文章,邮件列表,并与作者联系,但是当涉及实际场景的实际实现时,没有任何广告宣传过。
另外,考虑到任何项目的总拥有成本,下面的用户也提出了这一点,我绝对不希望听到有人在某位供应商跳伞后,某个地方能够将其撤出,从而吸引了很多专家-使用无处记录的特定域知识修补整个安装。
因此,请,如果您声称您的安装程序确实可以满足全面搜索的最低要求(请参阅上述要求),请提供以下内容,以便我们都能从Django的搜索解决方案中受益,该解决方案可以真正解决问题:
谢谢。
最佳答案
我也开发了一些具有xapian支持的Django应用程序。其中最大的一个是xapian数据库,其索引为8G,存储着240万个文档(包括论坛帖子,Wiki条目,行星条目和博客条目),并且还在不断增长。
总的来说,我对xapian非常满意。它的性能非常好,易于使用。我唯一不喜欢的是,由于死锁,xapian无法与mod_wsgi(全局模式除外)一起使用。因此,您不得不使用fastcgi(或连接到xapian-tcpsrv或编写自己的服务)。
我建议您直接使用xapian-bindings。如今,Xapian提供了很多有用的帮助程序(TermGenerator,QueryParser等),这使索引和查询都变得简单。实际上,我无法想象有什么理由可以证明有一个额外的库。我认为它们都比较复杂,并且不允许您高效地建立索引。
您唯一需要的是对xapian的工作方式有所了解。 (什么是术语?什么是值(value)?什么是词根,应该在哪里使用?等等)。您可以在xapian网站上找到所有这些主题,一旦您了解了这些概念,就可以轻松地处理xapian。
而且,xapian API非常稳定。我在1.0发行之前很久就开始使用它,并且从来没有API更改或版本冲突方面的任何问题。唯一发生变化的是,我曾经为Django项目编写的所有这些帮助器(查询解析器, token 生成器等)现在都没有用,因为类似的类已进入xapian核心。
因此,总而言之,只需尝试直接使用xapian-bindings。