Игорь Чакрыгин Игорь Чакрыгин

У любой задачи существует по крайней мере одно очевидное и невероятно простое для понимания неправильное решение

Sphinx - Полезные полезности (Часть 2)

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

Sphinx - Распределённый поиск

Как известно, одним из ключевых достоинств Sphinx является очень высокая скорость поиска по очень большим объёмам данных. Как утверждают разработчики, самый большой кластер содержит 3 миллиарда документов и выдерживает 50 миллионов запросов в сутки. Понятно, что чем больше нагрузка на Sphinx, тем мощнее ему нужен сервер, мощность которого невозможно бесконечно увеличивать. К счастью, это и не обязательно, поскольку Sphinx имеет встроенные инструменты для горизонтального масштабирования, позволяющие параллельно выполнять запросы на нескольких серверах, а затем объединять результаты.

В этой статье я на простом примере постараюсь показать, как можно настроить несколько экземпляров Sphinx, а затем объединить их для выполнения распределённого поиска.

Sphinx - Настраиваем поиск

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

Sphinx - Полезные полезности

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

Sphinx - Источники данных в формате xml

В предыдущих статьях я рассказал о том, что в качестве источника данных для Sphinx можно использовать базы данных, в частности MS SQL Server. Во многих случаях этого наиболее удобный способ построения индекса, поскольку Sphinx может получить все данные одним запросом. Даже на очень больших объёмах данных этот запрос можно разбить на несколько ranged-запросов и получать данные из базы небольшими порциями.

Но данные в базе могут иметь сложную структуру со множеством связей, и получить их одним запросом может быть сложно. К тому же может потребоваться получать данные из источника, который Sphinx просто не поддерживает. Наиболее универсальным источником данных для Sphinx являются данные в формате xml. Именно об этом я и хочу рассказать в этой статье.

Sphinx - Подключение к Sphinx из .NET

В этой статье я хочу немного отвлечься от рассказа про сам Sphinx и немного поговорить о том, как взаимодействовать с ним из программы, написанной на языке C#.

Как я уже упоминал ранее, наиболее простым и удобным способом взаимодействия со Sphinx является язык запросов SphinxQL, который сильно напоминает обычный SQL. Сами запросы можно выполнять, подключившись к Sphinx как к обычной базе данных MySQL, поскольку Sphinx умеет её эмулировать.

Тем не менее даже используя официальный коннектор MySQL для .NET, взятый с сайта mysql.com, можно столкнуться с некоторыми сложностями, о решении которых я бы и хотел поговорить в этой статье.

Sphinx - Multi-valued атрибуты и joined поля

В предыдущей статье я показал, как можно использовать Sphinx для индексации базы данных MS SQL Server, а также рассказал про дельта-индексы.

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

Sphinx - Индексация базы данных и дельта-индексы

В предыдущей статье я кратко рассказал про основные возможности Sphinx. Пришло время применить эти знания на практике.

В этой статье я покажу как можно использовать Sphinx для индексации базы данных MS SQL Server, а также расскажу про дельта-индексы. В конце статьи вы также сможете найти архив со скриптами и файлами конфигурации, чтобы, при желании, повторить всю последовательность действий.

Sphinx - Источники данных, индексы, поля и атрибуты

В предыдущей статье я максимально подробно постарался описать процесс установки Sphinx в Windows. При этом я не останавливался на вопросах, что же это такое и для чего оно нужно.

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

Sphinx - Установка и настройка

Не так давно я решил более подробно изучить замечательный механизм полнотекстового поиска, которыйносит название Sphinx. Вы наверняка слышали о нём. Его установка, настройка и использование действительно очень просты. Несмотря на это, при первой попытке разобраться во всех деталях могут возникнуть некоторые трудности.

В данной статье я хочу подробно описать процесс установки Sphinx в Windows. Данная статья рассчитана на людей, которые, также как и я, ещё мало знакомы со Sphinx (или совсем не знакомы). Опытные разработчики вряд ли найдут в ней что-то новое.

WCF - Подключение к локальному wcf-сервису по net.tcp

В данной статье я бы хотел рассказать о том, как можно на локальном компьютере в Visual Studio запустить wcf-сервис, который был бы доступен по протоколу net.tcp.

Итак, предположим, что у нас имеется приложение (в моём случае это web-сайт, хотя это и не обязательно), которое получает данные от десятка различных wcf-сервисов используя при этом NetTcpBinding. В один прекрасный момент у нас возникает желание выполнить отладку одного из этих сервисов. Используя IIS Express мы, конечно, можем запустить этот сервис локально, однако он будем доступен только по протоколу http. Это означает, что в файле конфигурации приложении нам придётся менять не только адрес сервиса, но и тип привязки, что в большинстве случаев не очень удобно (особенно если постоянно приходится переключаться с локального сервиса на нелокальный).

Попробуем запустить wcf-сервис на локальном компьютере таким образом, чтобы он был доступен по протоколу net.tcp.

Visual Studio - Верните всё как было!

Ура!

Чудо всё-таки свершилось. Не успела Visual Studio 2012 выйти в свет, как добрые люди сразу же сделали всё, чтобы в ней стало удобно работать, а именно вернули старую цветовую схему, привычные цветные иконки и убрали капс из главного меню.

ASP.NET - Пользовательские элементы управления, самостоятельно загружающие себя при помощи AJAX

Довольно часто на страницах сайта можно встретить блоки (например, баннеры, случайные опросы или что-то ещё), содержимое которых не зависит от содержимого остальной части страницы и, теоретически, может быть отображено не сразу, а загружено при помощи AJAX.

В данной статье я хочу рассказать о создании базового класса пользовательских элементов управления AjaxUserControl, экземпляры которого не отображают своё содержимое, а загружают его при помощи AJAX.

ASP.NET - Использование страничных методов в элементах управления

Одной из стандартных возможностей ASP.NET являются так называемые страничные методы (Page Methods). Суть её заключается в том, что разработчик может определить в коде страницы статические методы, помеченные атрибутом WebMethod (из пространства имён System.Web.Services), которые затем могут быть вызваны из клиентского скрипта.

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

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

ASP.NET - Подключение пользовательских элементов управления без директивы Register

В ASP.NET перед тем как использовать пользовательский элемент управления (User Control) на странице, его необходимо подключить при помощи директивы Register.

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

В этой статье я бы хотел рассказать о небольшом трюке, который позволяет использовать пользовательские элементы управления без директивы Register.

ASP.NET - Что делать, если сайт не компилируется в Visual Studio

Последнее время мне очень часто приходилось сталкиваться с весьма неприятной ситуацией. При открытии какого-либо сайта через Visual Studio и нажатии Ctrl+F5 я получал огромное количество ошибок компиляции. При этом этот же сайт, выложенный на web-сервер, прекрасно работал. Ситуация становилась ещё хуже, когда требовалось выполнить отладку.

Обычно эта проблема появлялась на достаточно старых сайтах, созданных в кустарных условиях с обильным применением языка программирования JScript и SSI (Server Side Includes), однако, как оказалось, она также появляется в достаточно широко используемой NET Forge CMS.

ASP.NET - Минимизация html-разметки на этапе компиляции

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

Я бы хотел рассказать о том, как можно выполнить такую оптимизацию на этапе компиляции сайта.

ASP.NET - Добавление search engine friendly адресов на сайт

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

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

© Игорь Чакрыгин. Все права защищены при помощи чёрной магии. Технологии Blogger.