Exemple #1
0
        public void IndexMergerShouldNotTakeIntoAccountExpressionVariableNameForComplexTypes()
        {
            var index1 = new Complex_Person_ByName_1();
            var index2 = new Complex_Person_ByName_2();
            var index3 = new Complex_Person_ByName_3();

            var indexDefinition1 = index1.CreateIndexDefinition();
            var indexDefinition2 = index2.CreateIndexDefinition();
            var indexDefinition3 = index3.CreateIndexDefinition();

            var merger = new IndexMerger(
                new Dictionary <string, IndexDefinition>
            {
                { indexDefinition1.Name, indexDefinition1 },
                { indexDefinition2.Name, indexDefinition2 }
            });

            var results = merger.ProposeIndexMergeSuggestions();

            Assert.Equal(1, results.Suggestions.Count);
            Assert.Equal(1, results.Suggestions[0].CanDelete.Count);

            merger = new IndexMerger(
                new Dictionary <string, IndexDefinition>
            {
                { indexDefinition1.Name, indexDefinition1 },
                { indexDefinition3.Name, indexDefinition3 }
            });

            results = merger.ProposeIndexMergeSuggestions();

            Assert.Equal(1, results.Suggestions.Count);
            Assert.Equal(1, results.Suggestions[0].CanDelete.Count);
        }
Exemple #2
0
        public void IndexMergerWithQueryExpressionSyntaxShouldNotTakeIntoAccountExpressionVariableName()
        {
            using (var store = GetDocumentStore())
            {
                var index1 = new IndexDefinition
                {
                    Name = "Users_ByName_1",
                    Maps = { "from user in docs.Users select new { user.Name }" },
                    Type = IndexType.Map
                };
                var index2 = new IndexDefinition
                {
                    Name = "Users_ByName_2",
                    Maps = { "from u in docs.Users select new { u.Name }" },
                    Type = IndexType.Map
                };

                store.Maintenance.Send(new PutIndexesOperation(index1, index2));

                var dictionary = new Dictionary <string, IndexDefinition>
                {
                    { index1.Name, index1 },
                    { index2.Name, index2 }
                };

                var merger  = new IndexMerger(dictionary);
                var results = merger.ProposeIndexMergeSuggestions();

                Assert.Equal(1, results.Suggestions.Count);
                Assert.Equal(1, results.Suggestions[0].CanDelete.Count);
            }
        }
Exemple #3
0
        public void IndexMergeWithField()
        {
            using (var store = GetDocumentStore())
            {
                new UsersByName().Execute(store);
                new UsersByEmail().Execute(store);
                new UsersByAge().Execute(store);

                var index1 = store.Maintenance.Send(new GetIndexOperation("UsersByName"));
                var index2 = store.Maintenance.Send(new GetIndexOperation("UsersByEmail"));
                var index3 = store.Maintenance.Send(new GetIndexOperation("UsersByAge"));

                var dictionary = new Dictionary <string, IndexDefinition>
                {
                    { index1.Name, index1 },
                    { index2.Name, index2 },
                    { index3.Name, index3 }
                };

                var merger  = new IndexMerger(dictionary);
                var results = merger.ProposeIndexMergeSuggestions();

                Assert.Equal(1, results.Suggestions.Count);
                var suggestion = results.Suggestions[0];
                var index      = suggestion.MergedIndex;

                Assert.Equal(3, suggestion.CanMerge.Count);
                Assert.Equal(FieldIndexing.Search, index.Fields["Name"].Indexing);
                Assert.Equal(@"docs.Users.Select(doc=>new{Age=doc.Age
,Email=doc.Email
,Name=doc.Name
})", index.Maps.First());
            }
        }
Exemple #4
0
        public void IndexMergeWithField()
        {
            using (var store = NewDocumentStore())
            {
                new UsersByName().Execute(store);
                new UsersByEmail().Execute(store);
                new UsersByAge().Execute(store);

                var index1 = store.DatabaseCommands.GetIndex("UsersByName");

                var index2 = store.DatabaseCommands.GetIndex("UsersByEmail");

                var index3 = store.DatabaseCommands.GetIndex("UsersByAge");

                var dictionary = new Dictionary <int, IndexDefinition>()
                {
                    { index1.IndexId, index1 },
                    { index2.IndexId, index2 },
                    { index3.IndexId, index3 }
                };
                IndexMerger       merger  = new IndexMerger(dictionary);
                IndexMergeResults results = merger.ProposeIndexMergeSuggestions();
                foreach (var suggestion in results.Suggestions)
                {
                    var ind = suggestion.MergedIndex;
                    Assert.Equal(FieldIndexing.Analyzed, ind.Indexes["Name"]);
                    Assert.Equal(SortOptions.Int, ind.SortOptions["Age"]);
                }
            }
        }
Exemple #5
0
        public IndexMergeResults ProposeIndexMergeSuggestions()
        {
            var dic = new Dictionary <string, IndexDefinition>();

            foreach (var index in GetIndexes())
            {
                dic[index.Name] = index.GetIndexDefinition();
            }

            var indexMerger = new IndexMerger(dic);

            return(indexMerger.ProposeIndexMergeSuggestions());
        }
