Little known feature of Sphinx Search is dynamic config generation. Sphinx Search programs (
searchd, etc.) take
--config option. If config has shebang on first line, mentioned programs will execute config as a program, and will treat everything written to
stdout as actual config.
Let’s start with simple task: include contents of few files from
/usr/local/etc/sphinx/ dir into config:
#!/bin/sh /bin/cat /usr/local/etc/sphinx/*.conf
cat concatenates files and writes them to
man cat for short documentation).
/usr/local/etc/sphinx/*.conf means “all files from
/usr/local/etc/sphinx/ dir that have
.conf extension”. Thus, we concatenate and print all
.conf files from
Okay, but what if we need something more advanced? We can use Python: just put
#!/usr/bin/env python on the first line. We can put index names and SQL into tuple of tuples, and later generate parts of config from it (simplified example):
INDEXES = ( ('qa_questions', 'SELECT id, title, text FROM qa_question'), ('qa_answers', 'SELECT id, text FROM qa_answer'), )
No one wants to hardcode SQL into config. What about something DRYer? As this is regular Python script, we can use ORM (Django ORM, SQLAlchemy, Storm, etc.) to generate SQL for us, or any other library.
This blog is about things I encounter while doing web and non-web software development.