вторник, 6 октября 2015 г.

Нечёткий поиск с Elasticsearch

Что такое Elasticsearch прекрасно описано в wikipedia, поэтому здесь это описывать не вижу смысла. Совсем кратко и на свой лад — замечательная штука для поиска по большой базе (десятки тысяч документов, но не миллиарды) с возможностью нечёткого поиска, т.е. в запросе могут быть ошибки, опечатки, пропуски или даже не та раскладка. Замечательность elasticsearch'а в простоте разворачивания, простоте наполнения базы и простоте поиска.

Перед началом работы нужно установить Elasticsearch из пакетов, либо скачать архив и распаковать. После остаётся его запустить (bin/elasticsearch) и можно смотреть в браузере (http://localhost:9200/) как оно работает.

Для "потестить" можно всё делать через браузер/curl.

Добавление документа
$ curl -XPUT 'http://localhost:9200/test/doc/1' -d '{"name":"имя пользователя"}'
здесь
    test — индекс
    doc — doc_type (можно считать подиндексом индекса)

Поиск
$ curl -XGET 'http://localhost:9200/test/doc/_search?pretty=true' -d '{"query":{"fuzzy":{"name":"плзователь"}}}'
Ну или смотрим в браузере
(pretty=true в запросе просто чтобы в ответ получить json не в одну строку, а нормально отформатированный)


Для работы с Elasticsearch из python'а есть "родной" модуль elasticsearch и сторонний pyelasticsearch. Сторонний появился чуть раньше официального, но с определённой версии работает через официальный (т.е. для работы с ним нужно ставить оба модуля), развивается и дальше и старается быть более pythonic, нежели официальный.


понедельник, 5 октября 2015 г.

Свой startup script for systemd

Мне для работы удобно использовать виртуалку VirtualBox в качестве виртуального разработческого сервера. Легко конфигурируема, легко переносима, максимально изолированное окружение и в основную систему нет необходимости ставить пакеты, нужные только для проектов. Опять же — никаких конфликтов версий имеющегося ПО. Так как в качестве редактора я использую Komodo Edit, который отлично ходит по SSH, то неплохо бы всегда иметь активную виртуалку, а ответственность за её запуск возложить на кого-нибудь ещё, и не контролировать это дело самостоятельно. Отсюда и возникла необходимость в своём скрипте для systemd:


/etc/systemd/system/virtualbox.centos7.service

[Unit]
Description=VBox "centos7"
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/VBoxHeadless -s centos7 --vrdp=off
ExecStop=/usr/bin/VBoxManage controlvm centos7 acpipowerbutton
RemainAfterExit=no
User=george
TimeoutStopSec=8

[Install]
WantedBy=multi-user.target


Остаётся выполнить 
$ systemctl enable virtualbox.centos7
и виртуалка сама стартует при включении и гасится при выключении компьютера.