Exemple #6
0
        public void IndexMergeWithQueryExpressionSyntax()
        {
            using (var store = GetDocumentStore())
            {
                var byName = new IndexDefinition
                {
                    Name = "Users_ByName",
                    Maps = { "from user in docs.Users select new { user.Name }" },
                    Type = IndexType.Map
                };
                var byAge = new IndexDefinition
                {
                    Name = "Users_ByAge",
                    Maps = { "from u in docs.Users select new { u.Age }" },
                    Type = IndexType.Map
                };
                var byEmail = new IndexDefinition
                {
                    Name = "Users_ByEmail",
                    Maps = { "from user in docs.Users select new { user.Email }" },
                    Type = IndexType.Map
                };

                store.Maintenance.Send(new PutIndexesOperation(byName, byEmail, byAge));

                var dictionary = new Dictionary <string, IndexDefinition>
                {
                    { byName.Name, byName },
                    { byAge.Name, byAge },
                    { byEmail.Name, byEmail }
                };

                var merger  = new IndexMerger(dictionary);
                var results = merger.ProposeIndexMergeSuggestions();

                Assert.Equal(1, results.Suggestions.Count);
                var suggestion = results.Suggestions[0];
                var index      = suggestion.MergedIndex;

                Assert.Equal(3, suggestion.CanMerge.Count);
                Assert.Equal(@"fromdocindocs.Users
selectnew{Age=doc.Age
,Email=doc.Email
,Name=doc.Name
}", index.Maps.First());
            }
        }
Exemple #7
0
        public void IndexMergerShouldNotTakeIntoAccountExpressionVariableName()
        {
            var index1 = new Person_ByName_1();
            var index2 = new Person_ByName_2();
            var index3 = new Person_ByName_3();

            var indexDefinition1 = index1.CreateIndexDefinition();

            indexDefinition1.IndexId = 1;
            indexDefinition1.Name    = index1.IndexName;

            var indexDefinition2 = index2.CreateIndexDefinition();

            indexDefinition1.IndexId = 2;
            indexDefinition2.Name    = index2.IndexName;

            var indexDefinition3 = index3.CreateIndexDefinition();

            indexDefinition1.IndexId = 3;
            indexDefinition3.Name    = index3.IndexName;

            var merger = new IndexMerger(
                new Dictionary <int, IndexDefinition>
            {
                { indexDefinition1.IndexId, indexDefinition1 },
                { indexDefinition2.IndexId, indexDefinition2 }
            });

            var results = merger.ProposeIndexMergeSuggestions();

            Assert.Equal(1, results.Suggestions.Count);
            Assert.Equal(1, results.Suggestions[0].CanDelete.Count);

            merger = new IndexMerger(
                new Dictionary <int, IndexDefinition>
            {
                { indexDefinition1.IndexId, indexDefinition1 },
                { indexDefinition3.IndexId, indexDefinition3 }
            });

            results = merger.ProposeIndexMergeSuggestions();

            Assert.Equal(1, results.Suggestions.Count);
            Assert.Equal(1, results.Suggestions[0].CanDelete.Count);
        }
Exemple #8
0
        public FileDedupe(
            FileDedupeConfig fileDedupeConfig,
            IndexedFileParser indexedFileParser,
            DirectoryAnalyser dedupeAnalyser,
            IndexWriter indexWriter,
            IndexerFactory indexerFactory,
            IndexMerger indexMerger,
            ILogger logger)
        {
            _fileDedupeConfig  = fileDedupeConfig;
            _indexedFileParser = indexedFileParser;
            _directoryAnalyser = dedupeAnalyser;
            _indexWriter       = indexWriter;
            _indexerFactory    = indexerFactory;
            _indexMerger       = indexMerger;
            _logger            = logger;

            Console.WriteLine($"Loading Index: {_fileDedupeConfig.IndexFile}");
            _index = indexedFileParser.Parse(_fileDedupeConfig.IndexFile);
            Console.WriteLine($"Loaded Index: {_fileDedupeConfig.IndexFile}");
        }
Exemple #9
0
        public static async Task MainAsync(string[] args)
        {
            var config = ConfigReader.LoadFromFile("config.json");

            var logger         = new ConsoleLogger();
            var dedupeAnalyser = new DirectoryAnalyser();
            var indexWriter    = new IndexWriter();

            var parser         = new IndexedFileParser(logger);
            var indexerFactory = new IndexerFactory(logger);
            var indexMerger    = new IndexMerger(parser, indexWriter, logger);

            var fileDedupe = new FileDedupe(
                config,
                parser,
                dedupeAnalyser,
                indexWriter,
                indexerFactory,
                indexMerger,
                logger);

            fileDedupe.AnalyseDirectories();
        }
Exemple #10
0
        public IndexMergeResults ProposeIndexMergeSuggestions()
        {
            var indexMerger = new IndexMerger(IndexDefinitions.ToDictionary(x => x.Key, x => x.Value));

            return(indexMerger.ProposeIndexMergeSuggestions());
        }
 public IndexMergeResults ProposeIndexMergeSuggestions()
 {
     var indexMerger = new IndexMerger(IndexDefinitions.ToDictionary(x=>x.Key,x=>x.Value));
     return indexMerger.ProposeIndexMergeSuggestions();
 }