到目前为止的故事:

之所以决定将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中获得过实际的,实际的搜索解决方案?我是认真的。我发现阅读“大部分已解决的大问题”确实令人沮丧,然后意识到您永远都无法从源代码获得有效的安装,因为实际上,处理这些“已解决的大多数问题”的所有博客作者都从未超越过基本安装,复制粘贴官方教程。

所以这是要求:

  • 必须能够在一个查询中搜索10-100个词
  • 必须处理+(项必须存在)和-(项不能存在),AND / OR
  • 必须处理任意分组(即,AND / OR周围的括号)
  • 必须在全文搜索之前或之后允许Django-ORM过滤(即使用Django知道的全套过滤器对结果进行预处理/后处理)
  • 或者,必须有一种工具来批量获取结果集并将其转换为QuerySet
  • 在机器上应该很轻巧,因此最好不要安装大型的JVM和基于Java的应用程序服务器

  • 那里有什么可以做的吗?我对轶事证据或某些声称它应该起作用的博客帖子的引用不感兴趣。我想听听有人真正在实际环境中,在真实条件下,具有真实查询的情况下使用功能齐全的设置的情况。

    编辑:

    让我再说一遍,我对传闻证据不太感兴趣,因为传闻中某人某处正在运行的安装程序在使用未指定的属性。我已经去过那里,阅读了所有博客文章,邮件列表,并与作者联系,但是当涉及实际场景的实际实现时,没有任何广告宣传过。

    另外,考虑到任何项目的总拥有成本,下面的用户也提出了这一点,我绝对不希望听到有人在某位供应商跳伞后,某个地方能够将其撤出,从而吸引了很多专家-使用无处记录的特定域知识修补整个安装。

    因此,请,如果您声称您的安装程序确实可以满足全面搜索的最低要求(请参阅上述要求),请提供以下内容,以便我们都能从Django的搜索解决方案中受益,该解决方案可以真正解决问题:
  • 确切的Linux发行版,发行版本
  • hayt的
  • 确切发布版本(或等效版本)和搜索后端
  • 的发布版本
  • 搜索引擎
  • 的确切发布版本
  • 可公开获取(!)文档,该文档如何完全按照安装设置的方式设置所有组件,从而满足上述最低要求。

  • 谢谢。

    最佳答案

    我也开发了一些具有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。

    08-19 22:53