Александр Кошелев
Александр Кошелев Python-разработчик

Djapian 2.0!

Djapian

Точнее оно - приложение. Где-то больше года назад я писал про свой форк этого приложения. Тогда я кое-что там исправил и немного изменил под себя. Среди комментарии к почту, посвященному этому событию, есть один от автора самого Djapian - Рафаэля. Так вот после непродолжительного разговора с ним, мне дали комит доступ к репозиторию и благословили на контрибуцию некоторых из моих идей. Но мне тогда было уже не до движка индексирования, так как мной работал и мне этого хватало сполна и поэтому я как-то не собрался ничего в самом Djapian изменить или улучшить.

Прошло много времени и в конце лета во время отпуска (да, а как ещё программисту проводить отпуск?:)) я всё-таки решил, что не гоже держать два родственных проекта. Собравшись с силами и мыслями в перерывах между работай на загородном участке, я всё-таки закомитил кое-какие вещи в Djapian. И в последствии с легкостью перешел на его использование в блоге. Но вскоре при одном из обновлений блога, я сломал функциональность поиска и его пришлось отключить (что некоторые из вас заметили). К этому времени накопилось ещё несколько идей, которые не мешало бы реализовать в Djapian. Да и к тому же я стал owner’ом проекта и практически получил неограниченные возможности для его развития. На прошлой неделе я провел пару вечеров над кодом и в итоге зарелизил Djapian 2.0. А поиск на блоге ждет следующего апдейта,чтобы появиться вновь.

Соответственно, django-xapian больше не актуален и я вам рекомендую использовать Djapian.

Я же сейчас перечислю основные его параметры и достоинства, чтобы вы могли понять о чем речь и как он вам может пригодиться:

  • построен поверх питонячего биндинга к С++ библиотеке - Xapian.
  • высокоуровневый DSL, который скрывает все служебные операции.
  • позволяет индексировать модели как структурированные документы.
  • дает возможность индексировать не только поля модели, результат работы методов но и атрибуты связных объектов.
  • позволяет осуществлять поиск по отдельным полям.
  • предоставляет возможность использовать стемминг - язык может быть как глобальный заданным, так и разным для каждого объекта модели. Пока возможности немного ограничены, но в следующем релизе будет полный спектр.
  • позволяет задать “вес” отдельных полей модели.
  • имеет механизм корректировки строки запроса для такой приятной и удобной функции как подсказка вида: “Возможно вы имели ввиду … ?” - с исправделенной строкой запроса на базе имеющихся термов в базе.
  • ленивые запросы. По аналогии с джанговским ORM поиск осуществляется только в тот момент когда действительно понадобились результаты.
  • Совместимость со стандартным паджинатором.
  • Index Shell - командная оболочка для наблюдением за состоянием индекса. Моя гордость, предельно простая по сути штука, но очень полезная как для разработки, так и повседневного использования.

Многие из перечисленных особенностей являются следствием богатых возможностей самого Xapian, который ещё обладает очень полезными качествами:

  • имеет инкрементальный индекс, т.е. позволяет быстро проводить добавления документов в него без полной пересборки.
  • имеет полноценный язык запросов, включая булевы операции и поиск интервалов (пока не реализовано в Djapian, но очень интересная штука)
  • легко интегрируется в многопоточное окружение по схеме “множественное чтение/одиночная запись”

Пробуйте, пользуйтесь и пишите баг-репорты и запросы на улучшения в багтрекер проекта - мы за ним следим:-)

Кстати, открыл для себя Google Code заново. С момент последнего моего с ним общения сервис заметно похорошел и оброс полезными функциями. Всё более очевидная альтернатива selfhosted инстансам трака.

comments powered by Disqus