2010-03-06 73 views
30

到目前为止故事:Django实际工作的搜索引擎解决方案?

决定与Xapian的去作为搜索的后端,因为它拥有所有的搜索引擎功能,我一直在寻找,知道的Unicode,词干,几乎没有依赖关系,并要求在没有臃肿的应用服务器安装它的顶部。

尝试过Django和Haystack(加上xapian-haystack,将Haystack绑定到Xapian的后端粘贴代码),因为它在相当多的博客上被标榜为“working”。不工作。 django-haystack和xapian-haystack项目都没有提供实际合作的版本组合。来自两个项目的MASTER从Xapian中产生一个错误,所以它不稳定。 Haystack 1.0.1和xapian-haystack 1.0.x/1.1.0不兼容API。此外,在草堆1.0.1和Xapian的-MASTER草垛的最小安装工作,任何复杂的查询产生任何结果,由于在任Django的草垛或Xapian的-草垛(我的双验证了这一点)的错误,也许是因为单元测试实际上测试非常简单的案例,并且根本没有边缘案例。

试过Djapian。源代码是充斥着拼写错误(请注意,在变量名,而不是评论),文档也充满了含糊和过时的信息永远不会导致工作安装。毫不奇怪,用户很少要求功能,但如何才能使其工作。探索Solr(安装Java环境加上Tomcat让我头痛,机器受内存和CPU限制)或Lucene(稍微少点头疼,但仍然)。

在我开始花更多的时间与可能或可能无法正常工作,标榜一个解决方案,我想知道:有没有人得到一个实际的,现实世界的搜索解决方案在Django的工作?我是认真的。我觉得很沮丧阅读“主要是解决大问题”,然后意识到,你将永远不会从源代码得到一个工作安装,因为,事实上,对付那些“大多是亟待解决的问题”的所有博客从来没有过去基本安装和复制粘贴官方教程。

因此,这里是要求:

  • 必须能够搜索10-100术语在一个查询
  • 必须处理+(项必须存在)和 - (项必须不存在)和/或
  • 必须(即左右括号AND/OR)处理任意分组
  • 必须允许Django的ORM过滤前或全文搜索后(即前/结果与全套的后处理这Django知道有关过滤器)
  • 替代地,必须有一个设施散装取结果集,并将其转换成一个查询集
  • 应该是在机器上的光,所以优选不堆积如山JVM和基于Java的应用程序服务器安装

有没有什么可以做到这一点?我对轶事证据不感兴趣,或者对一些声称它应该有效的博客文章的引用感兴趣。我希望听到有人在现实世界中真正具备全功能设置的情况下,在真实条件下以及真正的疑问。

编辑:

让我再次重申,我不是这样的传闻证据表明,有人在什么地方有着几分运行安装有不明性质的工作非常感兴趣。我已经去了那里,我阅读了所有的博客文章,邮件列表,我联系了作者,但是当涉及真实场景的实际实施时,没有任何东西能像广告一样工作。考虑到任何项目的总体拥有成本,我绝对不会有兴趣听到有人在一个供应商以未知数量跳伞时能够把它拉下来的兴趣。的专家用特定的领域知识对整个安装进行修补,这些知识在任何地方都没有记录。

因此,如果您声称您的工作安装实际满足完整搜索的最低要求(请参阅上述要求),请提供以下内容,以便我们都能从Django的搜索解决方案中受益实际上解决了这个问题:

  • 确切的Linux发行版,发行版,草垛(或同等学历)
  • 确切的发布版本和发布搜索后端的版本,搜索引擎
  • 确切的发布版本
  • 公开(!)可用文档如何准确设置所有组件,以符合上述最低要求。

谢谢。

+0

恐怕你有一个非常有效的点。我一直在尝试将djapian或haystack + xapian-haystack插入到一个网站,该网站在MySQL中使用LIKE实现了一个工作搜索功能,到目前为止,它看起来像准备一个可重现的工作设置将是一场噩梦。我已经甩掉了Djapian并且用大海捞针,但尽管开始很快,但我已经发现了一些bug(或文档短缺,我还不确定)。 – 2010-12-12 20:53:21

回答

7

简短的回答:

我们保释,并与谷歌的自定义搜索去了。尽管该网站拥有超过10,000个可能的网页浏览量,但我们仍将网站地图Feed降低到4000页左右,每年花费250美元,这大概是我的2个小时。客户很高兴,他对结果感到满意。

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

2

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

从haystack和whoosh后端开始很容易;并且当whoosh的性能不可接受时更改为Apache-Solr后端。

我们真的得到解决它的详细的帖子,并链接到它工作的项目。

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

+0

我非常想知道你是如何工作的,以及你正在使用的版本,包括操作系统版本(例如Ubuntu 9.10上的Solr是一件痛苦的事,因为Tomcat 5.5没有包,因此solr -tomcat5.5软件包无法安装,这意味着拉和编译大量的依赖关系)。 – nikola 2010-03-07 00:54:50

+0

另外,Whoosh处理了多少个搜索词?在实际开发中是谁?从该项目的Trac网站来看,它已经停滞不前,致命的错误依然存在。 – nikola 2010-03-07 01:04:23

+0

Trac网站已过时,Whoosh已转移到bitbucket:http://bitbucket.org/mchaput/whoosh/changesets/,并且仍在积极开发中。 – 2010-04-05 18:39:41

0

我用Djapian。这很简单,安装和工作很好。有一个实际的教程,涵盖了基本的用例,并显示了整个集成过程。

