【发布时间】:2011-01-24 08:41:17
【问题描述】:
到目前为止的故事:
决定使用 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。源代码充满了拼写错误(请注意,在变量名中,而不是 cmets),文档也充满了歧义和过时的信息,这些信息永远不会导致安装工作。毫不奇怪,用户很少询问功能,而是首先询问如何使其工作。
下一步:探索 Solr(安装 Java 环境和 Tomcat 让我很头疼,这台机器受 RAM 和 CPU 限制)或 Lucene(稍微不那么头疼,但仍然如此)。
在我继续花更多时间研究可能会或可能不会像宣传的那样有效的解决方案之前,我想知道:有没有人获得过在 Django 中工作的实际搜索解决方案?我是认真的。我发现阅读“大部分已解决的大问题”真的很令人沮丧,然后意识到您永远无法从源代码中获得有效的安装,因为实际上,所有处理这些“大部分已解决的问题”的博主都没有通过基本安装和复制粘贴官方教程。
所以这里是要求:
- 必须能够在一个查询中搜索 10-100 个字词
- 必须处理 +(术语必须存在)和 -(术语不能存在),AND/OR
- 必须处理任意分组(即 AND/OR 周围的括号)
- 必须允许在全文搜索之前或之后进行 Django-ORM 过滤(即使用 Django 知道的全套过滤器对结果进行预处理/后处理)
- 或者,必须有一个工具来批量获取结果集并将其转换为 QuerySet
- 机器上应该很轻,所以最好不要安装庞大的 JVM 和基于 Java 的应用服务器
有什么东西可以做到这一点吗?我对轶事证据或对一些声称它应该有效的博客文章的引用不感兴趣。我想听听有人在现实世界中,在真实条件下,通过真实的查询实际拥有完整的功能设置。
编辑:
让我再重复一遍,我对传闻证据并不感兴趣,即某人在某处有一个正在运行的安装使用未指定的属性。我已经去那里了,我阅读了所有的博客文章、邮件列表,我联系了作者,但是当涉及到实际场景的实际实施时,没有任何东西能像宣传的那样奏效。
另外,下面的一位用户也提出了这一点,考虑到任何项目的 TCO,我绝对不想听到有人在某个地方能够在供应商以未知数量的空降时实现它专家用无处记录的特定领域知识对整个安装进行猴子修补。
所以,如果您声称您的工作安装实际上满足完整搜索的最低要求(请参阅上面的要求),请提供以下内容,以便我们都能从 Django 的搜索解决方案中受益解决问题:
- 确切的 Linux 发行版,发布版本,
- Haystack(或同等版本)的确切发布版本和搜索后端的发布版本,
- 搜索引擎的确切发布版本
- 公开 (!) 可用的文档,如何完全按照您的安装设置方式设置所有组件,以满足上述最低要求。
谢谢。
【问题讨论】:
-
恐怕你有一个非常有效的观点。我一直在尝试将 djapian 或 haystack+xapian-haystack 插入一个网站,该网站具有在 MySQL 中使用 LIKE 实现的工作搜索功能,到目前为止,准备一个可复制的工作设置似乎是一场噩梦。我已经抛弃了 Djapian 并使用了 haystack,但即使它上手非常快,我也发现了一些错误(或文档短缺,我还不确定)。
标签: django search full-text-search search-engine xapian