Out of curiosity, are you running into the multiple writer issue when you
correctly set up the lock directory? I use the following code in my
application prior to creating an index writer.

       private static bool m_LockInitted = false;
       public static void InitLockDir()
       {
           if (m_LockInitted)
               return;

           string lockPath = Common.GetIndexPath() + @"\lock";

           if (!Directory.Exists(lockPath))
               Directory.CreateDirectory(lockPath);

           ConfigurationManager.AppSettings["Lucene.Net.lockdir"] =
lockPath;    // <-- this is the important part

           m_LockInitted = true;
       }


On 1/18/07, Torsten Rendelmann <[EMAIL PROTECTED]> wrote:

AFAIK only index modifications require a lock, while a concurrent
search does not. We run into the same problem (concurrent index
writers) and "solved" it using a single index mod. thread working
with a queue of documents to add/delete/update.

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: Monday, January 15, 2007 7:25 PM
> To: lucene-net-user@incubator.apache.org
> Subject: RE: FileNotFoundException, is this code supposed to work?
>
>
> I receive these kinds of errors when multiple threads are
> searching/writing
> to the index at the same time.  So far, I have had to resort
> to .NET locks
> for key locations in code, such as:
>
>       Dim hits As Hits = Nothing
>       SyncLock aLock
>               hits = searcher.Search(query, df1, custSort)
>       End SyncLock
>
>       SyncLock aLock
>               Result = reader.DeleteDocuments(New Term("Id",
> CStr(Id)))
>             reader.Close()
>       End SyncLock
>
>       SyncLock aLock
>               writer.AddDocument(doc)
>               writer.Close()
>       End SyncLock
>
>
> This of course kills our scalability, so I am so interested
> in knowing how
> to address multi-process/multi-threaded access to any
> particular index.
>
>
>
> - Michael
>
>
>
> -----Original Message-----
> From: Simon Gartz [mailto:[EMAIL PROTECTED]
> Sent: Monday, January 15, 2007 6:54 AM
> To: lucene-net-user@incubator.apache.org
> Subject: FileNotFoundException, is this code supposed to work?
>
> Hi,
>
> I've seen this questions before with slightly different
> approaches, but non
> with sample code. Is this code supposed to work or not, using
> Lucene.net
> v1.9.1.3?
> I get follwing error executing the code below. Note that it
> might take some
> time to crash.
>
> System.IO.FileNotFoundException : Could not find file
> "C:\DOCUME~1\sgartz\LOCALS~1\Temp\lucene\_1ji.frq".
>       at System.IO.__Error.WinIOError(Int32 errorCode, String str)
>       at System.IO.FileStream..ctor(String path, FileMode
> mode, FileAccess
> access, FileShare share, Int32 bufferSize, Boolean useAsync,
> String msgPath,
> Boolean bFromProxy)
>       at System.IO.FileStream..ctor(String path, FileMode
> mode, FileAccess
> access, FileShare share)
>       at Lucene.Net.Store.Descriptor..ctor(FSIndexInput
> enclosingInstance, FileInfo file, FileAccess mode)
>       at Lucene.Net.Store.FSIndexInput..ctor(FileInfo path)
>       at Lucene.Net.Store.FSDirectory.OpenInput(String name)
>       at Lucene.Net.Index.SegmentReader.Initialize(SegmentInfo si)
>       at Lucene.Net.Index.SegmentReader.Get(Directory dir,
> SegmentInfo si,
> SegmentInfos sis, Boolean closeDir, Boolean ownDir)
>       at Lucene.Net.Index.SegmentReader.Get(SegmentInfo si)
>       at Lucene.Net.Index.AnonymousClassWith.DoBody()
>       at Lucene.Net.Store.With.Run()
>       at Lucene.Net.Index.IndexReader.Open(Directory
> directory, Boolean
> closeDirectory)
>       at Lucene.Net.Index.IndexReader.Open(String path)
>       at Lucene.Net.Search.IndexSearcher..ctor(String path)
>
> c:\projects\x\development\x.test\indexingservice\indexingservi
> cetest.cs(
> 128,0): at
> x.Test.IndexingService.IndexingServiceTest.LuceneThreadTest()
>
>
>   private static readonly string directory =
> Path.Combine(Path.GetTempPath(), "lucene");
>
>   [Test]
>   public void LuceneThreadTest(){
>
>    //Create index
>    Lucene.Net.Analysis.Analyzer analyzer = new
> Lucene.Net.Analysis.SimpleAnalyzer();
>    Lucene.Net.Index.IndexWriter writer = new
> Lucene.Net.Index.IndexWriter(directory, analyzer, true);
>    writer.Close();
>
>    //Start indexing thread
>    Thread indexThread = new Thread(new
> ThreadStart(LuceneIndexThread));
>    indexThread.Start();
>
>    while(indexThread.IsAlive){
>     Console.WriteLine("Searching...");
>
>     Lucene.Net.Search.Searcher searcher = new
> Lucene.Net.Search.IndexSearcher(directory);
>
>     Lucene.Net.Search.Hits hits = null;
>     Lucene.Net.QueryParsers.QueryParser parser = new
> Lucene.Net.QueryParsers.QueryParser("contents", analyzer);
>     Lucene.Net.Search.Query query = parser.Parse("put");
>     Console.WriteLine("Query: " + query.ToString("contents"));
>
>     hits = searcher.Search(query);
>     Console.WriteLine(hits.Length() + " total results");
>     for (int i = 0; i < hits.Length() && i < 10; i++) {
>      Lucene.Net.Documents.Document d = hits.Doc(i);
>      Console.WriteLine(i + " " + hits.Score(i) + " " +
> d.Get("contents").Length + " " + d.Get("contents").Substring(0, 20));
>     }
>     searcher.Close();
>     Thread.Sleep(1000);
>    }
>   }
>   private void LuceneIndexThread(){
>    Console.WriteLine("Start indexing files");
>    for(int j = 0; j < 100; j++){
>
>     Lucene.Net.Analysis.Analyzer analyzer = new
> Lucene.Net.Analysis.SimpleAnalyzer();
>     Lucene.Net.Index.IndexWriter writer = new
> Lucene.Net.Index.IndexWriter(directory, analyzer, false);
>
>     for (int i = 0; i < 100; i++) {
>      Lucene.Net.Documents.Document d = new
> Lucene.Net.Documents.Document();
>      string content = new string('a', (new Random()).Next(100) * 10);
>      d.Add(new Lucene.Net.Documents.Field("contents", "Put
> contents here " +
> content, Lucene.Net.Documents.Field.Store.YES,
> Lucene.Net.Documents.Field.Index.TOKENIZED));
>      writer.AddDocument(d);
>     }
>     writer.Close();
>     Console.WriteLine("Indexed 100 documents...");
>    }
>    Console.WriteLine("Finished indexing files");
>   }
>
>
> Regards
> Simon
>





--
Mmmmmm...C8H11NO2

Reply via email to