https://github.com/sheryever/litedbdirectory
A Lucene.net Directory to store the Lucene.net index files in LiteDB database
https://github.com/sheryever/litedbdirectory
Last synced: 5 months ago
JSON representation
A Lucene.net Directory to store the Lucene.net index files in LiteDB database
- Host: GitHub
- URL: https://github.com/sheryever/litedbdirectory
- Owner: sheryever
- Created: 2017-02-04T22:07:57.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-02-24T16:24:08.000Z (over 2 years ago)
- Last Synced: 2025-01-10T06:07:49.173Z (5 months ago)
- Language: C#
- Size: 36.1 KB
- Stars: 66
- Watchers: 7
- Forks: 17
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# LiteDBDirectory
A Lucene.net Directory to store the Lucene.net index files in a LiteDB database to secure the indexed data with a LiteDb password connection. The base implementation is taken from [LuceneNetSqlDirectory](https://github.com/MahyTim/LuceneNetSqlDirectory) and converted for LiteDb.
The solution is only for desktop and small ASP.NET applications. For large applications hosted on webfarms, it is recommended to use [LuceneNetSqlDirectory](https://github.com/MahyTim/LuceneNetSqlDirectory).
## Nuget Package
```
Install-Package LuceneLiteDbDirectory
```## Using LiteDbDirectory
Initializing LiteDbDirectory
```C#
string connectionString = $"Filename={Path.Combine(Environment.CurrentDirectory, "MyIndex.Db")};password=somepassword;";using (var db = new LiteDatabase(connectionString))
{
LiteDbDirectory liteDbDirectory = new LiteDbDirectory(db);
try
{
liteDbDirectory.CheckRequiredCollection();
}
catch (ConfigurationErrorsException e)
{
LiteDbDirectory.CreateRequiredCollections(db, dropExisting: true);
}
}
```
Using LiteDbDirectory for indexing data
```c#
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.Store.LiteDbDirectory;
/* Indexing code */
using (var db = new LiteDatabase(connectionString))
{
var indexWriter = new IndexWriter(directory, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30),
!IndexReader.IndexExists(directory),
new IndexWriter.MaxFieldLength(IndexWriter.DEFAULT_MAX_FIELD_LENGTH));indexWriter.SetRAMBufferSizeMB(500);
var bookPages = _libraryService.GetAllBookPages(); // You service layer to load data
foreach(var page in bookPages)
{
var bookPageDoc = new Document();
doc.Add(new Field("id", page.Id, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO));
doc.Add(new Field("book-title", page.Title, Field.Store.NO, Field.Index.ANALYZED, Field.TermVector.NO));
doc.Add(new Field("book-page", page.Text, Field.Store.NO, Field.Index.ANALYZED, Field.TermVector.NO));
indexWriter.AddDocument(bookPageDoc);
}
indexWriter.Flush(true, true, true);
indexWriter.Commit();
indexWriter.Dispose();
}
```
Using LiteDbDirectory for Searching data
```c#
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.Store.LiteDbDirectory;
/* searching code */
using (var db = new LiteDatabase(connectionString))
{
LiteDbDirectory liteDbDirectory = new LiteDbDirectory(db);
IndexSearcher searcher = new IndexSearcher(liteDbDirectory);
var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "book-page", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30));
var query = parser.Parse("text to search");
hits = searcher.Search(query, 100);Console.WriteLine("Found {0} results for {1}", hits.TotalHits, phrase);
foreach (var hitsScoreDoc in hits.ScoreDocs)
{
var doc = searcher.IndexReader[hitsScoreDoc.Doc];
Console.WriteLine("Book id: {0}", doc.GetValues("id")[0]);
}
}
```