[英]Exception thrown when try to add documents to the lucene index continuously inside the for loop
我正在使用“ compass-2.2.0”在MySql數據庫表中創建一個Lucene索引。 這是我為文檔建立索引的代碼的一部分,這是在嘗試在for循環內不斷向lucene索引添加文檔時引發的異常。 任何解決此錯誤的方法?
我的托管服務器是基於WSo2 Stratoes tomcat的服務器和Wso2 Stratoes數據服務服務器。 我的程序在本地tomcat / mySql服務器中工作。
這是我關注的示例博客文章-http://mprabhat.wordpress.com/2012/08/13/create-lucene-index-in-database-using-jdbcdirectory/
private void addIndex(IndexWriter indexWriter) throws CorruptIndexException, IOException {
try {
for (int i = 0; i < docNames.length; i++) {
StringReader strRdElt = new StringReader(new DefaultTokenizer().processText(filesInText[i]));
StringReader docId = new StringReader(Integer.toString(i));
Document doc = new Document();
doc.add(new Field("doccontent", strRdElt, Field.TermVector.YES));
doc.add(new Field("docid", docId, Field.TermVector.YES));
indexWriter.addDocument(doc);
}
// indexWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
這是我遇到的新錯誤,我正在使用的服務器不允許創建臨時文件。 嘗試將內容寫入數據庫時,它會以某種方式創建臨時文件。 我在上面的循環中進行了調試,大約進行了5次迭代,然后發生以下錯誤。 任何解決此錯誤的方法?
java.lang.SecurityException: Unable to create temporary file
at java.io.File.checkAndCreate(File.java:1701)
at java.io.File.createTempFile(File.java:1792)
at java.io.File.createTempFile(File.java:1828)
at org.apache.lucene.store.jdbc.index.FileJdbcIndexOutput.configure(File
JdbcIndexOutput.java:46)
at org.apache.lucene.store.jdbc.index.RAMAndFileJdbcIndexOutput.switchIf
Needed(RAMAndFileJdbcIndexOutput.java:113)
at org.apache.lucene.store.jdbc.index.RAMAndFileJdbcIndexOutput.writeByt
es(RAMAndFileJdbcIndexOutput.java:73)
at org.apache.lucene.store.DataOutput.writeBytes(DataOutput.java:43)
at org.apache.lucene.store.RAMOutputStream.writeTo(RAMOutputStream.java:
65)
at org.apache.lucene.index.TermVectorsTermsWriter.finishDocument(TermVec
torsTermsWriter.java:170)
at org.apache.lucene.index.TermVectorsTermsWriter$PerDoc.finish(TermVect
orsTermsWriter.java:258)
at org.apache.lucene.index.DocumentsWriter$WaitQueue.writeDocument(Docum
entsWriter.java:1404)
at org.apache.lucene.index.DocumentsWriter$WaitQueue.add(DocumentsWriter
.java:1424)
at org.apache.lucene.index.DocumentsWriter.finishDocument(DocumentsWrite
r.java:1043)
at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWrite
r.java:772)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:2060
)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:2034
)
at org.karsha.base.DocIndexer_test.addIndex(DocIndexer_test.java:168)
at org.karsha.base.DocIndexer_test.indexToDB(DocIndexer_test.java:115)
at org.karsha.base.DocIndexer_test.topKFiboTerms(DocIndexer_test.java:35
9)
at org.karsha.controler.RecommondTermsServelet.doGet(RecommondTermsServe
let.java:379)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at sun.reflect.GeneratedMethodAccessor75.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:274
)
at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:271
)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:3
06)
at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.
java:166)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:299)
at org.apache.catalina.core.ApplicationFilterChain.access$000(Applicatio
nFilterChain.java:57)
at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilt
erChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilt
erChain.java:189)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica
torBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:98)
at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValv
e.java:172)
at org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.inv
oke(CarbonStuckThreadDetectionValve.java:156)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
927)
at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(Ca
rbonContextCreatorValve.java:52)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp
11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(
AbstractProtocol.java:579)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoin
t.java:1653)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
utor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:908)
at java.lang.Thread.run(Thread.java:619)
有很多原因可以使您從數據庫中獲取ThreadDeath異常。
編輯根據更新的堆棧跟蹤
指南針給您兩件事:
默認情況下,IndexOutput設置為RAMAndFileJDBCIndexOutput ,經過一定限制后,該開關將切換為FileJdbcIndexOutput並創建您的臨時文件。
要解決此問題,您可以更改此默認值,也可以更改JDBCDirectorySettings中的默認IndexOutput。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.