views:

10566

answers:

14

I'm building a Django project that needs search functionality, and until there's a django.contrib.search, I have to choose a search app. So, which is the best? By "best" I mean...

  • easy to install / set up
  • has a Django- or at least Python-friendly API
  • can perform reasonably complex searches

Here are some apps I've heard of, please suggest others if you know of any:

I'd also like to avoid using a third-party search engine (like Google SiteSearch), because some of the data I'd like to index is for site members only and should not be public.

+14  A: 

Justin, I'd try djangosearch first: Jacob Kaplan-Moss (Django's lead developer) is working on it.

Potential hazards:

  • The home page warns the API might not be entirely stable

Potential benefits:

  • “The long term goal is for this to become django.contrib.search.”
Garth T Kidd
The page now says "This project is no longer under active development. If you're looking for a django full text search application that works with multiple search engines, check out Haystack."
TomA
+5  A: 

Thanks Garth. I had seen that djangosearch wanted to become the official Django search, but I was hesitant to use it because I couldn't find any documentation! Luckily, there's a README in subversion that I hadn't seen before, and it makes the API look very cool:

# set up the model
class Event(models.Model):
    title = models.CharField(max_length=255)
    date = models.DateField()
    is_outdoors = models.BooleanField()

    index = djangosearch.ModelIndex(text=['title'], 
                                    additional=['date', 'is_outdoors'])

# run a search
results = Event.index.search("django conference")
Justin Voss
+1  A: 

If you have large amount of data to be indexed or you expect high traffic, I'd suggest using some external search engine, like Solr. This way, you'll keep shared-nothing approach and be able to scale your site components independently.

zgoda
+11  A: 

Justin,

I am searching for the same thing, as are a lot of other people. Let's hope that django.contrib.search will be added soon.

In the meantime, this is what I found:

To me, most look quite complicated and, frankly, a little daunting to implement. I'd be interested to learn what you think of these.

Cheers, Dave

davidhund
+7  A: 

I'd recommend Sphinx for full-text search and aggregation, and django-sphinx is good enough for production use. We found that Sphinx was the least resource-intensive and fastest way to index and search our documents and that django-sphinx was a nice wrapper on top of the sphinx client.

The group by aggregation is particularly nice, if for example you want to display how many documents with a certain tag or by a certain author (or both) matched a search. In memory attribute updates were convenient too, especially for removing deleted articles immediately.

Joe W.
A: 

Thanks Joe,

We decided to go with Tsearch2 and a custom postgres adaptor. Tsearch2 does not need an extra process to run, which was convenient since we are on a WebFaction hosting with limited memory... It's not completely done yet, but seems to be a good solution...

davidhund
+1  A: 

It looks like everyone here missed django-xappy

After quick evaluation of all existing search addons for Django, I found this one as most flexible and easiest to use. It's rough on the edges in few places, but it's still the best way to use power of Xapian search engine inside Django projects.

vvarp
A: 

I found Djoosh which relies on the pure-python external search engine Whoosh to work well with my 'Python' brain.

+1  A: 

You might want to look at Django Solr search (aka "Solango") which comes with some nice documentation to get you started...

ahagenbruch
+3  A: 

You might want to consider letting Yahoo do all the hard work with their Build your own Search Service (BOSS). Here is a great blog post that walks you through the process: http://www.peterkrantz.com/2008/yahoo-search-in-django/

Gourneau
+34  A: 

Check out Haystack Search - a new model based search abstraction layer that currently supports Lucene, Solr and Woosh. Looks like it's well supported and documented.

kpw
Haystack is under active development and the author is always available via the email list.
Tom
From djangosearch project: "This project is no longer under active development. If you're looking for a django full text search application that works with multiple search engines, check out haystack. If you're looking for something specific to Solr, you might want to try solango. "
Esteban Feldman
+6  A: 

The google code page for djangosearch indicates that it is no longer under active development, and suggests haystack or solango.

Joe Germuska
+1  A: 

I think I am going to have to give a shout out to Djapian.

It is rock-solid...just pull down a source distribution and peek inside. Top notch code, not very many comments tho..

It's still a young software project, but I think the django community should throw it's weight behind this one.

A: 

anyone of this search engines implements the multisearch?

My answer might come a bit late, but I confirm solango ( http://code.google.com/p/django-solr-search/ ) can search on multiple criteria, as multiple field can be indexed ( fulltext but also datetime, etc. ). It's very flexible, very active and nicely documented.
vincent
That should be a separate question.
Török Gábor