Есть mysql база, в ней с большой частотой добавляются новые каталоги и удаляются старые.
Что нужно сделать, чтобы из sphinx'а так же удалялись старые значения, т.к. "indexer --rotate index", добавляет новые значения и обновляет изменившиеся, но старые (этих данных уже в БД mysql нет) не удаляет.
У меня всего один индекс, main и дельта не настраивал. Сейчас как раз делаю команду indexer --rotate index и старые данные остаются, которых в mysql уже нет.
Может я делаю что то не так? Должен ли скрипт, который удаляет данные из mysql, удалять и из sphinx? Или достаточно удалить из mysql, а при index --rotate должно автоматом подчиститься?
vtec: достаточно удалить из мускула, при переиндексации он возьмет все данные из мускула, а старые данные просто удалит, то есть старых данных в сфинксе быть не может.
Судя по всему у вас нет удаления, а идет какая то пометка в мускуле в отдельном поле типо isdelete=1
и поэтому сфинкс индексирует эти не удаленные поля, в таком случае надо добавить в запрос индексации проверку доп поля
Как раз удаляется: Catalog::deleteAll('catalog_id = :catalog_id', [':catalog_id' => $catalogId]);
Поискал найденный результат через sphinx в mysql, нет там такой записи.
vtec: ну переиндексаци и не было значит
покажите поиск в мускуле как делаете с результатом
потом покажите что вывела переиндексация
и покажите как ищите в сфинксе с результатом
vtec: то что вы там привели какой то метод , о котором вы ничего не знаете
я могу даже сказать что вместо удаления он добавляет только записи ровно на том же основании что и вы
Похоже индекс не перестраивается. Вручную запустил searchd. Ошибка:
WARNING: index 'items': preload: mmap() failed: Cannot allocate memory (length=2779899527 is over 2GB, impossible on some 32-bit systems); NOT SERVING
FATAL: no valid indexes to serve
Пока не могу понять, что он хочет.