django - 真正有效的 Django 搜索引擎解决方案?

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

  • 有什么东西可以做到这一点吗?我对轶事证据或引用一些声称它应该有效的博客文章不感兴趣。我想听听真正拥有在真实世界、真实条件下、真实查询中工作的全功能设置的人的意见。

    编辑:

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

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

    所以,如果你声称你有一个工作安装,实际上满足全面搜索的最低要求(见上面的要求),请提供以下内容,以便我们都能从实际解决问题的 Django 搜索解决方案中受益:
  • 确切的 Linux 发行版,发行版,
  • Haystack(或同等版本)的确切发布版本和搜索后端的发布版本,
  • 搜索引擎的确切发布版本
  • 公开 (!) 可用文档如何完全按照您的安装设置方式设置所有组件,以满足上述最低要求。

  • 谢谢你。

    最佳答案

    我也开发了一些具有 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 即可。

    关于django - 真正有效的 Django 搜索引擎解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2390994/

    相关文章:

    Django 3.0 值错误

    xml - 具有大量属性的 MarkLogic REST API 搜索

    java - 在java中搜索列表中对象的最快方法

    regex - Eclipse文件搜索正则表达式操作

    django - 生产 django 服务器在渲染时抛出 "NoReverseMatch",正在进行开发

    python - 通过 Django 中的 View 提供静态文件

    mysql - MATCH AGAINST Mysql 没有给出正确的结果

    database - 如何在数据库中实现全文搜索

    python - django 站点地图不存在于/sitemap.xml

    c# - 用于实现 "Search as you type"Combobox 的 BackgroundWorker