2013-03-15 3 views
6

Мы используем Grails 2.1.1 и плагин Searchable 0.6.4 в наших приложениях Grails и реализуем поиск по некоторым доменам, которые указаны ниже со всеми сопоставлениями.Grails hibernate/Searchable останавливает сервер, чтобы начать с предоставления исключения ниже

class User { 
     ..... 
     static hasMany = [userEducations : UserEducations , userWorkings : UserWorkings ] 
     ...... 
     static searchable = { 
     content: spellCheck 'include' 
     all termVector: "yes" 
     userEducations component: true 
     userWorkings component: true 
     } 
     ...... 
} 

class UserEducations { 
    ..... 
    Schools schools 
    ..... 
    static belongsTo = [user : User ] 
    ...... 
    static searchable = { 
     content: spellCheck 'include' 
     all termVector: "yes" 
     schools component: true 
    } 
     ...... 
} 

class UserWorkings { 
     ..... 
     Organizations organizations 
     ..... 
    static belongsTo = [user : User ] 
    .... 
    static searchable = { 
     content: spellCheck 'include' 
     all termVector: "yes" 
     organizations component: true 
    } 
    ...... 
} 

class Schools { 
     ...... 
     static searchable = true 
     ...... 
} 

class Organizations { 
     ...... 
     static searchable = true 
     ...... 
} 

Данные успешно сохраняются с правильным отображением и ограничениями.

Проблема начинается тогда, когда мы имеем ниже drowslike в таблице пользователей с отношения

a1 пользователя -> UserEducations b1 -> Школы d1

и

a2 Пользователь -> UserEducations b2 -> Школы d1

или

пользователя a1 -> UserWorkings c1 -> организации e1

и

a2 Пользователь -> UserWorkings c2 -> Организации e1

(Мы не уверены выше факта может быть проблема возникла из-за большого ни в. данные.)

Тогда, когда мы пытаемся запустить сервер, то мы получим ниже исключения и сервера не стало бы

Мы попытались путем удаления поискового индекса и перезапуска снова, то он также не запускается.

Сервер запускается только тогда, когда мы обрезаем таблицы, соответствующие выше 5 доменам.

18:30:54,133 [Compass Gps Index [pool-5-thread-5]] ERROR indexer.ScrollableHibernateIndexEntitiesIndexer - {hibernate}: Failed to index the database 
org.compass.core.engine.SearchEngineException: Processor [4]: Failed to add job [Job Create [alias [Organizations] uid [Organizations#456#]] Resource [{Organizations} [stored/uncompressed,indexed,omitNorms<alias:Organizations>],[stored/uncompressed,indexed,omitNorms,omitTf<$/Organizations/id:456>],[stored/uncompressed,indexed<active:true>],[stored/uncompressed,indexed<dateCreated:2013-02-28-14-03-05-0-PM>],[stored/uncompressed,indexed,tokenized<aaa:109122482450911>],[stored/uncompressed,indexed<lastUpdated:2013-02-28-14-03-05-0-PM>],[stored/uncompressed,indexed,tokenized<name:Asc>],[stored/uncompressed,indexed<version:0>],[stored/uncompressed,indexed,omitNorms,omitTf<$/uid:Bs#456#>]]] after [10000ms] and backlog size [100] 
     at org.compass.core.lucene.engine.transaction.support.AbstractConcurrentTransactionProcessor$Processor.addJob(AbstractConcurrentTransactionProcessor.java:496) 
     at org.compass.core.lucene.engine.transaction.support.AbstractConcurrentTransactionProcessor.create(AbstractConcurrentTransactionProcessor.java:158) 
     at org.compass.core.lucene.engine.LuceneSearchEngine.createOrUpdate(LuceneSearchEngine.java:290) 
     at org.compass.core.lucene.engine.LuceneSearchEngine.create(LuceneSearchEngine.java:268) 
     at org.compass.core.impl.DefaultCompassSession.create(DefaultCompassSession.java:413) 
     at org.compass.core.impl.DefaultCompassSession.create(DefaultCompassSession.java:397) 
     at org.compass.core.impl.ExistingCompassSession.create(ExistingCompassSession.java:305) 
     at org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer$RowBuffer.flush(ScrollableHibernateIndexEntitiesIndexer.java:212) 
     at org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer$RowBuffer.close(ScrollableHibernateIndexEntitiesIndexer.java:206) 
     at org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer.performIndex(ScrollableHibernateIndexEntitiesIndexer.java:151) 
     at org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1$1.doInCompassWithoutResult(ConcurrentParallelIndexExecutor.java:104) 
     at org.compass.core.CompassCallbackWithoutResult.doInCompass(CompassCallbackWithoutResult.java:29) 
     at org.compass.core.CompassTemplate.execute(CompassTemplate.java:133) 
     at org.compass.gps.impl.SingleCompassGps.executeForIndex(SingleCompassGps.java:147) 
     at org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1.call(ConcurrentParallelIndexExecutor.java:102) 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
     at java.lang.Thread.run(Thread.java:679) 

Наша задача аналогична ниже пост

http://grails.1312388.n4.nabble.com/hibernate-Searchable-failing-to-index-on-program-start-td4119566.html

Мы старались изо всех сил, чтобы разобраться в проблеме, но не повезло. Пожалуйста, помогите нам решить эту проблему.

+0

вы пытались удалить существующие индексные файлы? – uchamp

+0

Да, но не работал вообще –

+0

@ Shashank.gupta40, любая удача, я также сталкиваюсь с этой проблемой. Не могли бы вы мне помочь. –

ответ

0

Перейти к консоли и введите:

grails install-searchable-config 

Затем откройте MyProject/Grails-приложение/CONF/Searchable.groovy и поиск ниже и изменить значения, как я указывал.

mirrorChanges = false 
bulkIndexOnStartup = false 

в Bootstrap.groovy:

class BootStrap { 
    def searchableService 

    def init = { servletContext -> 
     // do any data loading you would normally do 

     // Manually start the mirroring process to ensure that it comes after the automated migrations. 
     println "Performing bulk index" 
     searchableService.reindex() 
     println "Starting mirror service" 
     searchableService.startMirroring() 
    } 
} 
+0

Но он не будет индексировать базу данных, что делать, если нам нужно индексировать БД? –

+0

см. Мой обновленный ответ – confile

+1

Я выполнил ваши шаги, но все же есть ошибка. 13 сен 2013 14: 36: 17: 225 ОШИБКА {hibernate}: не удалось индексировать базу данных org.compass.core.engine.SearchEngineException: Processor [2]: Не удалось добавить задание [Job Create [alias [Member] uid [Member # 586 #]] Ресурс [{Member} ..... после [10000ms] и размер отставания [100] Любая идея? –