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 инстансам трака.

Комментарии 5

  1. poodlez написал:

    Поправь ссылочку на http://xapian.org/

    Оставлен 27 Февраль 2009 в 11:39
  2. diadya_vova написал:

    Поиск интервалов очень нужная штука. Часто приходится выбирать итемы с фильтром по интервалу дат. Тот патч, в "Issue 20", как он? В примере приводится поиск по датам, но в конце делается замечание, что только "numerical ranges are supported". В документации к Xapian я наткнулся, что оно любит даты в формате YYYYMMDD.

    п.с.: спасибо за djapian :)

    Оставлен 19 Март 2009 в 14:05
  3. Александр Кошелев написал:

    как он?

    Патч в тикете был для строй версии. И я его тогда не решился применить, поскольку хотел более красивое решение сделать, но руки не дошли пока. Соответственно скорей всего либо в 2.1, либо в 2.2 я эту фичу так или иначе поддержу. Сам понимаю, что полезная;-)

    Оставлен 19 Март 2009 в 19:45
  4. bw написал:

    djapian.indexer.Indexer.field_class никак не используется :-).

    ..bw

    Оставлен 30 Март 2009 в 22:09
  5. Александр Кошелев написал:

    Да, это "тяжелое наследие прошлого":-)

    Оставлен 31 Март 2009 в 18:50