Мое приложение использует Grails поисковый плагин, используя Compass внизу.Grails поисковый плагин
Таблицы начинаются с индексирования около 36 МБ и строят индексы около 350 МБ. Это мало в книгах большинства народов.
Если мы удалим индексы и запустим приложение Grails, файлы индекса будут восстановлены, как и ожидалось, но после примерно одного дня работы мы найдем эту ошибку. Мы вызываем «reindex» в экземплярах TellMeEntity
, поскольку они сохраняются, чтобы убедиться, что индекс обновлен.
Исключение org.compass.core.engine.SearchEngineException: Не удалось удалить псевдоним [TellMeEntity] и идентификаторы [[сохранены/несжатый, индексированные, omitNorms, omitTf]]; inest exception is java.io.FileNotFoundException:/var/www/web17/log/mne/index/tellmeentity/segment_2 (Нет такого файла или каталога) на org.compass.core.lucene.engine.transaction.readcommitted.ReadCommittedTransaction (doDelete : 348)
Очевидно, что после того, как эта ошибка попадает, индекс не обновляется, и поиски не работают с вновь введенными данными.
Мы проверили простые вещи, такие как дисковое пространство и т. Д. «Segment_2» не существует, но я бы ожидал, что Compass создаст его сам по себе.
В grails-app/conf/Searchable.groovy
файле:
....
mirrorChanges = true
bulkIndexOnStartup = "fork"
....
В моем коде:
....
def formInstance = new TellMeEntity(name:'form',dataOwner:session.community,createBy:session.zoner,tellMeSite:form).save()
formInstance.reindex()
....
Мой нынешний опыт в том, что этот код работает хорошо около 24 часов, но затем начинает давать проблемы. Мы генерируем около 3000 новых записей в день, что не похоже на большой объем, поэтому я не думаю, что это связано с объемом.
Как устранить эту проблему?
где в вашем коде вы переиндексируете? Я подозреваю, что есть файл .lock где-то, что было создано и вызывает проблемы. Больше кода поможет. –
Код обновлен. – user304217
Добавлен сегмент кода. Я также рассматриваю не использование индексов локальных файлов по умолчанию, а хранение кеша в базе данных с помощью JDBCDirectory. – user304217