Run curl -XGET 'localhost:9200' and make sure ES is running
Optional: install Kabana as a search frontend for ES
Enable MySQL Binlogging
Add the [mariadb] bin-log section to my.cnf and reload mysql server
Connect to mysql
SHOW VARIABLES LIKE 'binlog_format';
Make sure it shows ROW
Connect to root user
GRANT REPLICATION SLAVE ON *.* TO 'test'@'localhost'; where test is the user you will be running sync_es.py with
Setting up ES
Run ./create_es.sh and this creates two indicies: nyaa and sukebei
The output should show acknowledged: true twice
The safest bet is to disable the webapp here to ensure there's no database writes
Run python import_to_es.py with SITE_FLAVOR set to nyaa
Run python import_to_es.py with SITE_FLAVOR set to sukebei
These will take some time to run as it's indexing
Setting up sync_es.py
Sync_es.py keeps the ElasticSearch index updated by reading the BinLog
Configure the MySQL options with the user where you granted the REPLICATION permissions
Connect to MySQL, run SHOW MASTER STATUS;.
Copy the output to /var/lib/sync_es_position.json with the contents {"log_file": "FILE", "log_pos": POSITION} and replace FILENAME with File (something like master1-bin.000002) in the SQL output and POSITION (something like 892528513) with Position
Set up sync_es.py as a service and run it, preferably as the system/root
Make sure sync_es.py runs within venv with the right dependencies
Good to go!
After that, enable the USE_ELASTIC_SEARCH flag and restart the webapp and you're good to go
Code Quality:
Remember to follow PEP8 style guidelines and run ./lint.sh before committing.