2

Grails の検索可能プラグイン (内部では Compass/Lucene を使用) を使用して、2 つの異なる Web アプリケーション間で検索インデックスを共有しようとしています。1 つのアプリケーションは、読み取り専用の方法でのみデータにアクセスします。もう一方のアプリケーションは、データの変更を許可し、変更に応じてインデックスを更新するか、必要に応じて完全な再インデックスを実行します。

インデックスを保存するために、JDBC ストアを使用しています (両方のアプリケーションが同じ DB を指しています) 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 でキャッシュされたデータを破棄することはできますか?
  • 一般的にキャッシュを無効にすることは可能ですか?
4

1 に答える 1

1

検索する前にすべてのキャッシュをクリアすると、問題が解決するようです...

searchableService.compass.compass.searchEngineFactory.indexManager.clearCache()
于 2012-06-13T12:40:58.647 に答える