Мое приложение использует Grails плагин с возможностью поиска, используя Compass внизу.
Начальные индексированные таблицы занимают около 36 МБ и строят индексы около 350 МБ. Это мало в книгах большинства людей.
Если мы удаляем индексы и запускаем приложение Grails, файлы индексов перестраиваются, как и ожидалось, но затем, примерно через день работы, мы находим эту ошибку. Мы вызываем 'reindex' для экземпляров TellMeEntity
, поскольку они сохраняются, чтобы убедиться, что индекс обновлен.
Исключение org.compass.core.engine.SearchEngineException: не удалось удалить псевдоним [TellMeEntity] и идентификаторы [[сохранены / несжатые, проиндексированные, omitNorms, omitTf]]; Вложенное исключение - java.io.FileNotFoundException: / var / www / web17 / log / mne / index / tellmeentity / сегменты_2 (нет такого файла или каталога) на org.compass.core.lucene.engine.transaction.readcommitted.ReadCommittedTransaction (doDelete : 348)
Очевидно, что после появления этой ошибки индекс не обновляется, и поиск по вновь введенным данным не работает.
Мы проверили такие простые вещи, как дисковое пространство и т. Д. Сегменты_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 новых записей в день, что не похоже на большую громкость, поэтому я не думаю, что это связано с громкостью.
Как можно решить эту проблему?