Решение поисковой системы для Django, которое действительно работает?

История до сих пор:

Решил использовать Xapian в качестве поискового бэкэнда, потому что он имеет все функции поисковой системы, которые я искал, знает о Unicode, поиске корней, имеет мало зависимостей и не требует установки раздутого сервера приложений поверх него.

Пробовал Django и Haystack (плюс xapian-haystack, внутренний связующий код для привязки Haystack к Xapian), потому что в некоторых блогах он рекламировался как «работающий». Не работает. Ни django-haystack, ни проект xapian-haystack не предоставляют комбинацию версий, которая действительно работает вместе. МАСТЕР из обоих проектов выдает ошибку от Xapian, так что вообще не стабильно. Haystack 1.0.1 и xapian-haystack 1.0.x/1.1.0 не совместимы с API. Кроме того, в минимально работающей установке Haystack 1.0.1 и xapian-haystack MASTER любой сложный запрос дает нулевые результаты из-за ошибок либо в django-haystack, либо в xapian-haystack (это я перепроверил дважды), возможно, потому что юнит-тесты на самом деле тестировать очень простые случаи и вообще никаких пограничных случаев.

Пробовал Джапьян. Исходный код изобилует орфографическими ошибками (заметьте, в именах переменных, а не в комментариях), документация также изобилует неясностями и устаревшей информацией, которые никогда не приведут к работающей установке. Неудивительно, что пользователи редко спрашивают о функциях, а в первую очередь о том, как заставить их работать.

Далее на тарелке: изучение Solr (установка среды Java плюс Tomcat доставляет мне головную боль, машина ограничена оперативной памятью и процессором) или Lucene (немного меньше головной боли, но все же).

Прежде чем я продолжу тратить больше времени на решение, которое может работать или не работать так, как рекламируется, я хотел бы знать: кто-нибудь когда-нибудь получал реальное решение для поиска в реальном мире, работающее в Django? Я серьезно. Меня очень расстраивает чтение о «больших проблемах, в основном решаемых», а затем осознание того, что вы никогда не получите работающую установку из исходного кода, потому что, на самом деле, все блоггеры, занимающиеся этими «в основном решаемыми проблемами», никогда не проходили дальше базовой установки и копирование официальных руководств.

Итак, вот требования:

  • должен уметь искать 10-100 терминов в одном запросе
  • должен обрабатывать + (термин должен присутствовать) и - (термин не должен присутствовать), И/ИЛИ
  • должен обрабатывать произвольную группировку (например, круглые скобки вокруг И/ИЛИ)
  • должен разрешать фильтрацию Django-ORM до или после полнотекстового поиска (т.е. предварительная/пост-обработка результатов с полным набором фильтров, о которых знает Django)
  • в качестве альтернативы должна быть возможность массовой выборки набора результатов и преобразования его в QuerySet.
  • должен быть легким на машине, поэтому желательно без установки огромного JVM и сервера приложений на основе Java.

Есть ли что-нибудь, что делает это? Меня не интересуют неофициальные свидетельства или ссылки на некоторые сообщения в блогах, в которых утверждается, что это должно работать. Я хотел бы услышать от кого-нибудь, у кого действительно есть полнофункциональная установка, работающая в реальном мире, в реальных условиях, с реальными запросами.

ИЗМЕНИТЬ:

Позвольте мне еще раз повторить, что меня не очень интересуют неофициальные свидетельства того, что у кого-то где-то есть несколько запущенная установка, работающая с неопределенными свойствами. Я уже был там, я прочитал все сообщения в блогах, списки рассылки, я связался с авторами, но когда дело дошло до реальной реализации реальных сценариев, ничто никогда не работало так, как рекламируется.

Кроме того, и пользователь ниже также поднял этот вопрос, учитывая совокупную стоимость владения любого проекта, мне определенно не интересно слышать, что кто-то где-то смог осуществить это, как только поставщик десантировал неизвестное количество специалистов для обезьяны. -исправьте всю установку с конкретными знаниями предметной области, которые нигде не задокументированы.

Итак, пожалуйста, если вы утверждаете, что у вас есть работающая установка, которая на самом деле удовлетворяет минимальным требованиям для полноценного поиска (см. требования выше), предоставьте следующее, чтобы мы все могли извлечь выгоду из поискового решения для Django, которое действительно решает проблему. :

  • точный дистрибутив Linux, версия выпуска,
  • точная версия выпуска Haystack (или эквивалента) и версия выпуска поискового бэкэнда,
  • точная релизная версия поисковика
  • общедоступная (!) документация о том, как настроить все компоненты точно так, как была настроена ваша установка, чтобы выполнялись минимальные требования, указанные выше.

Спасибо.


