azure - [AzureDirectory]Lucene.NET indexes get corrupted when we restart webrole -
azure - [AzureDirectory]Lucene.NET indexes get corrupted when we restart webrole -
we using lucene.net in our project , using through azuredirectory library (https://azuredirectory.codeplex.com/)
we have single webrole , single worker role. index created , updated via worker role thread. search webrole creating indexsearcher. issue facing - when upgrade cspkg using management console upgrade bits on prodn server, lucene index that's been created stops working. error like:
file _2c.fdt not found (filenotfoundexception)
at lucene.net.index.segmentinfos.findsegmentsfile.run() in c:\dev\code\lucene.net\index\segmentinfos.cs:line 741 @ lucene.net.index.directoryindexreader.open(directory directory, boolean closedirectory, indexdeletionpolicy deletionpolicy) in c:\dev\code\lucene.net\index\directoryindexreader.cs:line 140 @ lucene.net.index.indexreader.open(directory directory, boolean closedirectory, indexdeletionpolicy deletionpolicy) in c:\dev\code\lucene.net\index\indexreader.cs:line 257 @ lucene.net.index.indexreader.open(directory directory) in c:\dev\code\lucene.net\index\indexreader.cs:line 236 @ lucene.net.search.indexsearcher..ctor(directory directory) in c:\dev\code\lucene.net\search\indexsearcher.cs:line 91
however, when check in lucene blob container, specific .fdt file exist. infact search working fine before upgrade. made sure both webrole worker roles shutdown before upgrade bits (just sure index not getting updated while upgrade happens) - resulted in such corruption.
note sure azuredirectory ramdirectory cache.
worker role code piece:
public static void createnewentities(list<string> smids) { azuredirectory azuredirectory = getazuredir(); indexwriter indexwriter = new indexwriter(azuredirectory, commonanalyzer.getanalyzer()); indexwriter.setusecompoundfile(false); foreach (string smid in smids) { list<document> docs = getdocs(smid); // gets docs entity foreach (document d in docs) { indexwriter.adddocument(d); } } indexwriter.close(); } public static void editentityinindex(list<string> smids) { // delete surfmark index, , recreate same azuredirectory azuredirectory = getazuredir(); indexwriter indexwriter = new indexwriter(azuredirectory, commonanalyzer.getanalyzer()); indexwriter.setusecompoundfile(false); foreach (string smid in smids) { indexwriter.deletedocuments(new term(indexingfields.id, smid)); list<document> docs = getdocs(smid); foreach (document d in docs) { indexwriter.adddocument(d); } } indexwriter.flush(); indexwriter.close(); }
web role code piece (for searching):
public static indexsearcher getindexsearcher() {//method indexsearcher obj refreshed every 10 mins long ctime = datetime.now.ticks/timespan.tickspermillisecond; if (_srchr == null || ctime - _srchrtime > 600000) // refresh every 10 mins { _srchr = new indexsearcher(getazuredir()); _srchrtime = datetime.now.ticks/timespan.tickspermillisecond; } homecoming _srchr; } string[] fields = { /*list of fields searched on*/}; indexsearcher searcher = getindexsearcher(); hits hits = searcher.search(mainquery);
can please help out here?
thanks
kapil
i first utilize process monitor verify missing file @ location think -- easy (at to the lowest degree me) bit errors during upgrade when server configuration changes out underneath you.
azure lucene lucene.net
Comments
Post a Comment