代码之家  ›  专栏  ›  技术社区  ›  nikola

Django的搜索引擎解决方案是否真的有效?

  •  30
  • nikola  · 技术社区  · 15 年前

    决定使用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中的错误,任何复杂的查询都不会产生任何结果(我对此进行了双重验证),可能是因为单元测试实际上测试非常简单的情况,而根本没有边缘情况。

    我是贾皮安。源代码中充满了拼写错误(请注意,在变量名中,不是注释),文档中也充满了歧义和过时的信息,这些信息永远不会导致正常安装。毫不奇怪,用户很少要求功能,而是首先要求如何使其工作。

    下一步:探索Solr(安装Java环境加上Tomcat让我头疼,这台机器受RAM和CPU限制),或者Lucene(稍微不那么头疼,但仍然如此)。

    在我继续花更多的时间研究一个解决方案之前,我想知道:有没有人在Django得到过一个实际的、真实的搜索解决方案?我是认真的。我发现读到“大问题基本上解决了”,然后意识到你永远不会从源代码中得到一个有效的安装,这真的很令人沮丧,因为事实上,所有处理这些“基本上解决了的问题”的博主从来没有通过过基本安装和复制粘贴官方教程。

    • 必须能够在一次查询中搜索10-100个术语
    • 必须处理+(条款必须存在)和-(条款不得存在)和/或
    • 必须处理任意分组(即括号和/或)
    • 必须允许Django ORM在全文搜索之前或之后进行过滤(即使用Django知道的全套过滤器对结果进行预/后处理)
    • 在机器上应该很轻,因此最好不要安装庞大的JVM和基于Java的应用程序服务器

    有什么东西能做到这一点吗?我对轶事证据不感兴趣,也对一些声称它应该起作用的博客文章不感兴趣。我想听听那些在现实世界中,在真实条件下,在真实查询中,具有完整功能设置的人的意见。

    此外,下面的一位用户也提到了这一点,考虑到任何项目的总体拥有成本,我绝对不想听到有人,在某个地方能够成功,一旦一个供应商空降到未知数量的专家,用特定的领域知识对整个安装进行修补,而这些领域的知识在哪里都没有记录。

    • Haystack的确切发布版本(或同等版本)和search backend的发布版本,
    • 搜索引擎的确切发布版本
    • 公开(!)可用文档,说明如何按照安装的方式正确设置所有组件,以满足上述最低要求。

    非常感谢。

    7 回复  |  直到 15 年前
        1
  •  11
  •   tux21b    15 年前

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

    总的来说,我对xapian很满意。它的性能非常好,易于使用。我唯一不喜欢的是xapian由于死锁而不能与mod_wsgi一起工作(除了全局模式)。因此,您必须使用fastcgi(或连接到xapian tcpsrv或编写自己的服务)。

    我建议您直接使用xapian绑定。Xapian现在提供了很多有用的帮助工具(TermGenerator、QueryParser等),这使得索引和查询都变得简单。事实上,我无法想象有什么理由增加一个库。在我看来,它们都更加复杂,不允许您高效地索引。

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

    因此,总而言之,请尝试直接使用xapian绑定。

        2
  •  9
  •   notanumber    14 年前

    我可以保证Django Haystack在真实的生产环境中使用Xapian后端(为了充分披露,我是Xapian Haystack后端的作者)。我们目前在多个网站上使用Haystack/Xapian,其中最大的网站拥有20000多名注册用户和一个Xapian数据库,该数据库包含20000多个文档,其中包含143000多个独特术语,总大小约为141mb。

    Daniel和我都尽最大努力及时回应Github上出现的任何问题。此外,我们白天通常都可以在#haystack IRC频道和django haystack Google Group上看到。

    使用的版本:

    • Haystack 1.0.1最终采用Xapian Haystack 1.1.3BETA

    我们使用Haystack部署的大多数站点都使用Xapian 1.0.5运行Ubuntu8.04 LTS

        3
  •  7
  •   Peter Rowell    15 年前

    简短回答:没有。

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

        4
  •  7
  •   toastdriven    14 年前

    你要求的细节。

    • 精确的Linux发行版,发行版-Ubuntu 9.04&9.10
    • Haystack(或同等产品)的精确发行版-Haystack 1.0和master
    • 搜索后端发布版本-Solr&干草堆附带的嗖嗖声后端
    • 搜索引擎的精确发布版本-Solr1.3、Solr1.4&呼呼0.3.15
    • 公开(!)可用文档,说明如何按照安装的方式正确设置所有组件,以满足上述最低要求。

    除此之外,它是教程中的标准配置位,加上任何需要的附加覆盖(由于堆栈溢出,我无法链接到)。

    我通常会尽量避免堆栈溢出,所以如果您没有从我这里看到任何东西,请不要感到惊讶。邮件列表是提供支持的最佳场所,但考虑到您目前的回复,我相信您宁愿在这里丢弃我。

        5
  •  1
  •   lprsd    15 年前

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

    从干草堆和嗖嗖声后端开始很容易;当whoosh的性能不可接受时,更改为apachesolr后端。

    我们真的需要抽出时间写一篇关于它的详细文章,并链接到它工作的项目。

    现在,我建议您看看这个搜索: http://www.webdevjobshq.com/search/?q=rails http://www.govbuddy.com/search/?q=Roy

        6
  •  1
  •   nategood    15 年前

    你考虑过吗 Sphinx

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

        7
  •  0
  •   Alex Koshelev    15 年前

    我用杰皮安语。它的安装非常简单,效果非常好。有一个实际的教程,涵盖了基本用例,并展示了整个集成过程。

    是的,它有一些模棱两可的地方,但问题跟踪程序是开放的,作者可以快速修复错误并添加功能。