Things to know about ElasticSearch¶
Input uses ElasticSearch to power search.
Input uses ElasticUtils to interface with ElasticSearch.
Command line tools¶
Do a complete reindexing of everything by:
This will delete the existing index specified by
create a new one, and reindex everything in your database.
If you need to get stuff done and don’t want to wait for a full indexing, you can index a percentage of things.
For example, this indexes 10% of your data ordered by id:
./manage.py esreindex --percent 10
This indexes 50% of your data ordered by id:
./manage.py esreindex --percent 50
I use this when I’m fiddling with mappings and the indexing code.
You can also specify which models to index:
./manage.py esreindex --models feedback_simple
--help for more details:
./manage.py esreindex --help
If you kick off indexing with the admin, then indexing gets done in chunks by celery tasks. If you need to halt indexing, you can purge the tasks with:
./manage.py celeryctl purge
If you purge the tasks, you need to cancel outstanding records. Run this sql in mysql:
UPDATE search_record SET status=2 WHERE status=0 or status=1;
If you do this often, it helps to write a shell script for it.
You can see ElasticSearch index status with:
This lists the indexes, tells you which ones are set to read and write, and tells you how many documents are in the indexes by mapping type.
esdelete: deleting indexes¶
You can use the search admin to delete the index.
On the command line, you can do:
./manage.py esdelete <index-name>
When you add data to the database, it needs to be added to the index.
If the setting
ES_LIVE_INDEX is True, then this will be handled
automatically in the
post_save hook as long as celery tasks are
For celery tasks to be handled, you have to either have
CELERY_ALWAYS_EAGER set to True, or have at least one celery
worker running, and RabbitMQ working.
If you don’t want live indexing, you can also reindex everything using the admin or using the esreindex command-line tool, as detailed above.