public void CanDelete() { using (var fullTextIndex = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (var indexer = fullTextIndex.CreateIndexer()) { indexer.NewIndexEntry(); indexer.AddField("Name", "Oren Eini"); indexer.NewIndexEntry(); indexer.AddField("Name", "Ayende Rahien"); indexer.Flush(); } using (var searcher = fullTextIndex.CreateSearcher()) { Assert.Equal(1, searcher.Query(new TermQuery("Name", "oren")).Count()); Assert.Equal(1, searcher.Query(new TermQuery("Name", "rahien")).Count()); } using (var indexer = fullTextIndex.CreateIndexer()) { indexer.DeleteIndexEntry(1); indexer.Flush(); } using (var searcher = fullTextIndex.CreateSearcher()) { Assert.Equal(0, searcher.Query(new TermQuery("Name", "oren")).Count()); Assert.Equal(1, searcher.Query(new TermQuery("Name", "rahien")).Count()); } using (var indexer = fullTextIndex.CreateIndexer()) { indexer.DeleteIndexEntry(2); indexer.Flush(); } using (var searcher = fullTextIndex.CreateSearcher()) { Assert.Equal(0, searcher.Query(new TermQuery("Name", "oren")).Count()); Assert.Equal(0, searcher.Query(new TermQuery("Name", "rahien")).Count()); } } }
public void CanQueryUsingSingleTerm() { using (var fullTextIndex = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (var indexer = fullTextIndex.CreateIndexer()) { indexer.NewIndexEntry(); indexer.AddField("Name", "Oren Eini"); indexer.AddField("Email", "*****@*****.**"); indexer.NewIndexEntry(); indexer.AddField("Name", "Arava Eini"); indexer.AddField("Email", "*****@*****.**"); indexer.Flush(); } using (var searcher = fullTextIndex.CreateSearcher()) { Assert.Equal(1, searcher.Query(new TermQuery("Name", "oren")).Count()); Assert.Equal(0, searcher.Query(new TermQuery("Name", "rahien")).Count()); } } }
public void CanQueryWithInQuery() { using (var fullTextIndex = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (var indexer = fullTextIndex.CreateIndexer()) { indexer.NewIndexEntry(); indexer.AddField("Name", "David Boike"); indexer.NewIndexEntry(); indexer.AddField("Name", "Oren Eini"); indexer.NewIndexEntry(); indexer.AddField("Name", "Arava Eini"); indexer.NewIndexEntry(); indexer.AddField("Name", "Sean Epping"); indexer.NewIndexEntry(); indexer.AddField("Name", "Joe DeCock"); indexer.Flush(); } using (var searcher = fullTextIndex.CreateSearcher()) { var results = searcher.QueryTop(new InQuery("Name", "joe", "epping", "boike"), 5); Assert.Equal(3, results.Results.Length); } } }
public void CanQueryUsingBooleanQuery() { using (var fullTextIndex = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (var indexer = fullTextIndex.CreateIndexer()) { indexer.NewIndexEntry(); indexer.AddField("Name", "Oren"); indexer.AddField("Email", "*****@*****.**"); indexer.NewIndexEntry(); indexer.AddField("Name", "Oren"); indexer.AddField("Email", "*****@*****.**"); indexer.Flush(); } using (var searcher = fullTextIndex.CreateSearcher()) { Assert.Equal(1, searcher.Query(new BooleanQuery(QueryOperator.And, new TermQuery("Name", "oren"), new TermQuery("Email", "*****@*****.**"))).Count()); Assert.Equal(2, searcher.Query(new BooleanQuery(QueryOperator.Or, new TermQuery("Name", "oren"), new TermQuery("Email", "*****@*****.**"))).Count()); } } }
public void CanQueryAndSort() { using (var fullTextIndex = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (var indexer = fullTextIndex.CreateIndexer()) { indexer.NewIndexEntry(); indexer.AddField("Name", "Oren Eini"); indexer.AddField("Email", "*****@*****.**"); indexer.NewIndexEntry(); indexer.AddField("Name", "Arava Eini"); indexer.AddField("Email", "*****@*****.**"); indexer.Flush(); } using (var searcher = fullTextIndex.CreateSearcher()) { var results = searcher.QueryTop(new TermQuery("Name", "eini"), 5, sortBy: new Sorter("Email")); Assert.Equal(2, results.Results[0].DocumentId); Assert.Equal(1, results.Results[1].DocumentId); } } }
public void CanCreateAndDisposeIndexer() { using (var fti = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (fti.CreateIndexer()) { } } }
public void CanDeleteAndCompact() { using (var fullTextIndex = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { fullTextIndex.Conventions.AutoCompact = false; using (var indexer = fullTextIndex.CreateIndexer()) { indexer.NewIndexEntry(); indexer.Index("Name", "Oren Eini"); indexer.NewIndexEntry(); indexer.Index("Name", "Ayende Rahien"); indexer.Flush(); } using (var indexer = fullTextIndex.CreateIndexer()) { indexer.DeleteIndexEntry(1); indexer.Flush(); } using (var searcher = fullTextIndex.CreateSearcher()) { Assert.Equal(0, searcher.Query(new TermQuery("Name", "oren")).Count()); Assert.Equal(1, searcher.Query(new TermQuery("Name", "rahien")).Count()); } Assert.Equal(2, fullTextIndex.NumberOfDocuments); Assert.Equal(1, fullTextIndex.NumberOfDeletes); fullTextIndex.RunCompaction(); using (var searcher = fullTextIndex.CreateSearcher()) { Assert.Equal(0, searcher.Query(new TermQuery("Name", "oren")).Count()); Assert.Equal(1, searcher.Query(new TermQuery("Name", "rahien")).Count()); } Assert.Equal(1, fullTextIndex.NumberOfDocuments); Assert.Equal(0, fullTextIndex.NumberOfDeletes); } }
public void CanIndexEmptyDocument() { using (var fti = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (var indexer = fti.CreateIndexer()) { indexer.NewIndexEntry(); indexer.Flush(); } } }
public void CanIndexSingleValue() { using (var fti = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (var indexer = fti.CreateIndexer()) { indexer.NewIndexEntry(); indexer.AddField("Name", "Oren Eini"); indexer.Flush(); } } }
public void CanQueryAndSortByTwoFields() { using (var fullTextIndex = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (var indexer = fullTextIndex.CreateIndexer()) { indexer.NewIndexEntry(); indexer.AddField("QueryFor", "yes"); indexer.AddField("FirstName", "David"); indexer.AddField("LastName", "Boike"); indexer.NewIndexEntry(); indexer.AddField("QueryFor", "yes"); indexer.AddField("FirstName", "Natalie"); indexer.AddField("LastName", "Boike"); indexer.NewIndexEntry(); indexer.AddField("QueryFor", "NO"); indexer.AddField("FirstName", "NO"); indexer.AddField("LastName", "NO"); indexer.NewIndexEntry(); indexer.AddField("QueryFor", "yes"); indexer.AddField("FirstName", "Oren"); indexer.AddField("LastName", "Eini"); indexer.NewIndexEntry(); indexer.AddField("QueryFor", "yes"); indexer.AddField("FirstName", "Arava"); indexer.AddField("LastName", "Eini"); indexer.Flush(); } using (var searcher = fullTextIndex.CreateSearcher()) { var results = searcher.QueryTop(new TermQuery("QueryFor", "yes"), 5, sortBy: new Sorter(new SortByTerm("LastName"), new SortByTerm("FirstName"))); Assert.Equal(4, results.Results.Length); Console.WriteLine("{0}, {1}, {2}, {3}", results.Results[0].DocumentId, results.Results[1].DocumentId, results.Results[2].DocumentId, results.Results[3].DocumentId); Assert.Equal(1, results.Results[0].DocumentId); Assert.Equal(2, results.Results[1].DocumentId); Assert.Equal(5, results.Results[2].DocumentId); Assert.Equal(4, results.Results[3].DocumentId); } } }
public void WillFilterStopWords() { using (var fti = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (var indexer = fti.CreateIndexer()) { indexer.NewIndexEntry(); indexer.AddField("Name", "Oren and Ayende"); indexer.Flush(); } using (var searcher = fti.CreateSearcher()) { Assert.Empty(searcher.Query(new TermQuery("Name", "and"))); } } }
public void CanQueryUsingMissingField() { using (var fti = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (var indexer = fti.CreateIndexer()) { indexer.NewIndexEntry(); indexer.AddField("Name", "Oren Eini"); indexer.Flush(); } using (var searcher = fti.CreateSearcher()) { Assert.Empty(searcher.Query(new TermQuery("Foo", "Arava"))); } } }
public void CanDoPhraseQuery() { using (var fullTextIndex = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (var indexer = fullTextIndex.CreateIndexer()) { indexer.NewIndexEntry(); indexer.AddField("PhraseText", "Not a match.", options: FieldOptions.TermPositions); indexer.NewIndexEntry(); indexer.AddField("PhraseText", "RavenDB is a very cool database to work with.", options: FieldOptions.TermPositions); indexer.Flush(); } using (var searcher = fullTextIndex.CreateSearcher()) { var results = searcher.QueryTop(new PhraseQuery("PhraseText", "ravendb", "cool", "database") { Slop = 4 }, 5); Assert.Equal(1, results.Results.Length); Assert.Equal(2, results.Results[0].DocumentId); } using (var searcher = fullTextIndex.CreateSearcher()) { var results = searcher.QueryTop(new PhraseQuery("PhraseText", "database", "cool", "ravendb") { Slop = 4 }, 5); Assert.Equal(0, results.Results.Length); } } }
public void CanQueryUsingMissingTerm() { using (var fti = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer())) { using (var indexer = fti.CreateIndexer()) { indexer.NewIndexEntry(); indexer.AddField("Name", "Oren Eini"); indexer.Flush(); } using (var searcher = fti.CreateSearcher()) { Assert.Empty(searcher.Query(new TermQuery("Name", "Arava"))); } } }
static void Main(string[] args) { using (var fti = new FullTextIndex(StorageEnvironmentOptions.ForPath("index"), new DefaultAnalyzer())) { var tasks = new List <Task>(); var queue = new BlockingCollection <string>(10 * 1000); for (int i = 0; i < 1; i++) { tasks.Add(Task.Run(() => { int indexerCount = 0; using (var indexer = fti.CreateIndexer()) { indexer.AutoFlush = false; while (queue.IsCompleted == false) { string line; try { line = queue.Take(); } catch (InvalidOperationException) { break; } if (line == null) { break; } if (++indexerCount % (50 * 1000) == 0) { indexer.Flush(); } indexer.NewIndexEntry(); indexer.AddField("Title", line); } indexer.Flush(); } })); } var sp = Stopwatch.StartNew(); int count = 0; using (var reader = new StreamReader(new GZipStream(File.OpenRead("titles.gz"), CompressionMode.Decompress))) { while (true) { var line = reader.ReadLine(); if (line == null) { break; } queue.Add(line); if (++count % 50000 == 0) { Console.WriteLine("{0,10:#,#}: {1}", count, line); } } queue.CompleteAdding(); Console.WriteLine("Reading {0:#,#} in {1}", count, sp.Elapsed); } while (Task.WaitAll(tasks.ToArray(), 1000) == false) { Console.Write("\r{0,10:#,#;;0} ", queue.Count); } Console.WriteLine("\rTotal " + sp.Elapsed); } }