stiletto/bnw — pull request #30 by Kagami (2012-07-28 17:17:46+00:00)
Title: Reimplement search

Переписал поиск, теперь индексирует и сообщения, и комментарии, поддерживает префиксы и date ranges. Индексатор само-запускается в отдельном треде раз в час.

Новые опции в конфиге:
```
# Путь до базы данных
search_db = 'bnw_xapian'
# Язык для нормализации (для бнвача надо russian)
search_language = 'english'
# Порт xmlrpc сервиса.
search_port = 7850
```

При первом запуске `search_server.py` будет получить из базы комментарии и сообщения, у которых нет поля `indexed`, так что пройдись вначале запросами вида:
```
% mongo bnw --eval 'db.messages.update({},{$unset:{indexed:1}},false,true)'
% mongo bnw --eval 'db.comments.update({},{$unset:{indexed:1}},false,true)'
```
Получает он их по 500 штук (`limit=500`), т.к. [дока по xapian](http://xapian.org/docs/apidoc/html/classXapian_1_1WritableDatabase.html#cbea2163142de795024880a7123bc693) нам говорит, что коммит лучше делать пореже, и запускает тред с `indexer.create_index`, который фигарит для всего этого индекс. Затем обновляются записи в бд — ставится `indexed=true`.
Тут кое-какие полу-вопросы: может стоит поднять limit до 1000? Или перебор уже?
И может надо фигачить обновление bulk update'ом, используя `$in` и `multi=true`?

Вроде всё. Вывод поиска в хмпп стал покрасивше, теперь думаю, стоит ли делать поиск в веб-интерфейсе.