Architecture Overview

SearchQuerySet

One main implementation.

  • Standard API that loosely follows QuerySet
  • Handles most queries
  • Allows for custom “parsing”/building through API
  • Dispatches to SearchQuery for actual query
  • Handles automatically creating a query
  • Allows for raw queries to be passed straight to backend.

SearchQuery

Implemented per-backend.

  • Method for building the query out of the structured data.
  • Method for cleaning a string of reserved characters used by the backend.

Main class provides:

  • Methods to add filters/models/order-by/boost/limits to the search.
  • Method to perform a raw search.
  • Method to get the number of hits.
  • Method to return the results provided by the backend (likely not a full list).

SearchBackend

Implemented per-backend.

  • Connects to search engine
  • Method for saving new docs to index
  • Method for removing docs from index
  • Method for performing the actual query

SearchSite

One main implementation.

  • Standard API that loosely follows django.contrib.admin.sites.AdminSite
  • Handles registering/unregistering models to search on a per-site basis.
  • Provides a means of adding custom indexes to a model, like ModelAdmins.

SearchIndex

Implemented per-model you wish to index.

  • Handles generating the document to be indexed.
  • Populates additional fields to accompany the document.
  • Provides a way to limit what types of objects get indexed.
  • Provides a way to index the document(s).
  • Provides a way to remove the document(s).