person nikola    schedule 06.03.2010    source источник
comment
Боюсь, у вас есть очень веская точка зрения. Я пытался подключить либо djapian, либо haystack+xapian-haystack к веб-сайту, на котором есть работающая функция поиска, реализованная с помощью LIKE в MySQL, и пока похоже, что подготовка воспроизводимой рабочей установки будет кошмаром. Я уже сбросил Djapian и выбрал стог сена, но, несмотря на то, что с ним очень быстро начать, я уже нашел несколько ошибок (или нехватку документации, я еще не уверен).   -  person Tomasz Zieliński    schedule 12.12.2010


Ответы (7)


Я также разработал несколько приложений Django с поддержкой xapian. Самая большая из них имеет базу данных xapian с индексом 8G, в которой хранится 2,4 миллиона документов (включая сообщения на форумах, записи в вики, записи на планете и записи в блогах) — и она продолжает расти.

В целом я вполне доволен xapian. Он работает очень хорошо и прост в использовании. Единственное, что мне не нравится, так это то, что xapian не работает с mod_wsgi (кроме глобального режима) из-за взаимоблокировки. Итак, вы вынуждены использовать fastcgi (или подключиться к xapian-tcpsrv, или написать свой собственный сервис).

Я рекомендую вам использовать xapian-bindings напрямую. В настоящее время Xapian предлагает довольно много полезных помощников (TermGenerator, QueryParser и т. д.), которые упрощают как индексирование, так и выполнение запросов. На самом деле, я не могу представить ничего, что оправдывало бы дополнительную библиотеку. На мой взгляд, все они более сложные и не позволяют эффективно индексировать.

Единственное, что вам нужно, это некоторое понимание того, как работает xapian. (Что такое термины? Что такое значения? Что такое корень и где я должен его использовать? и так далее). Вы можете найти все эти темы на веб-сайте xapian, и как только вы поймете эти концепции, работа с xapian станет легкой.

Кроме того, xapian API чрезвычайно стабилен. Я начал использовать его задолго до выпуска 1.0, и у меня никогда не было проблем с изменениями API или конфликтами версий. Единственное, что изменилось, это то, что все те хелперы (парсер запросов, токенизатор и т.д.), которые я когда-то написал для своего проекта Django, теперь бесполезны, потому что подобные классы пробились в ядро ​​xapian.

Итак, подводя итог, просто попробуйте прямое использование xapian-bindings.

person tux21b    schedule 13.03.2010

Я могу поручиться за Django-Haystack с бэкендом Xapian (в интересах полного раскрытия информации я являюсь автором бэкенда xapian-haystack) в реальной производственной среде. В настоящее время мы используем Haystack/Xapian на нескольких сайтах, крупнейший из которых насчитывает более 20 000 зарегистрированных пользователей и базу данных Xapian с более чем 20 000 документов, содержащих более 143 000 уникальных терминов, общим размером ~141 МБ.

Что касается невозможности запустить какую-либо комбинацию Haystack и серверной части Xapian, я признаю, что я не был так усерден, как должен был, с моими тегами, и поэтому есть некоторая путаница с версиями. Однако вы должны без проблем использовать текущий мастер обеих кодовых баз. Если это не так, я был бы более чем счастлив помочь с проблемами. Однако вам нужно быть немного более конкретным в этом вопросе. Просто сказать «это не сработало» недостаточно.

Дэниел и я делаем все возможное, чтобы своевременно реагировать на любые вопросы, открытые на Github. Кроме того, мы оба обычно доступны на IRC-канале #haystack в течение дня и в группе Google django-haystack.

Используемые версии:

  • Haystack 1.0BETA с Xapian-Haystack 1.1.0BETA
  • Haystack 1.0.1FINAL с Xapian-Haystack 1.1.3BETA

Большинство сайтов, которые мы развернули с помощью Haystack, работали под управлением Ubuntu 8.04 LTS с Xapian 1.0.5.

person notanumber    schedule 09.04.2010

Краткий ответ: Нет.

Мы сдались и пошли с пользовательским поиском Google. Несмотря на то, что сайт имеет более 10 000 возможных просмотров страниц, мы сохраняем карту сайта до основных 4 000 страниц или около того, и это стоит 250 долларов в год, что составляет около 2 часов моего времени. Клиент доволен и чувствует себя комфортно с результатами.

Я бы хотел, чтобы кто-нибудь предложил хорошее решение FOSS, но в коммерческой ситуации совокупная стоимость владения должна иметь экономический смысл.

person Peter Rowell    schedule 06.03.2010

Детали, которые вы просили.

  • точный дистрибутив Linux, версия выпуска — Ubuntu 9.04 и 9.10
  • точная версия Haystack (или эквивалентная) - Haystack 1.0, а также мастер
  • выпускная версия бэкэнда поиска — бэкенды Solr & Whoosh включены в Haystack
  • точная релизная версия поисковика - Solr 1.3, Solr 1.4 & Whoosh 0.3.15
  • publicly (!) available documentation how to set up all components exactly in the way that your installation was set up such that the minimal requirements above are met.

