예제 #1
0
        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());
                }

            }
        }
예제 #2
0
        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());
                }
            }
        }
예제 #3
0
        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);
                }
            }
        }
예제 #4
0
        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);
                }
            }
        }
예제 #5
0
        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());
                }
            }
        }
예제 #6
0
        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());
                }
            }
        }
예제 #7
0
        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);
            }
        }
예제 #8
0
 public void CanQueryOnEmptyindex()
 {
     using (var fti = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer()))
     {
         using (var searcher = fti.CreateSearcher())
         {
             Assert.Empty(searcher.Query(new TermQuery("Foo", "Arava")));
         }
     }
 }
예제 #9
0
        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);
                }
            }
        }
예제 #10
0
        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);
                }
            }
        }
예제 #11
0
        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")));
                }
            }
        }
예제 #12
0
        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")));
                }
            }
        }
예제 #13
0
        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);
                }
            }
        }
예제 #14
0
        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);
                }
            }
        }
예제 #15
0
        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);
                }
            }
        }
예제 #16
0
 public void CanQueryOnEmptyindex()
 {
     using (var fti = new FullTextIndex(StorageEnvironmentOptions.CreateMemoryOnly(), new DefaultAnalyzer()))
     {
         using (var searcher = fti.CreateSearcher())
         {
             Assert.Empty(searcher.Query(new TermQuery("Foo", "Arava")));
         }
     }
 }
예제 #17
0
        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());
                }
            }
        }
예제 #18
0
        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);
                }
            }
        }
예제 #19
0
        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")));
                }
            }
        }
예제 #20
0
        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")));
                }
            }
        }
예제 #21
0
        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());
                }
            }
        }