Lucene.NET
CAST supports Lucene.NET via its com.castsoftware.nosqldotnet extension. Details about how this support is provided for .NET source code is discussed below.
Supported Client Libraries
| Library | Version | Supported | 
|---|---|---|
| Lucene.NET | up to: 3.0.3 | 
Supported Operations
| Operations | Methods Supported | 
|---|---|
| Insert | Lucene.Net.Index.IndexWriter.AddDocument  | 
| Select | Lucene.Net.Index.IndexWriter.GetMaxFieldLength Lucene.Net.Index.IndexWriter.NumRamDocs Lucene.Net.Index.IndexWriter.GetDocCount Lucene.Net.Index.IndexWriter.HasDeletions Lucene.Net.Index.IndexWriter.MaxDoc Lucene.Net.Index.IndexWriter.NumDeletedDocs Lucene.Net.Index.IndexWriter.NumDocs Lucene.Net.Index.IndexReader.Document Lucene.Net.Index.IndexReader.GetFieldNames Lucene.Net.Index.IndexReader.IsDeleted Lucene.Net.Index.IndexReader.HasDeletions Lucene.Net.Index.IndexReader.ListCommits Lucene.Net.Index.IndexReader.TermDocs Lucene.Net.Search.Searcher.Search' Lucene.Net.Search.Searcher.Doc Lucene.Net.Search.Searcher.DocFreq Lucene.Net.Search.Searcher.Explain  | 
| Delete | Lucene.Net.Index.IndexWriter.DeleteDocuments Lucene.Net.Index.IndexReader.DeleteDocument Lucene.Net.Index.IndexWriter.DeleteAll  | 
| Update | Lucene.Net.Search.Searcher.Rewrite Lucene.Net.Index.IndexWriter.UpdateDocument  | 
Objects
| Icon | Description | 
|---|---|
  | 
DotNet Lucene Index | 
  | 
DotNet Unknown Lucene Index | 
Links
All links are created between the caller .NET Method objects and DotNet Lucene Index object:
| Link type | Methods Supported | 
|---|---|
| useSelectLink | GetMaxFieldLength NumRamDocs GetDocCount HasDeletions MaxDoc NumDeletedDocs NumDocs Document GetFieldNames IsDeleted ListCommits TermDocs Search Doc DocFreq Explain  | 
| useUpdateLink | Rewrite UpdateDocument  | 
| useInsertLink | AddDocument Commit  | 
| useDeleteLink | DeleteDocuments DeleteDocument DeleteAll  | 
What results can you expect?
Some example scenarios are shown below:
Lucene Index
public class MyLuceneIndex
{
    private Directory indexDirectory;
    private IndexWriterConfig indexWriterConfig;
    private IndexWriter indexWriter;
    public MyLuceneIndex()
    {
        indexDirectory = new RAMDirectory();
        indexWriterConfig = new IndexWriterConfig(LuceneVersion.LUCENE_48, new StandardAnalyzer(LuceneVersion.LUCENE_48));
        indexWriter = new IndexWriter(indexDirectory, indexWriterConfig);
    }

public class LuceneCRUDExample
{
    private string productIndexPath = "D:\ProductIndex";
    private string userIndexPath = "D:\UserIndex";
    private Directory productIndexDirectory;
    private Directory userIndexDirectory;
    private IndexWriterConfig indexWriterConfig;
    private IndexWriter productIndexWriter;
    private IndexWriter userIndexWriter;
    public LuceneCRUDExample()
    {
        productIndexDirectory = FSDirectory.Open(new DirectoryInfo(productIndexPath));
        userIndexDirectory = FSDirectory.Open(new DirectoryInfo(userIndexPath));
        indexWriterConfig = new IndexWriterConfig(Lucene.Net.Util.LuceneVersion.LUCENE_48, new StandardAnalyzer(Lucene.Net.Util.LuceneVersion.LUCENE_48));
        productIndexWriter = new IndexWriter(productIndexDirectory, indexWriterConfig);
        userIndexWriter = new IndexWriter(userIndexDirectory, indexWriterConfig);
    }


Select Operation
 public void SearchProductDocuments(string searchTerm)
    {
        var searcher = new IndexSearcher(productIndexDirectory, true);
        var parser = new Lucene.Net.QueryParsers.Classic.QueryParser(Lucene.Net.Util.LuceneVersion.LUCENE_48, "Description", new StandardAnalyzer(Lucene.Net.Util.LuceneVersion.LUCENE_48));
        var query = parser.Parse(searchTerm);
        var topDocs = searcher.Search(query, 10);
        foreach (var scoreDoc in topDocs.ScoreDocs)
        {
            var doc = searcher.Doc(scoreDoc.Doc);
            Console.WriteLine($"Product ID: {doc.Get("Id")}, Name: {doc.Get("Name")}, Description: {doc.Get("Description")}");
        }
        searcher.Dispose();
    }

Insert Operation
public void AddProductDocument(int id, string name, string description)
    {
        var doc = new Document();
        doc.Add(new StringField("Id", id.ToString(), Field.Store.YES));
        doc.Add(new TextField("Name", name, Field.Store.YES));
        doc.Add(new TextField("Description", description, Field.Store.YES));
        productIndexWriter.AddDocument(doc);
        productIndexWriter.Commit();
    }

Update Operation
 public void UpdateProductDocument(int id, string newName, string newDescription)
    {
        var term = new Term("Id", id.ToString());
        var doc = new Document();
        doc.Add(new StringField("Id", id.ToString(), Field.Store.YES));
        doc.Add(new TextField("Name", newName, Field.Store.YES));
        doc.Add(new TextField("Description", newDescription, Field.Store.YES));
        productIndexWriter.UpdateDocument(term, doc);
        productIndexWriter.Commit();
    }

Delete Operation
public void DeleteProductDocument(int id)
{
var term = new Term("Id", id.ToString());
productIndexWriter.DeleteDocuments(term);
productIndexWriter.Commit();
}

Known Limitations
- If the index location or path is not found in the source application, it will result in an Unknown Lucene index object