Grails JDBC存储中的共享Compass/Lucene索引
使用Grails中的可搜索插件(在引擎盖下使用Compass/Lucene),我们试图在两个不同的web应用程序之间共享搜索索引。一个应用程序仅以只读方式访问数据。另一个应用程序允许修改数据,并负责在任何更改时更新索引,或根据需要执行完整的重新索引 为了存储索引,我们使用JDBC存储(两个应用程序都指向同一个DB) 不幸的是,当我们在一个应用程序中重建整个索引时,另一个应用程序似乎缓存了无效数据,如果执行搜索,将引发异常:Grails JDBC存储中的共享Compass/Lucene索引,grails,jdbc,lucene,searchable,compass-lucene,Grails,Jdbc,Lucene,Searchable,Compass Lucene,使用Grails中的可搜索插件(在引擎盖下使用Compass/Lucene),我们试图在两个不同的web应用程序之间共享搜索索引。一个应用程序仅以只读方式访问数据。另一个应用程序允许修改数据,并负责在任何更改时更新索引,或根据需要执行完整的重新索引 为了存储索引,我们使用JDBC存储(两个应用程序都指向同一个DB) 不幸的是,当我们在一个应用程序中重建整个索引时,另一个应用程序似乎缓存了无效数据,如果执行搜索,将引发异常: | Error 2012-05-30 09:22:07,560 [htt
| Error 2012-05-30 09:22:07,560 [http-bio-8080-exec-8] ERROR errors.GrailsExceptionResolver - IndexOutOfBoundsException occurred when processing request: [POST] /search
Index: 45, Size: 13. Stacktrace follows:
Message: Index: 45, Size: 13
Line | Method
->> 547 | RangeCheck in java.util.ArrayList
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 322 | get in ''
| 265 | fieldInfo . in org.apache.lucene.index.FieldInfos
| 254 | fieldName in ''
| 86 | read . . . in org.apache.lucene.index.TermBuffer
| 127 | next in org.apache.lucene.index.SegmentTermEnum
| 158 | scanTo . . in ''
| 271 | get in org.apache.lucene.index.TermInfosReader
| 332 | terms . . . in ''
| 717 | terms in org.apache.lucene.index.SegmentReader
| 93 | generate . in org.apache.lucene.search.PrefixGenerator
| 58 | getDocIdSet in org.apache.lucene.search.PrefixFilter
| 116 | <init> . . in org.apache.lucene.search.ConstantScoreQuery$ConstantScorer
| 81 | scorer in org.apache.lucene.search.ConstantScoreQuery$ConstantWeight
| 230 | scorer . . in org.apache.lucene.search.BooleanQuery$BooleanWeight
| 131 | search in org.apache.lucene.search.IndexSearcher
| 112 | search . . in ''
| 204 | search in org.apache.lucene.search.MultiSearcher
| 113 | getMoreDocs in org.apache.lucene.search.Hits
| 90 | <init> in ''
| 61 | search . . in org.apache.lucene.search.Searcher
| 146 | findByQuery in org.compass.core.lucene.engine.transaction.support.AbstractTransactionProcessor
| 259 | doFind . . in org.compass.core.lucene.engine.transaction.readcommitted.ReadCommittedTransactionProcessor
| 246 | find in org.compass.core.lucene.engine.transaction.support.AbstractConcurrentTransactionProcessor
| 352 | find . . . in org.compass.core.lucene.engine.LuceneSearchEngine
| 188 | hits in org.compass.core.lucene.engine.LuceneSearchEngineQuery
| 199 | hits . . . in org.compass.core.impl.DefaultCompassQuery
| 104 | doInCompass in grails.plugin.searchable.internal.compass.search.DefaultSearchMethod$SearchCompassCallback
| 133 | execute . . in org.compass.core.CompassTemplate
| 57 | doInCompass in grails.plugin.searchable.internal.compass.support.AbstractSearchableMethod
| 66 | invoke . . in grails.plugin.searchable.internal.compass.search.DefaultSearchMethod
| 37 | search in grails.plugin.searchable.SearchableService
|错误2012-05-30 09:22:07560[http-bio-8080-exec-8]错误。GrailExceptionResolver-IndexOutOfBoundsException在处理请求时发生:[POST]/search
索引:45,大小:13。跟踪如下:
信息:索引:45,大小:13
直线法
->>547 | java.util.ArrayList中的RangeCheck
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|322 |上车“
|265 |现场信息。在org.apache.lucene.index.FieldInfos中
|254 |字段名位于“”
|86读。在org.apache.lucene.index.TermBuffer中
|127 | org.apache.lucene.index.SegmentTermEnum中的下一个
|158 |斯坎托。在“
|271 |进入org.apache.lucene.index.TermInfosReader
|332 |术语。在“
|717 | org.apache.lucene.index.SegmentReader中的术语
|93 |生成。在org.apache.lucene.search.PrefixGenerator中
|58 | org.apache.lucene.search.PrefixFilter中的getDocIdSet
| 116 | . . 在org.apache.lucene.search.ConstantScoreQuery$ConstantScorer中
|81 | org.apache.lucene.search.ConstantScoreQuery$ConstantWeight中的记分员
|230 |记分员。在org.apache.lucene.search.BooleanQuery$BooleanWeight中
|131 |在org.apache.lucene.search.indexsearch中搜索
|112 |搜索。在“
|204 |在org.apache.lucene.search.multisearch中搜索
|113 | org.apache.lucene.search.Hits中的getMoreDocs
|90英寸
|61 |搜索。在org.apache.lucene.search.search中
|146 | org.compass.core.lucene.engine.transaction.support.AbstractTransactionProcessor中的findByQuery
|259 | doFind。在org.compass.core.lucene.engine.transaction.readcommitted.ReadCommittedTransactionProcessor中
|246 |可在org.compass.core.lucene.engine.transaction.support.AbstractConcurrentTransactionProcessor中找到
|352 |找到。在org.compass.core.lucene.engine.luceneSearchAnine中
|188 |点击org.compass.core.lucene.engine.luceneSearchIneQuery
|199 |点击率。在org.compass.core.impl.DefaultCompassQuery中
|104 |在grails.plugin.searchable.internal.compass.search.DefaultSearchMethod$SearchCompassCallback中进行比较
|133 |执行。在org.compass.core.CompassTemplate中
|57 |在grails.plugin.searchable.internal.compass.support.AbstractSearchableMethod中进行比较
|66 |调用。在grails.plugin.searchable.internal.compass.search.DefaultSearchMethod中
|37 |在grails.plugin.searchable.searchable服务中搜索
我们可以传达这样一个事实,即索引是从一个应用程序重建到另一个应用程序的,以便可以执行一些清理
- 有人对Grails和Searchable插件有类似的问题吗
- 是否可以丢弃Compass/Lucene缓存的数据
- 是否可以通常禁用缓存
searchableService.compass.compass.searchEngineFactory.indexManager.clearCache()
在搜索之前清除缓存会阻止缓存执行其工作。