Я просто написал эту вспомогательную функцию. Поместите его в App_Code/JS.cshtml
:
@using System.Web.Script.Serialization
@helper Encode(object obj)
{
@(new HtmlString(new JavaScriptSerializer().Serialize(obj)));
}
Тогда в вашем примере вы можете сделать что-то вроде этого:
var title = @JS.Encode(Model.Title);
Обратите внимание, как я не помещаю кавычки вокруг него. Если заголовок уже содержит кавычки, он не будет взорваться. Кажется, тоже прекрасно справляются со словарями и анонимными объектами!
Краткий ответ: Нет.
Мы отказались и использовали Систему пользовательского поиска Google. Хотя сайт имеет более 10 000 возможных просмотров страниц, мы сохраняем подачу карты сайта до основных 4 000 страниц или около того, и это стоит 250 долларов в год, что составляет примерно 2 часа моего времени. Заказчик доволен и доволен результатами.
Я бы хотел, чтобы кто-нибудь предложил хорошее решение FOSS, но в коммерческой ситуации TCO должна иметь экономический смысл.
Вы рассматривали Сфинкса ? Что вы используете в качестве хранилища данных? У него есть движок MySQL, который отлично работает. Я думаю, что он соответствует большинству ваших требований, за исключением того, что я не совсем уверен, насколько хорошо его можно связать с Django-ORM.
Я серьезно подумываю об использовании Sphinx в одном из моих собственных приложений Django для повышения производительности в поле автоматического предложения, которое выполняет поиск по префиксу и инфиксу в корпусе из 3,5 миллионов записей. Но у меня еще нет времени на его реализацию, поэтому я не могу говорить об интеграции Django + Sphinx. Мой единственный опыт работы со Sphinx связан с MySQL Engine и прямым запросом MySQL.
Я (и мои коллеги) успешно использовали Haystack для достижения довольно хорошей функциональности поиска.
Легко начать с haystack и бэкенда whoosh; и перейти на бэкенд Apache-Solr, когда производительность whoosh становится неприемлемой.
Нам действительно пора написать об этом подробный пост со ссылками на проекты, где это работает.
Пока же я могу предложить вам взглянуть на этот поиск: http://www.webdevjobshq.com/search/?q=rails, реализованный с использованием Haystack с бэкендом Apache-Solr. Или вот это: http://www.govbuddy.com/search/?q=Roy
Я использую Djapian. Его было довольно просто установить, и он отлично работает. Есть фактический учебник, который охватывает основные случаи использования и показывает весь процесс интеграции.
Да, в нем есть некоторые неясности, но трекер проблем открыт, и авторы быстро исправляют ошибки и добавляют функции.
Я также разработал несколько приложений Django с поддержкой xapian. У самого большого из них есть база данных xapian с индексом 8G, в которой хранится 2,4 миллиона документов (включая сообщения на форумах, вики-статьи, записи о планетах и записи в блогах) - все еще растет.
В целом я вполне доволен xapian. Он работает очень хорошо и прост в использовании. Единственное, что мне не нравится, это то, что xapian не будет работать с mod_wsgi (кроме глобального режима) из-за тупика. Таким образом, вы вынуждены использовать fastcgi (или подключиться к xapian-tcpsrv, или написать свой собственный сервис).
Я рекомендую вам использовать привязки xapian напрямую. В настоящее время Xapian предлагает довольно много полезных помощников (TermGenerator, QueryParser и т. Д.), Которые упрощают как индексацию, так и запросы. Фактически, я не могу представить себе ничего, что оправдало бы дополнительную библиотеку. На мой взгляд, все они более сложные и не позволяют эффективно индексировать.
Единственное, что вам нужно, это некоторое понимание того, как работает xapian. (Что такое термины? Что такое ценности? Что такое корчевание и где его использовать? И т. Д.). Вы можете найти все эти темы на веб-сайте xapian, и как только вы поймете эти концепции, работать с xapian станет легко.
Кроме того, xapian API чрезвычайно стабилен. Я начал использовать его задолго до выпуска 1.0, и у меня никогда не было проблем с изменениями API или конфликтами версий. Единственное, что изменилось, это то, что все те помощники (парсер запросов, токенизатор и т. Д.), Которые я когда-то написал для моего проекта Django, теперь бесполезны, потому что аналогичные классы проникли в ядро xapian.
Итак, чтобы подвести итог, просто попробуйте прямое использование привязок xapian.
Детали, которые вы запрашивали.
Помимо этого, это стандартные биты конфигурации из учебника, а также любые дополнительные переопределения из (на которые я не могу ссылаться, спасибо Stack Overflow) по мере необходимости.
Как сопровождающий Haystack, я активно использую все вышеперечисленные предыдущие установки. Самая маленькая установка Haystack (Haystack 1.0 + Whoosh) составляет ~ 600 документов. Немного побольше (Haystack master + Solr 1.4) - ~ 4000 документов. Самое крупное развертывание, о котором я знаю (Haystack master + Solr 1.4), составляет ~ 3 миллиона документов.
Обычно я стараюсь избегать переполнения стека, поэтому не удивляйтесь, если вы ничего не увидите дальше от меня. Список рассылки - лучшее место для поддержки, но, учитывая ваши ответы, я уверен, что вы бы предпочли просто выбросить меня сюда.
Я могу поручиться за Django-Haystack с бэкэндом Xapian (в интересах полного раскрытия информации я являюсь автором бэкэнда xapian-haystack) в реальной производственной среде. В настоящее время мы используем Haystack / Xapian на нескольких сайтах, самый крупный из которых имеет более 20 000 зарегистрированных пользователей и базу данных Xapian с более чем 20 000 документов, содержащих более 143 000 уникальных терминов, общим размером ~ 141 МБ.
Что касается невозможности получить какую-либо комбинацию Haystack и бэкэнда Xapian, я признаю, что я не был так усерден, как должен был бы, с моей маркировкой, и поэтому есть некоторая путаница с версиями. Однако вы должны иметь возможность использовать текущий мастер обеих кодовых баз без каких-либо проблем. Если это не так, я буду более чем счастлив помочь с проблемами. Однако вам нужно будет немного подробнее рассказать о проблеме. Просто сказать «это не сработало» недостаточно информации.
Дэниел и я делаем все возможное, чтобы своевременно реагировать на любые проблемы, возникающие на Github. Кроме того, мы оба обычно доступны на IRC-канале #haystack в течение дня и в группе Google django-haystack.
Используемые версии:
Большинство сайтов, которые мы развернули с Haystack, работали под управлением Ubuntu 8.04 LTS с Xapian 1.0.5