python - Django 的搜索功能

标签 python database django search full-text-search

我正在使用 Django 开发一个 Web 应用程序,并且很快需要添加搜索功能。搜索将针对两种模型实现,一种是 auth 用户类的扩展,另一种具有字段 nametagsdescription 。所以我想在搜索文本的上下文中没有什么太可怕的。

对于开发,我正在使用 SQLite由于没有完成数据库特定的工作,我可以自由地在生产中使用任何数据库。我正在考虑在 PostgreSQL 之间进行选择或MySQL .

我在互联网上浏览了几篇有关搜索解决方案的帖子,但我想获得针对我的简单案例的意见。这是我的问题:

  1. 全文搜索对我来说是不是太过分了?

  2. 依靠数据库的全文搜索支持是否更好?如果是这样,我应该使用哪个数据库?

  3. 我应该使用外部搜索库,例如 Whoosh , Sphinx ,或Xapian ?如果有,是哪一个?

编辑: tags 是一个位于 m2m 关系上的 Tagfield(来自 django-tagging 应用程序)。 description 是一个保存 HTML 的字段,最大长度为 1024 字节。

最佳答案

如果该字段 tags 的含义符合我的想法,即您计划存储一个连接项目的多个标签的字符串,那么您可能需要对其进行全文搜索...但是这是一个糟糕的设计;相反,您应该在项目和标签表之间建立多对多关系(在另一个表中,ItemTag 或其他表,具有 2 个外键,分别是项目表和标签表的主键)。

我无法判断您是否需要对description进行全文搜索,因为我没有表明它是什么——也无法判断您是否需要MySQL那样的合理但有些基本的全文搜索5.1 和 PostgreSQL 8.3 提供,或者更强大的一个,例如sphinx...也许可以多谈谈您的应用程序的上下文以及您为什么考虑全文搜索?

编辑:所以看起来全文搜索的唯一可能需要可能是在描述上,而且看起来它可能受到足够的限制,MySQL 5.1 或 PostgreSQL 8.3 都可以很好地满足它。对我来说,我最喜欢 PostgreSQL(尽管我在 MySQL 方面也相当专家),但这是一个普遍的偏好,与全文搜索问题没有特别的联系。 This blog确实提供了一个更喜欢 PostgreSQL 的理由:你可以进行全文搜索并且仍然是事务性的,而在 MySQL 中全文索引仅适用于 MyISAM 表,而不适用于 InnoDB [[当然,如果你添加 sphinx 除外]](另请参阅this follow-on 了解有关 PostgreSQL 和 Lucene 中全文搜索的更多信息)。尽管如此,选择数据库当然还涉及其他考虑因素,我认为您不会在这两个方面做得很糟糕(除非必须为全文加事务添加 sphinx 是一个大问题)。

关于python - Django 的搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/932255/

相关文章:

mysql - 在一个查询中使用 unique 、 Case 和 order by

django - 不同型号共用一个ID列表

python - 一种型号是否可以使用 GPU 的所有内存?

python - opencv python - 从rodrigues函数应用旋转矩阵

python - 双循环中增加服务器数量,每 5 个服务器带有分隔符

SQL创建空数据库

database - 对 ORM 进行逆向工程

django - django 中没有名为 'sendgrid_backend' 的模块

python - 将列表附加到字典

python - __init__ 中声明的变量似乎在类实例之间共享?