我有一个WCF服务,可以将索引写到文件系统中。如果多个客户端尝试同时执行此操作,我可能会遇到线程问题。我看到FSDirectory.Open()有一个重载,它使我可以传递“ LockFactory”。

我找不到任何有关如何为Lucene .net创建这些LockFactories的文档。有人可以告诉我在哪里可以找到关于LockFactory的文档或应该实现的接口吗?

DirectoryInfo indexDirectory = new DirectoryInfo(ConfigurationManager.AppSettings["indexpath"]);
Directory luceneDirectory = FSDirectory.Open(indexDirectory);
try
{
    IndexWriter indexWriter = new IndexWriter(luceneDirectory, new StandardAnalyzer());
    Document document = new Document();

    foreach (KeyValuePair<string,string> keyValuePair in _metaDataDictionary)
    {
        document.Add(new Field(keyValuePair.Key, keyValuePair.Value, Field.Store.YES, Field.Index.ANALYZED));
        indexWriter.AddDocument(document);
    }

    indexWriter.Optimize();
    indexWriter.Flush();
    indexWriter.Close();
}
catch(IOException e)
{
    throw new IOException("Could not read Lucene index file.");
}

最佳答案

从您发布的代码中,我看不到为什么您除了默认的NativeFSLockFactory之外还需要更多东西。 FSDirectory.Open()重载在此参数中不采用锁工厂。

要进行自定义,您必须实现抽象的LockFactory类。

关于c# - 如何为Lucene.net创建LockFactory?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6822882/

10-10 21:41