Помимо этого, это стандартные биты конфигурации из учебника, а также любые дополнительные переопределения (на которые я не могу ссылаться, спасибо Stack Overflow) по мере необходимости.

Как сопровождающий Haystack, я активно использую все вышеперечисленные предыдущие настройки. Самая маленькая установка Haystack (Haystack 1.0 + Whoosh) составляет ~600 документов. Чуть больше (Haystack master + Solr 1.4) — около 4000 документов. Самое большое развертывание, о котором я знаю (Haystack master + Solr 1.4), составляет около 3 миллионов документов.

Обычно я стараюсь избегать переполнения стека, так что не удивляйтесь, если вы ничего не увидите дальше от меня. Список рассылки — лучшее место для поддержки, но, учитывая ваши ответы до сих пор, я уверен, что вы бы предпочли просто послать меня сюда.

person toastdriven    schedule 09.04.2010
comment
Если бы вы назвали задавание точных вопросов для проверки заявлений разработчиков мусором, что ж, хорошо. Я пытаюсь подчеркнуть, что если у вас, как у разработчика Haystack, установлено всего от 600 до 4000 проиндексированных документов, вы не должны делать никаких заявлений о том, что ваше программное обеспечение подходит для реального мира, потому что у вас нет еще не проверил. Кроме того, я уже пробовал вышеуказанные версии — Solr на Ubuntu 9.x не подходит, потому что нет пакета Tomcat 5, мастер Haystack/xapian-haystack нестабилен и т. д. Так что не подходит для меня. - person nikola; 25.05.2010

Я (и мои коллеги) успешно использовали Haystack для достижения довольно хорошей функциональности поиска.

Легко начать с haystack и whoosh backend; и перейти на серверную часть Apache-Solr, когда производительность whoosh неприемлема.

Нам действительно надо было написать об этом подробный пост со ссылками на проекты, где это работает.

А пока я могу предложить вам взглянуть на этот поиск: http://www.webdevjobshq.com/search/?q=rails реализовано с использованием Haystack с серверной частью Apache-Solr. Или это: http://www.govbuddy.com/search/?q=Roy

person lprsd    schedule 06.03.2010

Рассматривали ли вы Sphinx? Что вы используете в качестве хранилища данных? Он имеет движок MySQL, который работает потрясающе. Я думаю, что он соответствует большинству ваших требований, за исключением того, что я не совсем уверен, насколько хорошо его можно связать с Django-ORM.

Я серьезно рассматриваю возможность использования Sphinx в одном из моих собственных приложений Django для повышения производительности в поле автоматического предложения, которое выполняет поиск по префиксу и инфиксу в корпусе из 3,5 миллионов записей. Но я еще не успел его реализовать, поэтому не могу говорить об интеграции Django+Sphinx. Мой единственный опыт работы со Sphinx связан с MySQL Engine и прямым запросом MySQL.

person nategood    schedule 08.03.2010
comment
И это именно проблема. Я наткнулся на Sphinx в прошлом, но я никогда не встречал никого и не читал о том, как на самом деле интегрировать Sphinx в Django в реальном сценарии, включая конкретные номера версий, которые действительно совместимы. Ключевые слова от автора django-sphinx из его собственных слов: После установки нужно отредактировать несколько настроек в settings.py, который, опять же, из-за того, что я плохо разбираюсь в документации, не выложен на сайте. Я не собираюсь трогать это, извините. - person nikola; 08.03.2010
comment
У меня отлично работает django-sphinx. Я использую последние версии обоих, и поиск по инфиксу и префиксу работает хорошо. Они создают массивные индексы, но в остальном они работают. Да, документация от django-sphinx не очень хороша, но этого достаточно. Прелесть его в том, что на самом деле это довольно маленький разъем, и вы можете понять, что происходит, если он не работает так, как вы ожидаете. Sphinx довольно мощный и быстрый, а поддержка на форуме хорошая. И настройки, которые он говорит, не опубликованы... Я думаю, что они размещены на сайте проекта. - person mlissner; 11.05.2010
comment
Sphinx — это здорово, но django-sphinx — это катастрофа. Избавьте себя от хлопот и попробуйте что-нибудь другое. - person yekta; 31.10.2014

Я использую Джапиан. Он был довольно прост в установке и прекрасно работает. Существует фактический учебник, который охватывает основные варианты использования и показывает весь процесс интеграции.

Да, в нем есть некоторые неясности, но система отслеживания проблем открыта, и авторы быстро исправляют ошибки и добавляют новые функции.

person Alex Koshelev    schedule 06.03.2010
comment
Я следовал учебнику, он не работает. Пожалуйста, сообщите мне точные версии, которые вы использовали, которые привели к полностью работающей установке и которые действительно работают в реальных сценариях. - person nikola; 07.03.2010