Documentation/Demo
Installation
Copy the search folder into your project folder and add 'search' to your settings.INSTALLED_APPS and copy the url for the background tasks (/bg-tasks/.*) from app.yaml into your own app.yaml. gae-search requires at least app-engine-patch 1.0.2 (a Django port for App Engine). It does not work with django-helper or webapp.
Discussion group
Please join the gae-search discussion group. It's open to all users and we'll post release announcements there, too.
Tutorials/Demos
Here you can find everything you need to get started with gae-search. Create your own post to test the them in the demos.- Indexing and searching your data (demo)
- Using the values index* (demo)
- Integrating properties into the values index* (demo)
- Using chain-sort* (demo)
- Auto-completion and word prefix search* (demo)
- Easy to use views and templates* (demo)
- Key-based pagination* (demo)
* Only available in Premium version
References
* Only available in Premium version
Limitations
gae-search is still affected by App Engine's datastore limitations. It's basically a pimped-up alternative for SearchableModel, but it's based on the same principles.
1000 results (better: 300)
In practice you should display no more than 200-300 results, though. Otherwise, you get too many datastore timeouts. Our default search views display at most 301 results. The additional last result is used to display a message like
"More than 300 results found".
5000 unique words per entity (better: 500)
In practice you should not try to index a text that contains more than 500 unique words, though. What does "unique words" mean? For example, if you have the text "Is it or is it not?" the unique words are "is", "it", "or", "not". This means that your entity will contain four index entries for the search index.
If you want to support prefix-based search (the "startswith" indexer) your index grows much faster because it indexes all substrings. For example, "hello" would be indexed as "h", "he", "hel", "hell", "hello". Thus, you should only use prefix-based search for short string properties. Don't index a complete text or forum post that way because you'll quickly have more than 1000 index entries even for medium-sized posts.
No sorting/ranking (except chain-sorting)
You can't sort search results because that would result in an exploding datastore index. We do however provide chain-sorting as a very basic ("coarse-grained") mechanism to work around this limitation (see features on the left side), but you shouldn't use it for complex sorting which would require more than 5 internal queries.
No inequality filters
As with sorting, inequality filters would result in an exploding datastore index because they require a dedicated datastore index. In some cases it's possible to work around this limitation by adding a ListProperty with categories for your data (e.g., price ranges $0-$9, $10-$49, etc.).
Search index size
Due to App Engine's datastore limitations, gae-search and all other available search solutions for App Engine (including SearchableModel) do not scale beyond several 10,000s large indexed entities.
