Подтвердить что ты не робот

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

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

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

Пробовал Django и Haystack (плюс xapian-haystack, код клеточного кода для привязки Haystack к Xapian), потому что он был рекламирован в некоторых блогах как "работающий". Не работал. Ни django-haystack, ни проект xapian-haystack не обеспечивают комбинацию версий, которая фактически работает вместе. MASTER из обоих проектов дает ошибку от 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 (я дважды проверял это), может быть, потому что unit-tests на самом деле проверяют очень простые случаи и вообще не имеют кромки.

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

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

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

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

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

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

EDIT:

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

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

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

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

Спасибо.

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

Я могу поручиться за Django-Haystack с помощью Xapian-бэкэнда (в интересах полного раскрытия, я являюсь автором бэкэнда из хэппи-стога) в реальной жизни, в производственной среде. В настоящее время мы используем 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

Ответ 3

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

Мы пообещали и пошли с помощью Google Custom Search. Несмотря на то, что на сайте более 10 000 возможных просмотров страниц, мы сохраняем файл Sitemap для загрузки до 4000 страниц или около того, и он стоит 250 долларов США в год, что составляет около 2 часов моего времени. Клиент счастлив и чувствует себя комфортно с результатами.

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

Ответ 4

Запрошенная вами информация.

  • точный дистрибутив Linux, версия выпуска - Ubuntu 9.04 и 9.10
  • точная версия версии Haystack (или эквивалентная) - Haystack 1.0, а также мастер
  • релиз версии бэкэнда поиска - The Solr и Whoosh, включенные в Haystack
  • точная версия версии поисковой системы - Solr 1.3, Solr 1.4 и Whoosh 0.3.15
  • публично (!) доступная документация, как настроить все компоненты точно так, как была настроена ваша установка, чтобы выполнялись минимальные требования.

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

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

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

Ответ 5

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

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

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

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

Ответ 6

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

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

Ответ 7

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

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