搜索Django的功能

sha*_*nyu 2 python database django search full-text-search

我正在使用Django开发一个Web应用程序,我需要尽快添加搜索功能.搜索将两个模型来实现,一个是auth用户类的扩展和另一个领域name,tagsdescription.所以我想在搜索文本的上下文中没什么可怕的.

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

我已经在互联网上发了几篇关于搜索解决方案的帖子,但是我想就我的简单案例得到意见.这是我的问题:

  1. 在我的情况下,全文搜索是否有效?

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

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

EDIT: tags是一个Tagfield(来自django-tagging应用程序),它位于m2m关系上.description是一个包含HTML的字段,其max_length为1024字节.

Ale*_*lli 5

如果该字段tags意味着我认为它意味着什么,即您计划存储一个字符串,该字符串连接一个项目的多个标签,那么您可能需要对其进行全文搜索...但这是一个糟糕的设计; 相反,你应该在项目和标签表之间有多对多的关系(在另一个表中,ItemTag或其他东西,有2个外键,它们是items表和tags表的主键).

我不知道你是否需要全文搜索,description因为我没有指示它是什么 - 也不是你需要MySQL 5.1和PostgreSQL 8.3提供的合理但有些基本的全文搜索,还是更强大的搜索例如,狮身人面像......或许可以谈谈你的应用程序的背景以及你为什么考虑全文搜索?

编辑:所以似乎唯一可能需要全文搜索description,并且看起来它可能有限,MySQL 5.1或PostgreSQL 8.3将很好地服务.我,我对PostgreSQL有一个好处(即使我也是MySQL的合理专家),但这是一个普遍的偏好,没有专门连接到全文搜索问题.这个博客确实提供了一个更喜欢PostgreSQL的理由:你可以进行全文搜索并且仍然是事务性的,而在MySQL中全文索引仅适用于MyISAM表,而不是InnoDB [[除非你添加sphinx,当然]](也看到这个后续多一点在PostgreSQL和Lucene的)全文搜索.当然,选择数据库当然还有其他考虑因素,我认为你不会做任何一件事(除非必须为全文加上交易添加sphinx是一个大问题).