Django的搜索引擎解决方案实际上有效吗?

时间:2010-03-06 01:25:11

标签: django search full-text-search search-engine xapian

到目前为止的故事:

决定使用Xapian作为搜索后端,因为它具有我正在寻找的所有搜索引擎功能,了解Unicode,干扰,几乎没有依赖性,并且不需要在其上安装膨胀的应用服务器。

尝试过Django和Haystack(再加上xapian-haystack,将Haystack与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中的错误,任何复杂查询都会产生零结果(我对此进行了双重验证),可能是因为单元测试实际上测试非常简单的情况,并且根本没有边缘情况。

试过Djapian。源代码充满了拼写错误(请注意,变量名称,而不是注释),文档也充满了模糊和过时的信息,永远不会导致工作安装。毫不奇怪,用户很少要求功能,但如何让它首先工作。

接下来在板上:探索Solr(安装Java环境加上Tomcat让我感到头疼,机器受RAM和CPU约束)或Lucene(稍微不那么令人头疼,但仍然如此)。

在我继续花费更多时间使用可能会或可能不会像宣传的那样有效的解决方案之前,我想知道:有没有人能够在Django中获得实际的,真实的搜索解决方案?我是认真的。我发现阅读“大部分问题大部分都解决了”,然后意识到你永远不会从源代码中获得有效的安装,这真是令人沮丧,因为实际上,处理那些“主要解决问题”的所有博客都没有超过基本安装和复制粘贴官方教程。

以下是要求:

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

那里有什么可以做到的吗?我对轶事证据不感兴趣,或者对一些声称应该有效的博客文章的引用感兴趣。我想听听那些真实拥有全功能设置的人在现实世界中,在真实条件下,真实查询的情况。

修改

让我再说一遍,我对轶事证据并不是那么感兴趣,因为有人在某个地方有一些运行不正常的属性。我已经去过那里,我阅读了所有的博客文章,邮件列表,我联系了作者,但是当涉及实际场景的实际实现时,没有任何东西像宣传的那样工作。

此外,考虑到任何项目的总体拥有成本,下面的用户也提到了这一点,我绝对没有兴趣听到有人在某个供应商以未知数量跳伞时能够将其拉出来专家用特定的领域知识修补整个装置,这些知识无法记录。

那么,如果您声称您的工作安装实际上满足了全面搜索的最低要求(请参阅上述要求),请提供以下信息,以便我们都可以从Django的搜索解决方案中获益。解决了这个问题:

  • 确切的Linux发行版,发行版,
  • Haystack(或同等版本)的完全发布版本以及搜索后端的发布版本,
  • 搜索引擎的确切发布版本
  • 公开(!)可用文档如何完全按照安装设置的方式设置所有组件,以满足上述最低要求。

谢谢。

7 个答案:

答案 0 :(得分:11)

我也开发了一些支持xapian的Django应用程序。其中最大的数据库有一个xapian数据库,索引为8G,存储2.4M文档(包括论坛帖子,wiki条目,行星条目和博客条目) - 仍然在增长。

总的来说,我对xapian非常满意。它表现非常好,易于使用。我唯一不喜欢的是xapian因为死锁而无法使用mod_wsgi(全局模式除外)。所以你被迫使用fastcgi(或连接到xapian-tcpsrv或编写自己的服务)。

我建议你直接使用xapian-bindings。 Xapian现在提供了很多有用的帮助器(TermGenerator,QueryParser等),这使得索引和查询变得简单。事实上,我没有什么可以成像来证明一个额外的库是合理的。在我看来,它们都更复杂,不允许你有效地索引。

您唯一需要的是对xapian工作方式的理解。 (什么是术语?什么是值?什么是词干,我应该在哪里使用它?等等)。您可以在xapian网站上找到所有这些主题,一旦您理解了这些概念,处理xapian就会变得容易。

此外,xapian API非常稳定。我已经开始在1.0版本之前使用它很长时间,并且从未遇到过API更改或版本冲突的任何问题。唯一改变的是,我为Django项目编写的所有帮助程序(查询解析器,标记器等)现在都没用了,因为类似的类已经进入了xapian核心。

因此,总而言之,只需尝试直接使用xapian-bindings。

答案 1 :(得分:9)

我可以在现实生活环境中使用Xapian后端(为了充分披露,我是xapian-haystack后端的作者)担保Django-Haystack。我们目前在几个站点上使用Haystack / Xapian,其中最大的有超过20,000个注册用户和一个包含超过143,000个独特术语的20,000多个文档的Xapian数据库,总大小约为141mb。

至于无法获得Haystack和Xapian后端运行的任何组合,我承认我不像我应该使用我的标记那样勤奋,因此版本存在一些混淆。但是,您应该能够使用两个代码库的当前主服务器而不会出现任何问题。如果不是这种情况,我会非常乐意帮助解决问题。你需要对这个问题稍微具体一点。简单地说“它不起作用”是不够的信息。

Daniel和我都尽力回应Github及时打开的任何问题。此外,我们通常在白天的#haystack IRC频道和django-haystack Google Group上都可以使用。

使用的版本:

  • Haystack 1.0BETA与Xapian-Haystack 1.1.0BETA
  • Haystack 1.0.1FINAL with Xapian-Haystack 1.1.3BETA

我们与Haystack一起部署的大多数网站都使用Xapian 1.0.5运行Ubuntu 8.04 LTS

答案 2 :(得分:7)

简短回答:不。

我们保释并使用Google自定义搜索。虽然该网站有超过10,000个可能的页面浏览量,但我们将站点地图的页面数量保持在4,000左右,并且每年花费250美元,这大约是我2小时的时间。顾客很高兴,他对结果感到满意。

我很想看到有人提出一个好的FOSS解决方案,但在商业环境中,TCO必须具有经济意义。

答案 3 :(得分:7)

您要求的详细信息。

  • 确切的Linux发行版,发行版 - Ubuntu 9.04& 9.10
  • Haystack(或同等版本)的确切发布版本 - Haystack 1.0以及主人
  • 发布搜索后端版本 - Solr& Haystack包含的Whoosh后端
  • 搜索引擎的确切发布版本 - Solr 1.3,Solr 1.4&飞快移动0.3.15
  • 公开(!)可用文档如何完全按照安装设置的方式设置所有组件,以满足上述最低要求。

除此之外,它是教程中的标准配置位,以及根据需要的任何其他覆盖(我无法链接,感谢Stack Overflow)。

作为Haystack的维护者,我正在积极运行上述所有设置。最小的Haystack安装(Haystack 1.0 + Whoosh)是大约600个文件。稍微大一点(Haystack master + Solr 1.4)是大约4000个文档。我所知道的最大部署(Haystack master + Solr 1.4)是大约300万个文档。

我通常会尽量避免Stack Overflow,所以如果你没有看到任何进展,请不要感到惊讶。邮件列表是最好的支持地点,但鉴于您的回复,我相信您只是在这里诋毁我。

答案 4 :(得分:1)

我(和我的同事)已成功使用Haystack来实现相当不错的搜索功能。

从干草堆开始很容易,并且后端嘶嘶作响;当不能接受嗖嗖声的表现时,改为Apache-Solr后端。

我们真的需要到处写一篇关于它的详细帖子,并附上有关其工作项目的链接。

现在我建议你看一下这个搜索:http://www.webdevjobshq.com/search/?q=rails使用Haystack和Apache-Solr后端实现。或者:http://www.govbuddy.com/search/?q=Roy

答案 5 :(得分:1)

您考虑过Sphinx了吗?您在数据存储中使用了什么?它有一个非常好的MySQL引擎。我认为它符合你的大多数要求,除非我不确定它与Django-ORM有多好关系。

我正在考虑在自己的Django应用程序中使用Sphinx来提高自动建议字段的性能,该字段在350万条记录的语料库中进行前缀和中缀搜索。但是我还没有实现它,所以我不能说Django + Sphinx集成。我唯一的Sphinx经验是使用MySQL引擎并直接查询MySQL。

答案 6 :(得分:0)

我使用Djapian。安装起来非常简单并且工作得很好。有一个实际的教程,涵盖了基本的用例,并显示了整个集成过程。

是的,它有一些含糊之处,但问题跟踪器是开放的,作者可以快速修复错误并添加功能。