Поисковое решение для Django, которое на самом деле работает? - PullRequest
30 голосов
/ 06 марта 2010

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

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

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

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

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

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

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

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

EDIT:

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

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

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

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

Спасибо.

Ответы [ 7 ]

11 голосов
/ 13 марта 2010

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

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

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

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

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

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

9 голосов
/ 09 апреля 2010

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

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

Мы с Дэниелом стараемся своевременно реагировать на любые проблемы, открытые на Github. Кроме того, мы оба обычно доступны на канале #haystack IRC в течение дня и в группе 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

7 голосов
/ 09 апреля 2010

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

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

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

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

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

7 голосов
/ 06 марта 2010

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

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

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

1 голос
/ 08 марта 2010

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

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

1 голос
/ 06 марта 2010

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

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

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

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

0 голосов
/ 06 марта 2010

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

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

...