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