2012-05-30 28 views
2

使用Grails中的可搜索插件(使用Compass/Lucene底層),我們試圖在兩個不同的Web應用程序之間共享搜索索引。一個應用程序只能以只讀方式訪問數據。另一個應用程序允許修改數據,並負責更新任何更改的索引或根據需要進行完全重新索引。JDBC Store中的共享指南針/ Lucene索引

存儲我們使用JDBC存儲的索引(兩個應用程序都指向相同的數據庫)http://www.compass-project.org/docs/latest/reference/html/core-connection.html

不幸的是,當我們在一個應用程序重建整個索引,其他應用程序似乎有無效數據緩存,如果沒有執行搜索拋出一個異常:

| 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 

我們可以溝通的事實該索引從一個應用程序重建到另一個應用程序,以便可以執行一些清理。

  • 有沒有人對Grails和Searchable插件有類似的問題?
  • 是否有可能丟棄由Compass/Lucene緩存的數據?
  • 是否有可能一般禁用緩存?

回答

1

清除所有緩存之前的搜索似乎解決了問題...

searchableService.compass.compass.searchEngineFactory.indexManager.clearCache() 
+0

清除緩存搜索阻止做他們的工作緩存之前。 –