是的,它有一些含糊不清,但问题跟踪器是开放的,作者迅速修复错误和添加功能。

+1

我跟着教程,它不起作用。请告诉我,您使用的确切版本导致了完全正常的安装,并且实际上适用于真实世界的场景。 – nikola 2010-03-07 00:56:12

1

您考虑过Sphinx吗?你在数据存储中使用什么?它有一个非常棒的MySQL引擎。我认为它符合你的大部分要求,除非我不确定它可以很好地绑定到Django-ORM中。

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

+0

而这正是问题所在。我过去曾经遇到过狮身人面像,但我从未见过任何人,也没有读过关于如何在实际场景中实际将狮身人面像整合到Django中的问题,其中包括实际兼容的特定版本号。django-sphinx的作者用他自己的话来说的关键词:“安装完成后,你需要编辑settings.py中的一些设置,这同样是因为我在文档中吮吸,不会在网站上发布。”我不会去碰这个,对不起。 – nikola 2010-03-08 02:54:15

+0

我有django-sphinx工作正常。我正在使用最新的两种版本,以及中缀和前缀搜索工作。他们创造了大量的索引,但是否则他们就会工作。 是的,django-sphinx的文档不是很好,但它已经足够了。它的美妙之处在于它实际上是一个相当小的连接器,如果它不像您期望的那样工作,您可以弄清楚发生了什么。狮身人面像是相当强大和快速的,并在论坛上的支持是好的。而他所说的设置不会发布......我相信他们发布在项目网站上。 – mlissner 2010-05-10 22:52:47

+0

狮身人面像是伟大的,但Django狮身人面像是一场灾难。节省自己的麻烦,并尝试其他的东西。 – yekta 2014-10-31 13:41:59

11

我已经与Xapian的支持一些Django应用程序了。其中最大的一家拥有8G索引的xapian数据库,可存储2.4M文档(包括论坛帖子,维基条目,星球条目和博客条目) - 仍在不断增长。

总的来说,我与Xapian的很高兴。它表现非常好,易于使用。我不喜欢的唯一情况是xapian不能用于mod_wsgi(全局模式除外),因为死锁。所以你不得不使用fastcgi(或者连接到xapian-tcpsrv或者编写你自己的服务)。

我建议你,可以直接使用Xapian的-绑定。 Xapian现在提供了很多有用的帮助器(TermGenerator,QueryParser等),这使索引和查询变得简单。事实上,没有任何我可以成像的东西可以证明一个额外的图书馆。在我看来,它们都更加复杂,不允许你有效地进行索引。

你唯一需要的,是如何Xapian的工作方式表示一定的了解。 (什么是术语?什么是价值?什么是词汇,我应该在哪里使用它?等等)。你可以在xapian网站上找到所有这些主题,只要你理解了这些概念,处理xapian就会变得简单。

此外,Xapian的API是稳定的极端。我已经开始在1.0版本之前使用它很久,并且从未遇到API更改或版本冲突的问题。唯一改变的是,我曾经为我的Django项目写过的所有helper(查询解析器,tokenizer等)现在都没用,因为类似的类已经进入了xapian核心。

因此,要总结,只是给的Xapian-绑定尝试直接使用。

9

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

至于无法获得Haystack和Xapian后端运行的任何组合,我会承认我没有像应用我的标签那样勤奋,因此对版本有些混淆。但是,您应该可以毫无问题地使用两个代码库的当前主控。如果不是这种情况,我很乐意协助解决问题。尽管如此,你需要对这个问题稍微具体一些。简单地说“它没有用”是不够的信息。

丹尼尔和我都尽最大努力及时回应在Github上打开的任何问题。另外,我们通常都可以在#haystack IRC频道和django-haystack Google Group上使用。使用

版本:

  • 草堆1.0BETA与Xapian的-草堆1.1。0BETA
  • 草堆1.0.1FINAL与Xapian的-草堆1.1.3BETA

大多数我们已经部署了草堆的网站已经运行Ubuntu 8.04与Xapian的1.0.5

7

细节你的要求。

  • 确切Linux发行,发行版本 - Ubuntu的9.04 & 9.10
  • 草堆(或等同物)的精确发行版本 - 草堆1.0以及主
  • 释放搜索后端的版本 - Solr的&嗖后端包括在草堆
  • 确切的发布版本的搜索引擎 - (!)的Solr 1.3,Solr的1.4 &嗖0.3.15
  • 公开获得的文件如何设置的所有组件exactl y以安装设置的方式满足上述最低要求。

除此之外,它是从教程中的标准配置位,加上任何附加的覆盖(我不能链接到,由于堆栈溢出)如所须。

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

我通常会尽量避免堆栈溢出,所以不要惊讶,如果你没有看到任何进一步从我。邮件列表是最好的支持地方,但鉴于迄今为止的回复,我相信你宁愿在这里把我甩到一边。

+0

如果您将“询问确切的问题以验证开发人员提出的索赔”标签为“垃圾”,那么很好。我试图说的是,如果作为Haystack的开发人员只安装了600到4000个索引文档,那么您不应该声称您的软件适合现实世界 - 因为您没有“没有验证它。另外,我已经尝试了以上版本 - Ubuntu 9.x上的Solr是一个不行,因为没有Tomcat 5软件包,Haystack/xapian-haystack的主人不稳定,等等。 – nikola 2010-05-25 12:45:13