4

Я читал информацию о поисковой системе Sphinx и драгоценном камне Thinking Sphinx. В TS docs он говорит ...Индекс Sphinx delta - все еще необходимо перестроить основной индекс?

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

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

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

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

Но, видимо, вам все еще нужно регулярно выключать поисковую систему и сделать полную индексацию ...

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

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

Поскольку восстановление индекса каждый час или все что-либо было бы полностью испорчено, не так ли?

+0

Этот «дельта-индекс сам по себе станет таким же большим, как и базовые индексы», бит абсолютно неверен. Дельта-индекс заменяется новыми, ранее неиндексированными данными каждый раз, когда выполняется текущее обновление/слияние. –

ответ

11

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

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

И для второй части - опять же, вы не перестраиваете индекс, эрго, останавливая деамон, не нужно. При использовании дельта-индексации на самом деле есть два индекса, которые используются для поиска - основной индекс (который должен быть повторно проиндексирован один раз) и дельта-индекс (который обновляется после каждой соответствующей операции в записи). Если я правильно ее понимаю, при переиндексации основного индекса (например.через задачу cron), дельта-индекс просто объединяется в основной индекс, поэтому он не займет столько места и останется на месте.

+2

При повторной индексации основного индекса выполняется полный индекс (т. Е. Дельта никак не сливается). Кроме того, ваш комментарий на месте. –

+0

Да, это физически не слито, это плохая формулировка. Спасибо за указание. –

+0

Кроме того, стоит отметить - удаления отслеживаются (насколько это возможно) в Thinking Sphinx без необходимости дельта-индексов. – pat