I’m developing a web app using Django, and I’ll need to add search functionality soon. Search will be implemented for two models, one being an extension of the auth user class and another one with the fields name, tags, and description. So I guess nothing too scary here in context of searching text.
For development I am using SQLite and as no database specific work has been done, I am at liberty to use any database in production. I’m thinking of choosing between PostgreSQL or MySQL.
I have gone through several posts on Internet about search solutions, nevertheless I’d like to get opinions for my simple case. Here are my questions:
-
is full-text search an overkill in my case?
-
is it better to rely on the database’s full-text search support? If so, which database should I use?
-
should I use an external search library, such as Whoosh, Sphinx, or Xapian? If so, which one?
EDIT:
tags is a Tagfield (from the django-tagging app) that sits on a m2m relationship. description is a field that holds HTML and has a max_length of 1024 bytes.
If that field
tagsmeans what I think it means, i.e. you plan to store a string which concatenates multiple tags for an item, then you might need full-text search on it… but it’s a bad design; rather, you should have a many-many relationship between items and a tags table (in another table, ItemTag or something, with 2 foreign keys that are the primary keys of the items table and tags table).I can’t tell whether you need full-text search on
descriptionas I have no indication of what it is — nor whether you need the reasonable but somewhat rudimentary full-text search that MySQL 5.1 and PostgreSQL 8.3 provide, or the more powerful one in e.g. sphinx… maybe talk a bit more about the context of your app and why you’re considering full-text search?Edit: so it seems the only possible need for full-text search might be on
description, and that looks like it’s probably limited enough that either MySQL 5.1 or PostgreSQL 8.3 will serve it well. Me, I have a sweet spot for PostgreSQL (even though I’m reasonably expert at MySQL too), but that’s a general preference, not specifically connected to full-text search issues. This blog does provide one reason to prefer PostgreSQL: you can have full-text search and still be transactional, while in MySQL full-text indexing only work on MyISAM tables, not InnoDB [[except if you add sphinx, of course]] (also see this follow-on for a bit more on full-text search in PostgreSQL and Lucene). Still, there are of course other considerations involved in picking a DB, and I don’t think you’ll be doing terribly with either (unless having to add sphinx for full-text plus transaction is a big problem).