Использование системы полнотекстового поиска Sphinx
Владельцы многих сайтов устанавливают на свой сайт опцию поиска. Это помогает пользователям найти нужную информацию на сайте в считанные секунды. В этой статье мы расскажем, как работает полнотекстовый поиск в Sphinx Search.
Что такое полнотекстовый поиск
Существует несколько типов поиска:
Рассмотрим подробнее последний тип. Первые программы полнотекстового поиска сканировали содержимое каждого документа в базе. Это занимало очень много времени и вычислительной мощности.
В основе же современных алгоритмов поиска лежит индекс . Все слова и буквосочетания из документов загружаются в индекс (этот процесс называется индексацией). И, когда пользователь вводит свой поисковый запрос, поиск происходит по этому индексу, а не содержимому документов. Поисковик принимает запрос от клиента и ищет совпадения в индексе, опираясь на связь запроса с документом.
Поисковик начинает проверку совпадений с первого символа, чтобы сузить область поиска. Затем он добавляет последующие символы и передаёт результаты, сортируя их по точности.
Самый лучший GEODIST() к западу от Рио-Гранде / Андрей Аксенов (Авито, Sphinx)
Такая система значительно повышает скорость поиска нужных документов. В то время, как индекс 10 000 документов может быть опрошен в пределах миллисекунд, последовательный просмотр каждого слова в 10 000 больших документов мог бы занять часы.
Что такое Sphinx
Sphinx (SQL Phrase Index) — это система полнотекстового поиска, которая разработана Андреем Аксёновым и впервые выпущена в 2001 году. Изначально Сфинкс была системой с открытым кодом, но начиная с версии Sphinx 3 стала проприетарной — создатели закрыли исходный код.
Sphinx написана на языке C++ и способна интегрироваться в популярные СУБД (например, PostgreSQL или MySQL). Также в ней есть API для популярных языков веб-программирования.
API или Application Programming Interface — это перечень способов, которыми одна программа может взаимодействовать с другой. Он включает в себя действие, которое можно выполнить, входные и выходные данные. Благодаря API код сайта получает массив идентификаторов тех записей, которые нашлись по поисковому запросу. Затем идентификаторы сопоставляются с теми, которые указаны в базе данных сайта.
В Сфинкс существуют официальные API. Они созданы для следующих языков:
Также сообщество разработало API для .NET и Elixir.
Какие преимущества есть у Sphinx
Sphinx как поисковая машина имеет следующие преимущества:
- Высокая скорость индексации . В Sphinx она достигает 10–15 мегабайт в секунду на каждое ядро процессора.
- Высокая скорость поиска . Когда вы вводите поисковый запрос, Sphinx ищет совпадения с запросом в индексе со скоростью обработки 150–250 запросов в секунду на каждое ядро процессора с 1 000 000 документов.
- Высокая масштабируемость . Поисковая машина может обрабатывать 50 000 000 запросов в день на кластер с 3 000 000 000 документов.
- Распределённый поиск . Sphinx позволяет задействовать несколько машин в сети для обработки запроса.
- Несколько полей полнотекстового поиска в документе . По умолчанию доступно 32 поля.
- Несколько дополнительных атрибутов для каждого документа , например, string (строка) или timestamp (дата и время в UNIX-формате).
- Использование стоп-слов на случай, если нужно убрать некоторые слова из поисковой выдачи.
- Однобайтовые кодировки и распространённая UTF-8 .
- Морфологический поиск . Sphinx имеет встроенные модули для английского, русского и чешского языка. Также можно настроить модули для французского, испанского, португальского, итальянского, румынского, немецкого, голландского, шведского, норвежского, датского, финского и венгерского.
- ODBC-совместимые базы данных . ODBC (Open Database Connectivity) — это протокол, который разработала компания Microsoft. Он позволяет подключить БД к внешнему источнику данных, например Microsoft Access к SQL Server. Базы данных, которые поддерживают этот функционал, называются ODBC-совместимыми.
Где применяется система полнотекстового поиска Sphinx
Поисковая машина Sphinx используется для создания поиска по сайту или определённой странице. Он встроен в CMS:
Decoding the Great Sphinx
- 1С-Битрикс,
- HostCMS,
- LiveStreet,
- Umi.CMS.
Для WordPress и Yii2 можно установить плагин. После этого поиск станет доступным.
На основе кода Sphinx созданы новые ветки ПО, которые называются форками. Так в 2017 году члены первоначальной команды разработки Sphinx разработали форк под названием Manticore.
Manticore — это бесплатная база данных с открытым кодом, которая создана специально для поиска. Это ответвление можно считать полноценным продолжением Sphinx, так как авторы сохранили первоначальные возможности и усовершенствовали их. Вот что добавили в Manticore:
- пакеты Docker и официальные репозитории YUM и APT,
- API для Go и JavaScript,
- интерактивные курсы, в которых описан функционал для пользователей,
- интеграцию в MySQL/MariaDB FEDERATED engine и ProxySQL,
- синхронную репликацию. Репликация — это процесс, когда изменения в одной копии объекта синхронизируются с остальными копиями. Когда эта синхронизация происходит за одну транзакцию, репликация называется синхронной.
- бесплатный анализ кода и прочее.
Тем не менее, Sphinx остаётся значимым ПО среди поисковых машин. Эта система поддерживается хостингом REG.RU, поэтому вы можете добавить её на своём сайте.
Надеемся, что статья оказалась для вас полезной и помогла понять, как работает полнотекстовый поиск в Sphinx.
Заказать хостинг
Оригинал материала и ещё больше полезностей в блоге REG.RU
Понравился материал? Поделись полезными статьями с друзьями!
Источник: dzen.ru
Базовая настройка sphinx api
Ну, я не знаю, какой файл я должен изменить.
Я нашел файл с именем configure в папке sphinx, и я попробовал это, а затем я изменил sphinx.conf.in, но все же я не могу использовать sphinx .
Было бы здорово, если бы вы помогли мне настроить основные настройки sphinx .
Я исследовал в вопросах, но нет такого базового вопроса, как это.
Спасибо заранее.
спросил(а) 2015-04-17T14:26:00+03:00 7 лет, 8 месяцев назад
добавить комментарий
пожаловаться
Я видел это начинающее замешательство несколько раз, поэтому подумал, что я дам немного более подробный быстрый старт. Итак, базовое введение, чтобы начать поиск Sphinx:
Обычно файлы проекта sphinx хранятся в трех каталогах: project/sphinx/etc , project/sphinx/logs и project/sphinx/data . Они могут быть изменены по мере необходимости, но я следую этому соглашению ниже.
Запуск сфинкса
После установки Sphinx в вашей системе у вас будет два исполняемых файла: indexer и searchd . indexer — это программа, которая проверяет файл конфигурации и индексирует данные, которые вы указали для быстрого доступа. searchd — фоновый процесс (или демон), который вы обычно хотите продолжать работать. Подумайте об этом как о поисковой системе Sphinx. Все запросы из sphinxapi направляются в searchd , который будет выполнять поиск по индексированным данным и возвращать идентификаторы записей в указанном вами порядке. Примеры запуска обоих этих исполняемых файлов (в Linux, хотя в окнах не должны быть слишком разными) приведены ниже:
indexer -c /path/to/project/sphinx/etc/sphinx.conf —all
Указывает все источники, указанные в файле конфигурации. Доступны дополнительные параметры для индексирования только указанных источников. Подробный список опций здесь.
searchd -c /path/to/project/sphinx/etc/sphinx.conf —rotate
Это инициализирует демона searchd и разворачивает его в фоновом режиме, где он будет продолжать работать, пока вы его не убьете. Параметр rotate позволяет вам поддерживать работу демона даже при обновлении индексов в будущем. Вы можете использовать переключатель —stop , чтобы остановить демона. Подробный список опций здесь.
Настройка Sphinx
Это приводит нас к файлу конфигурации. Конфигурационный файл состоит из набора конфигураций source и index вместе с секцией searchd , используемой для настройки самого сфинкса. Здесь можно настроить множество опций, но базовый sphinx.conf (обычно файл sphinx.conf.dist, найденный в папке установки sphinx) сначала немного подавляет. Я просто упоминаю несколько базовых параметров конфигурации, необходимых для начала работы. Я предполагаю, что вы используете MySQL , но это должно быть легко адаптировано к любому провайдеру данных.
searchd /* Define your file paths. */
log = /path/to/project/sphinx/logs/searchd.log
query_log = /path/to/project/sphinx/logs/query.log
pid_file = /path/to/project/sphinx/logs/searchd.pid
/* Listen on port 9312 (This is the default port) */
listen = localhost:9312
>
Это базовая конфигурация searchd, определяющая такие функции, как запись журналов, а также файл .pid для блокировки. Демон поиска прослушивает порт 9312 , к которому sphinxapi пересылает запросы по умолчанию.
source text_search /* Data provider details */
type = mysql
sql_host = localhost
sql_user = sql_user_name
sql_pass = sql_pass_word
sql_db = my_db_name
/* The query used to index the data. A very basic example. */
sql_query = SELECT id, text_field, status FROM text_search
sql_attr_uint = status
>
Это источник данных. Здесь indexer будет запускать предоставленный запрос и индексировать результаты. id берется за ключ, так как он является целым полем и явно не упоминает, что это (в отличие от поля status ). Так как text_field — текстовое поле (duh!), Индексы sphinx, которые для полнотекстового поиска неявно. Мы также указываем, что status — целое поле, которое мы можем использовать позже для фильтрации результатов при выполнении поиска.
index text_search_index /* The data source that we have defined above. */
source = text_search
/* The path to store the index data/cache */
path = /path/to/project/data/text_search
/* Use stemming while searching */
morphology = stem_en
>
Источник: progi.pro
Андрей Карпов считает, что код проекта Manticore качественнее, чем код проекта Sphinx
Мои читатели попросили сравнить проекты Manticore и Sphinx с точки зрения качества кода. Я могу сделать это только одним освоенным мною способом — проверить проекты с помощью статического анализатора PVS-Studio и посчитать плотность ошибок в коде. Итак, я проверил C и C++ код в этих проектах и, на мой взгляд, качество кода Manticore выше, чем качество кода Sphinx. Естественно, это очень узкий взгляд, и я не претендую на достоверность своего исследования. Однако меня попросили, и я сделал сравнение так, как умею.
Sphinx и Manticore
Вначале давайте познакомимся с проектами Sphinx и Manticore.
Sphinx — система полнотекстового поиска, разработанная Андреем Аксёновым и распространяемая по лицензии GNU GPL. Отличительной особенностью является высокая скорость индексации и поиска, а также интеграция с существующими СУБД и API для распространённых языков веб-программирования.
Исходный код я взял отсюда. Размер проекта, если брать код на языке C и С++ и не включать сторонние библиотеки — 156 KLOC. Комментарии составляют 10.2%. Это значит, что «чистого кода» — 144 KLOC.
Manticore — это форк Sphinx. Начиная в качестве ключевых членов первоначальной команды Sphinx, команда Manticore установила для себя следующую цель – поставлять быстрое, стабильное и мощное свободное обеспечение по полнотекстовому поиску.
Исходный код я взял отсюда. Размер проекта, если брать код на языке C и С++ и не включать сторонние библиотеки — 170 KLOC. Комментарии составляют 10.1%. Это значит, что «чистого кода» — 152 KLOC.
Количество строк кода в проекте Manticore чуть больше, и я учту это при оценке плотности найденных ошибок.
Сравнительный анализ
Код этих проектов очень похож, и очень часто одна и та же ошибка присутствует как в одном, так и другом проекте. Сразу скажу, что в этот раз я проводил анализ поверхностно и изучал только общие предупреждения уровня High, выданные анализатором PVS-Studio.
Почему я поленился сравнить проекты более тщательно? Как я уже сказал, проекты весьма похожи, и уже при просмотре предупреждений уровня High мне стало скучно. В целом картина и так понятна. Анализатор выдал очень похожие списки предупреждений, но только в проекте Sphinx их чуть больше. Думаю, с предупреждениями других уровней ситуация будет точно такая же.
В статье я рассмотрю только некоторые фрагменты кода с ошибками, которые по какой-то причине показались мне интересными. Более подробный анализ проектов могут выполнить их разработчики. Я готов предоставить им временные лицензионные ключи.
Предлагаю читателям также скачать демонстрационную версию PVS-Studio и проверить код своих проектов. Уверен, вы найдёте в них много интересного.
Общие ошибки
Начну я с ошибок, которые нашлись как в проекте Sphinx, так и в Manticore.
CWE-476: NULL Pointer Dereference
Expr_StrIn_c ( const CSphAttrLocator assert ( tLoc.m_iBitOffset>=0 tLoc.m_iBitCount>0 ); assert ( !pConsts || !pUservar ); m_fnStrCmp = GetCollationFn ( eCollation ); const char * sExpr = pConsts->m_sExpr.cstr(); //
Я привёл достаточно большой фрагмент кода, но не пугайтесь, здесь всё просто. Обратите внимание на формальный аргумент pConsts.
Этот указатель используется в конструкторе для инициализации переменной sExpr. При этом в конструкторе нигде нет проверки на тот случай, если в качестве аргумента будет передано значение NULL, т.е. нет никакой защиты от нулевого указателя. Переменная pConsts просто смело разыменовывается.
Примечание. Есть проверка в виде assert, но она не поможет в Release-версии, поэтому такая проверка не может считаться достаточной.
Теперь взглянем на код функции CreateInNode, где создается экземпляр класса Expr_StrIn_c:
ISphExpr * ExprParser_t::CreateInNode ( int iNode ) < . case TOK_ATTR_STRING: return new Expr_StrIn_c ( tLeft.m_tLocator, tLeft.m_iLocator, NULL, //
Третьим фактическим аргументом является NULL. Соответственно, если этот фрагмент кода будет выполнен, то произойдёт разыменование нулевого указателя.
Анализатор сигнализирует об этой ошибке, выдавая предупреждение: V522 Dereferencing of the null pointer ‘pConsts’ might take place. The null pointer is passed into ‘Expr_StrIn_c’ function. Inspect the third argument. Check lines: 5407, 5946. sphinxexpr.cpp 5407
Эта ошибка интересна тем, что PVS-Studio выполняет data-flow анализ, рассматривая тела двух разных функций. Однако он способен выполнить и куда более сложный вложенный анализ. Рассмотрим такой случай.
Сначала рассмотрим функцию SendBytes, в которой, собственно, и будет происходить разыменование нулевого указателя.
void ISphOutputBuffer::SendBytes ( const void * pBuf, int iLen )
Обратите внимание на указатель pBuf. Он нигде не проверяется и сразу передаётся как фактический аргумент в функцию memcpy. Соответственно, если указатель pBuf будет нулевым, то при вызове функции memcpy произойдёт чтение по нулевому указателю.
Почему PVS-Studio решил, что здесь будет ошибка? Чтобы ответить на этот вопрос, поднимемся по цепочке вызовов выше и рассмотрим функцию SendMysqlOkPacket.
void SendMysqlOkPacket ( ISphOutputBuffer DWORD iInsert_id = 0; char sVarLen[20] = ; void * pBuf = sVarLen; pBuf = MysqlPack ( pBuf, iAffectedRows ); pBuf = MysqlPack ( pBuf, iInsert_id ); int iLen = (char *) pBuf — sVarLen; int iMsgLen = 0; if ( sMessage ) iMsgLen = strlen(sMessage) + 1; tOut.SendLSBDword ( (uPacketID<<24) + iLen + iMsgLen + 5); tOut.SendByte ( 0 ); tOut.SendBytes ( sVarLen, iLen ); if ( iWarns<0 ) iWarns = 0; if ( iWarns>65535 ) iWarns = 65535; DWORD uWarnStatus = iWarns
Прошу прощения, что мне пришлось привести тело функции целиком. Я хотел показать, что в функции нет какой-то защиты от того, что аргумент sMessage окажется равен NULL. Указатель sMessage просто передаётся в функцию SendBytes.
Ещё хочу обратить внимание, что значение формального аргумента sMessage по умолчанию равно NULL:
const char * sMessage=NULL,
Это опасно уже само по себе. Однако то, что аргумент по умолчанию равен NULL, ещё ничего не означает. Возможно, в функцию всегда передают правильные аргументы. Поэтому пойдём дальше:
inline void Ok( int iAffectedRows=0, int iWarns=0, const char * sMessage=NULL, bool bMoreResults=false )
В функции Ok, аргумент sMessage просто передаётся в функцию SendMysqlOkPacket. Продолжим.
void HandleMysqlMultiStmt (. )
Здесь мы заканчиваем наше путешествие. В функцию передаются только 4 фактических аргумента. Остальные аргументы принимают значение по умолчанию. Это означает, что пятый параметр sMessage — будет равен NULL, и произойдёт разыменование нулевого указателя.
Предупреждение анализатора PVS-Studio, которое указывает на эту ошибку: V522 Dereferencing of the null pointer ‘pBuf’ might take place. The null pointer is passed into ‘Ok’ function. Inspect the third argument. Check lines: 2567, 12267, 12424, 14979. searchd.cpp 2567
CWE-570: Expression is Always False
Для начала рассмотрим перечисление ESphBinRead.
enum ESphBinRead < BIN_READ_OK, ///< bin read ok BIN_READ_EOF, ///< bin end BIN_READ_ERROR, ///< bin read error BIN_PRECACHE_OK, ///< precache ok BIN_PRECACHE_ERROR ///< precache failed >;
Как видите, в нём нет именованных констант с отрицательными значениями.
На всякий случай заглянем в функцию ReadBytes и убедимся, что она честно возвращает значения без всяких хитростей.
ESphBinRead CSphBin::ReadBytes ( void * pDest, int iBytes )
Как видите, все возвращаемые функцией значения больше или равны 0. Теперь настала очередь кода с ошибкой:
static void DictReadEntry (. ) < . if ( pBin->ReadBytes ( pKeyword, iKeywordLen )IsError() ); return; > . >
Предупреждение PVS-Studio: V547 Expression is always false. sphinx.cpp 22416
Подобная проверка не имеет смысла. Условие всегда ложное, и в результате некорректные ситуации при чтении данных не обрабатываются. Скорее всего, здесь должно было быть написано:
if ( pBin->ReadBytes ( pKeyword, iKeywordLen ) != BIN_READ_OK)
Этот код демонстрирует, что автору кода только кажется, что программа будет обрабатывать некорректные ситуации. На самом деле, я очень часто встречаю дефекты в коде, который отвечает за обработку некорректных/нестандартных ситуаций. Поэтому программы нередко падают, когда что-то идёт не так. В них просто некорректно написаны обработчики ошибок.
Никакой загадки, почему так происходит, конечно нет. Тестировать такие участки программы сложно и неинтересно. Этот один из тех случаев, когда статический анализатор может оказаться хорошим помощником, так как проверяет код вне зависимости от того, как часто он получает управление.
CWE-14: Compiler Removal of Code to Clear Buffers
static bool GetFileStats (. ) < . struct_stat tStat; memset ( if ( stat ( szFilename, 0 ) < if ( pError ) *pError = strerror ( errno ); memset ( // . >
Предупреждение PVS-Studio: V597 The compiler could delete the ‘memset’ function call, which is used to flush ‘tStat’ object. The memset_s() function should be used to erase the private data. sphinx.cpp 19987
Компилятор вправе удалить вызов функции memset, которая, в случае возникновения ошибки в программе, должна очистить приватные данные в tStat.
Почему компилятор так поступает, я писал много раз, поэтому не буду повторяться. Для тех, кто ещё не сталкивался с такими ситуациями, предлагаю прочитать описание диагностики V597 или посмотреть описание CWE-14.
CWE-762: Mismatched Memory Management Routines
Для начала нам понадобится посмотреть на реализацию двух макросов:
#define SafeDelete(_x) < if (_x) < delete (_x); (_x) = nullptr; >> #define SafeDeleteArray(_x) < if (_x) < delete [] (_x); (_x) = nullptr; >>
Теперь, думаю, вам не составит труда самим обнаружить ошибку в этом коде:
int CSphIndex_VLN::DebugCheck ( FILE * fp ) < . CSphRowitem * pInlineStorage = NULL; if ( pQword->m_iInlineAttrs ) pInlineStorage = new CSphRowitem [ pQword->m_iInlineAttrs ]; . // cleanup SafeDelete ( pInlineStorage ); . >
Предупреждение PVS-Studio: V611 The memory was allocated using ‘new T[]’ operator but was released using the ‘delete’ operator. Consider inspecting this code. It’s probably better to use ‘delete [] pInlineStorage;’. sphinx.cpp 19178
Как видите, память выделяется для массива, а освобождается, как если бы создавался только один элемент. Вместо макроса SafeDelete здесь следовало использовать макрос SafeDeleteArray.
Уникальные ошибки
Выше я рассмотрел несколько ошибок, которые обнаруживают себя как в коде Sphinx, так и Manticore. При этом, конечно, есть ошибки, свойственные только одному проекту. Рассмотрим для примера один такой случай.
В обоих проектах есть функция RotateIndexMT. Но реализована она по-разному. В реализации проекта Sphinx эта функция содержит дефект CWE-690 (Unchecked Return Value to NULL Pointer Dereference).
Вначале посмотрим на объявление функции CheckServedEntry:
static bool CheckServedEntry(const ServedIndex_c * pEntry, //
Первый аргумент — это указатель на константный объект. Следовательно, функция не может изменить этот объект и сам указатель.
Теперь функция, содержащая ошибку:
static bool RotateIndexMT ( . ) < . ServedIndex_c * pServed = g_pLocalIndexes->GetWlockedEntry ( sIndex ); pServed->m_sNewPath = «»; // Unlock(); return false; > . >
Предупреждение PVS-Studio: V595 The ‘pServed’ pointer was utilized before it was verified against nullptr. Check lines: 17334, 17337. searchd.cpp 17334
Сначала указатель pServed разыменовывается. Далее вызывается функция CheckServedEntry, которая, как мы уже выяснили, не может изменить указатель pServed, передаваемый в качестве первого фактического аргумента.
Далее указатель pServed проверяется на равенство NULL. Ага! Значит указатель мог быть нулевым. Следовательно, выше перед первым разыменованием указателя нужно добавить проверку.
Другой вариант: проверка if ( pServed ) лишняя, если указатель никогда не равен NULL. В любом случае код надо исправить.
Подведём итоги
Проект Sphinx меньше по размеру проекта Manticore. При этом в проекте Sphinx я заметил больше ошибок и «кода с запахом», чем в проекте Manticore.
Учитывая размер проектов и количество замеченных дефектов, я получил следующий результат. Возьмём плотность ошибок в Manticore за 1. Тогда в проекте Sphinx плотность ошибок по моим прикидкам составляет 1,5.
Мои выводы. Плотность ошибок в проекте Sphinx в полтора раза выше, по сравнению с проектом Manticore. Следовательно, качество кода Manticore лучше, чем у проекта Sphinx. Форк получился качественнее оригинала.
Вновь повторю, что это моё субъективное мнение, основанное на очень малом количестве информации. Плотность ошибок в коде некоторых компонент ещё не говорит о качестве и надёжности проекта в целом.
Скачайте и попробуйте анализатор PVS-Studio. Это просто. В конце концов, даже если вы пишете идеальный код, то всегда можно поискать ошибки в коде своих коллег :).
Спасибо за внимание. Подписывайтесь на Twitter или RSS, чтоб быть в курсе наших новых публикаций.
Источник: pvs-studio.com
Sphinx что это за программа
Апология жизни
Поиск линии жизни
Ключики к «Дому в котором. » от самой Мариам.
Технические вопросы и ответы Мариам на вопросы читателей
Кузнечик — Сфинкс
Спортсмен — Черный
Рекс — Стервятник
Макс — Тень
Зануда — Лэри
Плакса — Конь
Пышка — Соломон
Смерть — Рыжий
Фокусник — Валет
Родинка — Леопард
Остальные клички остались без изменений. Хотя конкретно здесь этот вопрос не ставился, но мне его задавали настолько часто, что на всякий случай, напомню: Лорд и Македонский в интермедиях не фигурируют и детских кличек не имеют.
Вопросы, которые я бы назвала чисто техническими. На большую часть из них уже ответили сами читатели. Тем не менее:
—Трехпалый мужчина в черном – это Ральф. Ребенок, которого ему привозит Крыса – бывшая Крестная.
—Официантка, естественно, Рыжая. Ее сынишка, естественно, Толстый. Ждут они, само собой, Лорда.
—Человек с вороной – Горбач.
Крысиная фея – Крыса. Детишки в грузовике – Неразумные.
У Стервятника две ноги. Череп был убит в выпускную ночь старшеклассников. Волк велел Македонскому убрать из Дома Слепого. В главе «Исповедь Красного Дракона» Македонский говорит: «Я не сказал ему (Слепому) кого мне было велено посадить на цепь за порогом дома. Он мог решить, что обязан мне, а я этого не хотел».
Маленький Слепой в эпилоге взят Сфинксом из альтернативной реальности. Из своего прошлого он бы никак не смог его вытащить, потому что оно уже состоялось. Возможность изменить что-то в одной из реальностей (или даже кого-то оттуда выкрасть) он получил благодаря перу – подарку Табаки.
«Признаюсь, мне нравятся вопросы, которые возникают не от невнимательности, а скорее из-за того, что сама тема в книге недостаточно раскрыта.
Почему Рыжая ждет Лорда, хотя любит Слепого?
Короткий ответ: Рыжая любит Лорда, а не Слепого.
А длинный ответ выглядит так:
Эпилог разделен на четыре части. Наружность. Давняя, другая наружность (или другой ее круг). Сказки другой стороны. «Сказки» — мир изнанки Дома, куда ушли Спящие, т.е. Прыгуны и Ходоки. Ходоков в Доме всего пятеро. Слепой, Сфинкс, Рыжий, Крыса и Лорд.
Возможно их даже шестеро, если Македонский тоже Ходок, в чем я лично не уверена. Ходоки уходят в другие миры полностью, не оставляя в реальном мире тело. В другом мире их еще называют Проводниками, потому что они могут ходить сквозь миры. У мира изнанки Дома (очень условное определение) есть своя изнанка, чуть более сказочная, чем наш мир, а у нее в свою очередь есть мир Леса – совсем сказочный. И проводник может с собой кого-нибудь туда увести.
Влюбленность Рыжей в Слепого имеет прямое отношение к тому, что он Ходок, а Рыжая с детства мечтает о прекрасном принце, который заберет ее с собой в сказку. И если перечитать «Сказку Рыжей» становится понятно, что она своего принца нашла.
Только им оказался не Слепой, а Лорд. «Сказка Рыжей» по времени совпадает с первым «прыжком» Лорда на изнанку Дома, после которого его увозят в наружность. То есть, с его историей, рассказанной в последнюю Ночь Сказок. Их встреча в другом мире происходит еще до того, как Лорд во второй книге знакомится с Рыжей и влюбляется в нее. Поэтому в Клоповнике Лорд ее не узнает.
Детская влюбленность Рыжей в Слепого скорее самовнушение, чем подлинное чувство. Она была слишком мала во времена Чайки Джонатана и практически не общалась со Слепым в течении последующих лет. Но это давнее и упорное самовнушение. О нем знают все близкие Рыжей люди. И естественно, она сама себе стыдится признаться в том, что изменила этому чувству.
Кроме того, как всякий старожил Дома, Рыжая сноб, для нее прибывшие в Дом относительно недавно – люди второго сорта. А Лорд как раз из таких. К тому же очень красив, для Рыжей это скорее минус, чем плюс. Их не связывают общие воспоминания детства, которые старожилы ценят так высоко. Лорд «без году неделя» (по выражению Табаки) находящийся в Доме – стал Ходоком почти сразу.
С первого перемещения. И даже не заметил этого. Рыжая смертельно ему завидует. Отсюда их бесконечные ссоры и разборки. Он тот, кто может осуществить ее мечту и тот, кто, в отличие от Слепого, сделает это с радостью. Достаточно попросить. Или хотя бы намекнуть. Поэтому она ни просить, ни намекать не станет.
И только в самый последний момент не выдержит. Ее «сказка» это и признание в любви и крик о помощи, который она смешно заключает уверением, что «никогда ни о чем просить не станет». Хотя только что попросила. И Лорд тут же откликается.
Отдает колесико от часов Стервятнику, и конечно он не только отыщет Рыжую на изнанке Дома, но и переведет их с Толстым из этого мира в тот целиком, как она того хотела. В главе «Голоса из Наружности» Рыжий сообщит Курильщику, что кое-кто из Спящих «испарился». Т.е. кого-то из них увел проводник».
— У детей Дома интеллект нормальный. Чуть выше среднего, если не ориентироваться на колясников и на самых начитанных ходячих. В третьей Стервятнику не с кем поговорить ни о музыке, ни о живописи. Вторая тоже не оставляет впечатления интеллектуалов. А цитирование латинских изречений вовсе не означает, что Фазаны знают латынь.
Просто в закрытых сообществах существуют свои понятия о нужном и не нужном, и самые неожиданные способы разнообразить быт. Ум любого подростка требует пищи, уму подростка с ограниченными физическими возможностями этой пищи требуется больше, чем его здоровому сверстнику. В месте, где развлечения ограничены настольными играми, картами, шахматами и библиотекой, неудивительно наличие определенного количества начитанных людей. К тому же, в 4-ой имелся дополнительный фактор в лице Волка — страстного читателя, заражающего своей увлеченностью окружающих. И даже навязывающий ее остальным.
Опыт и время проживания на Изнанке Дома не играют здесь никакой роли.
Слепой прощается с уходящими на другой круг Табаки и Стервятником, которых никогда больше не встретит.
Круги – другие жизни. Они не возникают последовательно, а существуют параллельно. Только Табаки способен перемещаться из круга в круг, сохраняя память о других жизнях. На другом круге не может быть того же Слепого и того же Сфинкса, которые были на этом.
В том Доме, где Вонючка приветствует Кузнечика, должен быть другой маленький Слепой, который не станет приветствовать Кузнечика, потому то понятия о нем не имеет. Не факт, кстати, что Кузнечика там назовут Кузнечиком, а не как-то иначе. Так что это условный Кузнечик.
Ни о каком осознанном решении Сфинкса речи быть не может. Осознанным был его уход в наружность. Если бы он хотел вернуться на другой круг, попросил бы у Табаки шестеренку, как Стервятник.
Память сохраняет только Табаки. Стервятник через какое-то время перестанет помнить о прошлой жизни. Хотя у него останутся какие-то навыки, привычки и необъяснимые фобии, не свойственные малолетнему Рексу. Он будет другим. Более взрослым. Более осторожным. И всегда будет бояться потерять брата.
Похоже на переселение душ. Душа взрослого переселилась в ребенка и настоящего ребенка на том круге жизни уже не будет.
Шестеренка – переселение на другой круг. Перо – возможность туда попасть и что-то изменить.
Лорд хотел попасть на другой круг раньше, чем попал в Дом на этом круге. Хотел быть старожилом. Прожить в Доме дольше, чем прожил. Хотел любить Рыжую с детства, и знать ее с детства, как Сфинкс, Слепой и Рыжий, а не знакомиться с ней в 18 лет. Хотел, чтобы Рыжая воспринимала его, как своего. Это комплекс. Он сомневается в ее чувствах. Ему хочется большей близости с ней.
Такой, какая есть у бывших «Чумных-Дохляков». Он к ним ко всем ревнует. Лорд рассчитывает, что на другом круге окажется в Доме раньше, чем на этом, потому что на этом, стал Ходоком.
Как сообщил ему Табаки, не факт, что очутившись в Доме и забыв предыдущую жизнь, он влюбится в Рыжую, но Лорда это не останавливает.
Стервятник проживет часть своего детства заново. Погибнет ли его брат, я не знаю. Возможно, нет. Это ведь будет другая жизнь.
Перо, и встреча Вонючки с условным Кузнечиком, никак не связаны. Слепой конечно будет в том, другом Доме, если только это не тот круг, с которого его выдернул Сфинкс.
-Когда Слепой говорит, что прощается со всеми кто возвращается на еще один круг обозначает ли это, что самого его там не будет? То есть ушел ли он в Лес совсем целиком, или все таки в той альтернативной реальности где Вонючка наблюдает за прибытием Кузнечика Слепой будет?
-То, что в конце книги Кузнечик приходит в Дом, это осознанное решение Сфинкса вернуться еще на один круг?
-Только Табаки помнит предыдущие круги или все возвращающиеся их помнят?
____________________________________
Слепой прощается с уходящими на другой круг Табаки и Стервятником, которых никогда больше не встретит.
Круги – другие жизни. Они не возникают последовательно, а существуют параллельно. Только Табаки способен перемещаться из круга в круг, сохраняя память о других жизнях. На другом круге не может быть того же Слепого и того же Сфинкса, которые были на этом.
В том Доме, где Вонючка приветствует Кузнечика, должен быть другой маленький Слепой, который не станет приветствовать Кузнечика, потому то понятия о нем не имеет. Не факт, кстати, что Кузнечика там назовут Кузнечиком, а не как-то иначе. Так что это условный Кузнечик.
Ни о каком осознанном решении Сфинкса речи быть не может. Осознанным был его уход в наружность. Если бы он хотел вернуться на другой круг, попросил бы у Табаки шестеренку, как Стервятник.
Память сохраняет только Табаки. Стервятник через какое-то время перестанет помнить о прошлой жизни. Хотя у него останутся какие-то навыки, привычки и необъяснимые фобии, не свойственные малолетнему Рексу. Он будет другим. Более взрослым. Более осторожным.
И всегда будет бояться потерять брата. Похоже на переселение душ. Душа взрослого переселилась в ребенка и настоящего ребенка на том круге жизни уже не будет.
Крыса и Слепой. Оба ходоки. Оба уходят в один и тот же мир, несомненно их отношения могут развиваться и дальше. Хотя они одиночки и достаточно непредсказуемы, так что трудно делать какие-то прогнозы. О степени подлинности их любви мне тоже трудно судить.
Пока они выбрали друг друга, а что будет дальше, неизвестно.
Вопрос такой: Рыжий говорит, что знает кого любит из трех дочерей, ну по логике,ту , которая не рыжая, но от кого эта дочь.
___________________________
Рыжий больше любит ту из дочерей, которая, как ему кажется ( хотя он согласен с тем, что это скорее самовнушение), чем-то похожа на Рыжую. Она несомненно рыжая, но может посветлее папы и веснушчатая. А мать у нее та же, что и у остальных детей. Он говорил Курильщику, что все его дети от одной жены.
Какую роль в происходящем играл дневник курильщика? записи стервятника исчезли, значит, те, кто пошел на следующий круг, исчезают из жизни тех, кто остался? тогда почему какой-то парень (белобрюх, кажется) попросил курильщика написать о нем в дневнике? сказал, что он только на первом круге и ему надо фиксироваться везде, где только можно? зачем это делать, если он исчезнет?
________________________________________ ______
Дневник Курильщика играет мистическую роль только в воображении жителей Дома, склонных оставлять следы повсюду, где это возможно. На стенах Дома, на асфальте, на деревьях… Им кажется, чем больше они оставляют таких следов (фиксируются), тем больше у них шансов возникнуть в Доме на другом круге. Но это просто фолклор. Ведь даже Вонючка-Табаки не уверен, что Сфинкс опять появиться в Доме, отсюда его радость, когда это происходит.
-А откуда вообще появилась идея к написанию етой книги,что вдохновило или подтолкнуло на ее создание. С нетерпением жду ответа 🙂
_________________________________
Вот насчет идеи мне сложно ответить. Не было такого, чтобы в один прекрасный день вдруг возникла идея. Или я уже не помню. Первый отрывок, который был написан по Дому, тот, где Слепой входит в Лес. Он тогда был отдельно, сам по себе.
Просто от него пахло какой-то длинной историей. Из многих таких кусочков постепенно составилась общая картина.
Дети, которых бросили родители рано взрослеют. И восемнадцатилетние, несколько лет прожившие в другом мире, тоже. Сфинкс один из немногих Прыгунов, чей возраст легко можно вычислить. 18+6. Итого 25. Немного моложе Вас. Более наглядно происходит взросление Лорда.
Вначале книги ему примерно семнадцать лет. Первый прыжок длится четыре месяца и я не знаю, сколько раз он еще прыгал, но, к третьей книге, он старше Сфинкса.
Шестеренка – переселение на другой круг. Перо – возможность туда попасть и что-то изменить.
Лорд хотел попасть на другой круг раньше, чем попал в Дом на этом круге. Хотел быть старожилом. Прожить в Доме дольше, чем прожил. Хотел любить Рыжую с детства, и знать ее с детства, как Сфинкс, Слепой и Рыжий, а не знакомиться с ней в 18 лет. Хотел, чтобы Рыжая воспринимала его, как своего.
Это комплекс. Он сомневается в ее чувствах. Ему хочется большей близости с ней. Такой, какая есть у бывших «Чумных-Дохляков». Он к ним ко всем ревнует.
Лорд рассчитывает, что на другом круге окажется в Доме раньше, чем на этом, потому что на этом, стал Ходоком.
Как сообщил ему Табаки, не факт, что очутившись в Доме и забыв предыдущую жизнь, он влюбится в Рыжую, но Лорда это не останавливает.
Стервятник проживет часть своего детства заново. Погибнет ли его брат, я не знаю. Возможно, нет. Это ведь будет другая жизнь.
Перо, и встреча Вонючки с условным Кузнечиком, никак не связаны. Слепой конечно будет в том, другом Доме, если только это не тот круг, с которого его выдернул Сфинкс.
Источник: licka-nicka.livejournal.com