Улучшение строительного индекса сфинкса - PullRequest
0 голосов
/ 06 сентября 2010

Эй, ребята, у меня есть вопрос о Сфинксе. Я использую Sphinx для индексации полнотекстового поиска по моим сайтам, и он работает как сон. На данный момент создание индексов для всех моих баз данных занимает около 30 минут. Это нормально, так как я запускаю скрипт индексации только один раз в час.

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

Теперь мой вопрос: Сфинкс перестраивает все индексы при каждом запуске скрипта или он добавляет только самые новые элементы, которые были недавно добавлены в базу данных (с момента последнего запуска индекса)?

Мое чувство говорит, что оно полностью восстанавливает его.

В случае, если это правда, возможно ли также ТОЛЬКО элементы, которых в нем уже не было? Может ли это значительно сократить время индексации?

Ответы [ 2 ]

2 голосов
/ 06 сентября 2010

См. Обновления индекса Delta: http://sphinxsearch.com/docs/current.html#delta-updates

Идея состоит в том, чтобы поддерживать два индекса: main и delta . Вам нужно только построить индекс для вновь добавленного / обновленного содержимого в индекс delta и периодически выполнять обратное слияние с индексом main .

0 голосов
/ 24 августа 2013

разделение вашего индекса

main и delta является наиболее общепринятым, если вы можете легко идентифицировать новые / обновленные строки.

, если не split, может помочь вам переиндексировать множество «частей» одновременно.

с индексом 180M (случайным образом обновляемым), где у меня было в среднем 5K новых строк каждый час.

Мое решение было

22 частичных индекса (потому что 24 ядра всервер) 20 частичных индексов равно 2 "дельта" индексам

по сценарию Я вычисляю идентификатор начала и конца каждой части с этим правилом

последняя дельта = начало с первого идентификатора, созданного сегодня другой дельта = началоот первого идентификатора, созданного вчера, до первого идентификатора, созданного сегодня

для частичного индекса, он был основан на

  • START position-1 * ((первый идентификатор создан вчера) / 20)
  • END position * ((первый идентификатор создан вчера) / 20)

последняя дельта была перестроена за несколько секунд, 20 первый блок был построен за 10 минут

до, с монолитной версией полный индексбыл перестроен за 4 часа (но было только 90 м рядов и сфинкс 0,9,9)

...