30

到目前为止的故事:

决定使用 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
  • 必须处理任意分组(即 AND/OR 周围的括号)
  • 必须允许在全文搜索之前或之后进行 Django-ORM 过滤(即使用 Django 知道的全套过滤器对结果进行预处理/后处理)
  • 或者,必须有一个工具来批量获取结果集并将其转换为 QuerySet
  • 机器上应该很轻,所以最好不要安装大量的 JVM 和基于 Java 的应用服务器

有什么东西可以做到这一点吗?我对轶事证据或对一些声称它应该有效的博客文章的引用不感兴趣。我想听听有人在现实世界中,在真实条件下,通过真实查询实际拥有完整功能的设置。

编辑:

让我再重复一遍,我对有人在某个地方有一个正在运行的安装使用未指定属性的轶事证据不太感兴趣。我已经去过那里,我阅读了所有的博客文章、邮件列表,我联系了作者,但是当涉及到现实世界场景的实际实施时,没有任何东西能像宣传的那样奏效。

此外,下面的一位用户也提出了这一点,考虑到任何项目的 TCO,我绝对不想听到有人在某个地方能够在供应商空降未知数量的专家后将其拉下来。 - 使用无处记录的特定领域知识修补整个安装。

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

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

谢谢你。

4

7 回答 7

11

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

总的来说,我对 xapian 很满意。它性能非常好并且易​​于使用。我唯一不喜欢的是 xapian 由于死锁而无法与 mod_wsgi 一起使用(全局模式除外)。所以你不得不使用 fastcgi(或者连接到 xapian-tcpsrv 或者编写你自己的服务)。

我建议您直接使用 xapian-bindings。Xapian 现在提供了很多有用的帮助程序(TermGenerator、QueryParser 等),这使得索引和查询都变得简单。事实上,我无法想象任何东西可以证明额外的库是合理的。在我看来,它们都比较复杂,并且不允许您有效地建立索引。

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

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

所以,总结一下,直接试试 xapian-bindings 的用法。

于 2010-03-13T07:06:28.580 回答
9

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

至于无法运行 Haystack 和 Xapian 后端的任何组合,我承认我没有像我应该做的那样勤奋,因此版本有些混乱。但是,您应该能够毫无问题地使用两个代码库的当前主控。如果不是这种情况,我将非常乐意协助解决问题。不过,您需要对这个问题更具体一点。仅仅说“它不起作用”是不够的信息。

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

使用的版本:

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

我们使用 Haystack 部署的大多数站点都运行 Ubuntu 8.04 LTS 和 Xapian 1.0.5

于 2010-04-09T00:56:10.853 回答
7

Short answer: No.

We bailed and went with a Google Custom Search. Although the site has over 10,000 possible page views, we keep the sitemap feed down to the main 4,000 pages or so and it costs $250/year, which is about 2 hours of my time. The customer is happy and he feels comfortable with the results.

I'd love to see someone come up with a good FOSS solution, but in a commercial situation the TCO has got to make economic sense.

于 2010-03-06T07:12:24.533 回答
7

您要求的详细信息。

  • 确切的 Linux 发行版,发行版 - Ubuntu 9.04 和 9.10
  • Haystack(或同等版本)的确切发布版本 - Haystack 1.0 以及 master
  • 搜索后端的发布版本 - Haystack 中包含的 Solr 和 Whoosh 后端
  • 搜索引擎的确切发布版本 - Solr 1.3、Solr 1.4 和 Whoosh 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,所以如果你从我这里看不到任何东西,请不要感到惊讶。邮件列表是获得支持的最佳场所,但鉴于您迄今为止的回复,我敢肯定您宁愿把我扔在这里。

于 2010-04-09T03:09:01.707 回答
1

I (and my colleagues) have successfully used Haystack to achieve a fairly good search functionality.

It is easy to start with haystack and whoosh backend; and change to the Apache-Solr backend when performance of whoosh is not acceptable.

We really got to get around to write a detailed post about it with links to the projects where it works.

For now I can suggest you to have a look at this search: http://www.webdevjobshq.com/search/?q=rails implemented using Haystack with Apache-Solr backend. Or this: http://www.govbuddy.com/search/?q=Roy

于 2010-03-06T07:24:09.390 回答
1

你考虑过狮身人面像吗?您使用什么作为数据存储?它有一个非常棒的 MySQL 引擎。我认为它满足您的大部分要求,除了我不确定它与 Django-ORM 的结合有多好。

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

于 2010-03-08T01:47:35.350 回答
0

我用日文。安装非常简单,效果很好。有一个涵盖基本用例并显示整个集成过程的实际教程。

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

于 2010-03-06T16:42:30.367 回答