public void TestThreadSafeForIndexReader() { using var light = new LucenePoolLight(TempIndexDir); light.BuildIndex(new[] { GetDocument(new CodeSource { FileName = "Dummy File 1", FileExtension = "cs", FilePath = @"C:\Dummy File 1.cs", Content = "Test Content" + Environment.NewLine + "A New Line For Test" }), GetDocument(new CodeSource { FileName = "Dummy File 2", FileExtension = "cs", FilePath = @"C:\Dummy File 2.cs", Content = "Test Content" + Environment.NewLine + "A New Line For Test" }), GetDocument(new CodeSource { FileName = "Dummy File 2", FileExtension = "xml", FilePath = @"C:\Dummy File.xml", Content = "Test Content" + Environment.NewLine + "A New Line For Test" }) }, true, true, true); var taskList = new List <Task>(); var taskNumber = 3; // set to larger one for real test var addDocumentCount = 10; // set to larger one for real test for (var i = 0; i < taskNumber; i++) { taskList.Add(Task.Run(() => { for (var j = 0; j < addDocumentCount; j++) { if (j % 4 == 0) { light.BuildIndex(new[] { GetDocument(new CodeSource { FileName = $"Dummy File 1 {i} {j}", FileExtension = "cs", FilePath = $@"C:\Dummy File 1 {i} {j}.cs", Content = "Test Content" + Environment.NewLine + "A New Line For Test" }) }, true, true, true); } light.Search(new MatchAllDocsQuery(), int.MaxValue); light.Search(new MatchAllDocsQuery(), int.MaxValue); } })); } Assert.DoesNotThrowAsync(async() => await Task.WhenAll(taskList)); }
public void TestDeleteIndex() { using var light = new LucenePoolLight(TempIndexDir); light.BuildIndex(new[] { GetDocument(new CodeSource { FileName = "Dummy File 1", FileExtension = "cs", FilePath = @"C:\Dummy File 1.cs", Content = "Test Content" + Environment.NewLine + "A New Line For Test" }), GetDocument(new CodeSource { FileName = "Dummy File 2", FileExtension = "cs", FilePath = @"C:\Dummy File 2.cs", Content = "Test Content" + Environment.NewLine + "A New Line For Test" }) }, true, true, true); var documents = light.Search(new MatchAllDocsQuery(), int.MaxValue); Assert.AreEqual(2, documents.Length); light.DeleteIndex(new TermQuery(new Term(nameof(CodeSource.FileName), "2"))); documents = light.Search(new MatchAllDocsQuery(), int.MaxValue); Assert.AreEqual(1, documents.Length); light.DeleteIndex(new Term(nameof(CodeSource.FileName), "1")); documents = light.Search(new MatchAllDocsQuery(), int.MaxValue); Assert.AreEqual(0, documents.Length); }
public void TestExists() { using var light = new LucenePoolLight(TempIndexDir); light.BuildIndex(new[] { GetDocument(new CodeSource { FileName = "Dummy File 1", FileExtension = "cs", FilePath = @"C:\Dummy File 1.cs", Content = "Test Content" + Environment.NewLine + "A New Line For Test" }), GetDocument(new CodeSource { FileName = "Dummy File 2", FileExtension = "cs", FilePath = @"C:\Dummy File 2.cs", Content = "Test Content" + Environment.NewLine + "A New Line For Test" }) }, true, true, true); Assert.IsTrue(light.Exists(new TermQuery(new Term(nameof(CodeSource.FileName), "1")))); Assert.IsTrue(light.Exists(new TermQuery(new Term(nameof(CodeSource.FileName), "2")))); Assert.IsFalse(light.Exists(new TermQuery(new Term(nameof(CodeSource.FileName), "3")))); }
public void TestSearchWithSpecificFields() { using var light = new LucenePoolLight(TempIndexDir); light.BuildIndex(new[] { GetDocument(new CodeSource { FileName = "Dummy File 1", FileExtension = "cs", FilePath = @"C:\Dummy File 1.cs", Content = "Test Content" + Environment.NewLine + "A New Line For Test" }), GetDocument(new CodeSource { FileName = "Dummy File 2", FileExtension = "cs", FilePath = @"C:\Dummy File 2.cs", Content = "Test Content" + Environment.NewLine + "A New Line For Test" }) }, true, true, true); var documents = light.SearchWithSpecificFields(new TermQuery(new Term(nameof(CodeSource.FileName), "2")), int.MaxValue, nameof(CodeSource.FileName), nameof(CodeSource.FileExtension)); Assert.AreEqual(1, documents.Length); Assert.AreEqual("Dummy File 2", documents[0].Get(nameof(CodeSource.FileName))); Assert.AreEqual("cs", documents[0].Get(nameof(CodeSource.FileExtension))); Assert.IsNull(documents[0].Get(nameof(CodeSource.Content))); documents = light.SearchWithSpecificFields(new TermQuery(new Term(nameof(CodeSource.FileName), "2")), int.MaxValue, nameof(CodeSource.Content)); Assert.AreEqual(1, documents.Length); Assert.IsNull(documents[0].Get(nameof(CodeSource.FileName))); Assert.IsNull(documents[0].Get(nameof(CodeSource.FileExtension))); Assert.AreEqual("Test Content" + Environment.NewLine + "A New Line For Test", documents[0].Get(nameof(CodeSource.Content))); documents = light.SearchWithSpecificFields(new MatchAllDocsQuery(), int.MaxValue, nameof(CodeSource.FileName)); Assert.AreEqual(2, documents.Length); CollectionAssert.AreEquivalent(new[] { "Dummy File 1", "Dummy File 2" }, documents.Select(u => u.Get(nameof(CodeSource.FileName)))); }
public void TestUpdateIndexWithRawDocuments() { using var light = new LucenePoolLight(TempIndexDir); light.BuildIndex(new[] { GetDocument(new CodeSource { FileName = "Dummy File 1", FileExtension = "cs", FilePath = @"C:\Dummy File 1.cs", Content = "Test Content" + Environment.NewLine + "A New Line For Test" }), GetDocument(new CodeSource { FileName = "Dummy File 2", FileExtension = "cs", FilePath = @"C:\Dummy File 2.cs", Content = "Test Content" + Environment.NewLine + "A New Line For Test" }) }, true, true, true); light.UpdateIndex(new Term(nameof(CodeSource.FileName), "1"), GetDocument(new CodeSource { FileName = "Dummy File New 1", FileExtension = "cs", FilePath = @"C:\Dummy File 2.cs", Content = "New Content" }), out var rawDocuments); Assert.AreEqual(1, rawDocuments.Length); Assert.AreEqual("Test Content" + Environment.NewLine + "A New Line For Test", rawDocuments[0].Get(nameof(CodeSource.Content)), "Still old value"); var documents = light.Search(new TermQuery(new Term(nameof(CodeSource.FileName), "1")), 10); Assert.AreEqual(1, documents.Length); Assert.AreEqual("New Content", documents[0].Get(nameof(CodeSource.Content)), "Content updated"); }