public void Map_all_fields()
        {
            _sut = DynamicQueryMapping.Create(new IndexQueryServerSide("FROM Users GROUP BY Location SELECT Location, count() "));

            var definition = _sut.CreateAutoIndexDefinition();

            Assert.Equal(1, definition.Collections.Count);
            Assert.Equal("Users", definition.Collections.Single());
            Assert.True(definition.ContainsField("Count"));
            Assert.Equal("Auto/Users/ByCountReducedByLocation", definition.Name);
        }
Example #2
0
        private static IndexQuery CreateIndexQuery(IndexQuery query, DynamicQueryMapping map, string realQuery)
        {
            var indexQuery = new IndexQuery
            {
                Cutoff = query.Cutoff,
                WaitForNonStaleResultsAsOfNow = query.WaitForNonStaleResultsAsOfNow,
                PageSize      = query.PageSize,
                Query         = realQuery,
                Start         = query.Start,
                FieldsToFetch = query.FieldsToFetch,
                IsDistinct    = query.IsDistinct,
                SortedFields  = query.SortedFields,
                DefaultField  = query.DefaultField,
                CutoffEtag    = query.CutoffEtag,
                DebugOptionGetIndexEntries = query.DebugOptionGetIndexEntries,
                DefaultOperator            = query.DefaultOperator,
                SkippedResults             = query.SkippedResults,
                HighlighterPreTags         = query.HighlighterPreTags,
                HighlighterPostTags        = query.HighlighterPostTags,
                HighlightedFields          = query.HighlightedFields,
                HighlighterKeyName         = query.HighlighterKeyName,
                ResultsTransformer         = query.ResultsTransformer,
                TransformerParameters      = query.TransformerParameters,
                ExplainScores = query.ExplainScores,
                SortHints     = query.SortHints
            };

            if (indexQuery.SortedFields == null)
            {
                return(indexQuery);
            }

            for (int index = 0; index < indexQuery.SortedFields.Length; index++)
            {
                var  sortedField = indexQuery.SortedFields[index];
                var  fieldName   = sortedField.Field;
                bool hasRange    = false;
                if (fieldName.EndsWith("_Range"))
                {
                    fieldName = fieldName.Substring(0, fieldName.Length - "_Range".Length);
                    hasRange  = true;
                }

                var item = map.Items.FirstOrDefault(x => string.Equals(x.QueryFrom, fieldName, StringComparison.InvariantCultureIgnoreCase));
                if (item == null)
                {
                    continue;
                }

                indexQuery.SortedFields[index]            = new SortedField(hasRange ? item.To + "_Range" : item.To);
                indexQuery.SortedFields[index].Descending = sortedField.Descending;
            }
            return(indexQuery);
        }
Example #3
0
        public void Complete_match_for_single_matching_index_with_sort_options()
        {
            var definition = new AutoMapReduceIndexDefinition(new[] { "Users" }, new[]
            {
                new IndexField
                {
                    Name               = "Count",
                    Storage            = FieldStorage.Yes,
                    MapReduceOperation = FieldMapReduceOperation.Count,
                    SortOption         = SortOptions.NumericDefault
                },
            },
                                                              new[]
            {
                new IndexField
                {
                    Name       = "Location",
                    Storage    = FieldStorage.Yes,
                    SortOption = SortOptions.String
                }
            });

            add_index(definition);

            var dynamicQuery = DynamicQueryMapping.Create("Users", new IndexQueryServerSide
            {
                Query = "Location:Poland",
                DynamicMapReduceFields = new[]
                {
                    new DynamicMapReduceField
                    {
                        Name          = "Count",
                        OperationType = FieldMapReduceOperation.Count
                    },
                    new DynamicMapReduceField
                    {
                        Name      = "Location",
                        IsGroupBy = true
                    }
                },
                SortedFields = new []
                {
                    new SortedField("Count_Range"),
                    new SortedField("Location"),
                }
            });

            var result = _sut.Match(dynamicQuery);

            Assert.Equal(DynamicQueryMatchType.Complete, result.MatchType);
            Assert.Equal(definition.Name, result.IndexName);
        }
Example #4
0
        public void Failure_if_matching_index_has_lot_of_errors()
        {
            var definition = new AutoMapReduceIndexDefinition(new[] { "Users" }, new[]
            {
                new IndexField
                {
                    Name               = "Count",
                    Storage            = FieldStorage.Yes,
                    MapReduceOperation = FieldMapReduceOperation.Count,
                },
            },
                                                              new[]
            {
                new IndexField
                {
                    Name    = "Location",
                    Storage = FieldStorage.Yes,
                }
            });

            add_index(definition);

            get_index(definition.Name)._indexStorage.UpdateStats(SystemTime.UtcNow, new IndexingRunStats
            {
                MapAttempts    = 1000,
                MapSuccesses   = 1000,
                ReduceAttempts = 1000,
                ReduceErrors   = 900
            });

            var dynamicQuery = DynamicQueryMapping.Create("Users", new IndexQueryServerSide
            {
                Query = "",
                DynamicMapReduceFields = new[]
                {
                    new DynamicMapReduceField
                    {
                        Name          = "Count",
                        OperationType = FieldMapReduceOperation.Count
                    },
                    new DynamicMapReduceField
                    {
                        Name      = "Location",
                        IsGroupBy = true
                    }
                }
            });

            var result = _sut.Match(dynamicQuery);

            Assert.Equal(DynamicQueryMatchType.Failure, result.MatchType);
        }
Example #5
0
        public void Partial_match_for_map_reduce_index_not_having_all_map_fields_defined_in_query()
        {
            var definition = new AutoMapReduceIndexDefinition(new[] { "Users" }, new[]
            {
                new IndexField
                {
                    Name               = "Count",
                    Storage            = FieldStorage.Yes,
                    MapReduceOperation = FieldMapReduceOperation.Count
                },
            },
                                                              new[]
            {
                new IndexField
                {
                    Name    = "Location",
                    Storage = FieldStorage.Yes,
                }
            });

            add_index(definition);

            var dynamicQuery = DynamicQueryMapping.Create("Users", new IndexQueryServerSide
            {
                Query = "Location:Poland",
                DynamicMapReduceFields = new[]
                {
                    new DynamicMapReduceField
                    {
                        Name          = "Count",
                        OperationType = FieldMapReduceOperation.Count
                    },
                    new DynamicMapReduceField
                    {
                        Name          = "Sum",
                        OperationType = FieldMapReduceOperation.Sum
                    },
                    new DynamicMapReduceField
                    {
                        Name      = "Location",
                        IsGroupBy = true
                    }
                }
            });

            var result = _sut.Match(dynamicQuery);

            Assert.Equal(DynamicQueryMatchType.Partial, result.MatchType);
            Assert.Equal(definition.Name, result.IndexName);
        }
Example #6
0
        public QueryResult ExecuteDynamicQuery(string entityName, IndexQuery query)
        {
            // Create the map
            var map = DynamicQueryMapping.Create(documentDatabase, query, entityName);

            var touchTemporaryIndexResult = GetAppropriateIndexToQuery(entityName, query, map);

            map.IndexName = touchTemporaryIndexResult.Item1;
            // Re-write the query
            string realQuery = map.Items.Aggregate(query.Query,
                                                   (current, mapItem) => current.Replace(mapItem.QueryFrom, mapItem.To));

            return(ExecuteActualQuery(query, map, touchTemporaryIndexResult, realQuery));
        }
Example #7
0
        public void WillGenerateProperQueryForMetadata()
        {
            using (var documentDatabase = new DocumentDatabase(new RavenConfiguration {
                RunInMemory = true
            }))
            {
                var mapping = DynamicQueryMapping.Create(documentDatabase, "@metadata.Raven-Graph-Type:Edge", null);

                var indexDefinition = mapping.CreateIndexDefinition();

                Assert.Equal(
                    "from doc in docs\nselect new {\n\t_metadata_Raven_Graph_Type = doc[\"@metadata\"][\"Raven-Graph-Type\"]\n}",
                    indexDefinition.Map);
            }
        }
Example #8
0
 private static void UpdateFieldNamesForSortedFields(IndexQuery query, DynamicQueryMapping map)
 {
     if (query.SortedFields == null)
     {
         return;
     }
     foreach (var sortedField in query.SortedFields)
     {
         var item = map.Items.FirstOrDefault(x => x.From == sortedField.Field);
         if (item != null)
         {
             sortedField.Field = item.To;
         }
     }
 }
Example #9
0
 private static void UpdateFieldsInArray(DynamicQueryMapping map, string[] fields)
 {
     if (fields == null)
     {
         return;
     }
     for (var i = 0; i < fields.Length; i++)
     {
         var item = map.Items.FirstOrDefault(x => x.From == fields[i]);
         if (item != null)
         {
             fields[i] = item.To;
         }
     }
 }
Example #10
0
        public QueryResultWithIncludes ExecuteDynamicQuery(string entityName, IndexQuery query, CancellationToken token)
        {
            // Create the map
            var map = DynamicQueryMapping.Create(documentDatabase, query, entityName);
            var touchTemporaryIndexResult = GetAppropriateIndexToQuery(entityName, query, map);

            string realQuery = map.Items.Aggregate(query.Query,
                                                   (current, mapItem) => current.Replace(mapItem.QueryFrom, mapItem.To));

            UpdateFieldNamesForSortedFields(query, map);

            // We explicitly do NOT want to update the field names of FieldsToFetch - that reads directly from the document
            //UpdateFieldsInArray(map, query.FieldsToFetch);

            return(ExecuteActualQuery(query, map, touchTemporaryIndexResult, realQuery, token));
        }
        public void CreateDefinitionForQueryWithRangeField()
        {
            _sut = DynamicQueryMapping.Create("Users", new IndexQueryServerSide
            {
                Query = "Age_Range:{Lx30 TO NULL}"
            });

            var definition = _sut.CreateAutoIndexDefinition();

            Assert.Equal(1, definition.Collections.Length);
            Assert.Equal("Users", definition.Collections[0]);
            Assert.True(definition.ContainsField("Age"));
            Assert.Equal("Auto/Users/ByAgeSortByAge", definition.Name);
            var nameField = definition.GetField("Age");

            Assert.Equal(SortOptions.NumericDefault, nameField.SortOption);
        }
Example #12
0
        public QueryResultWithIncludes ExecuteDynamicQuery(string entityName, IndexQuery query)
        {
            // Create the map
            var map = DynamicQueryMapping.Create(documentDatabase, query, entityName);

            var touchTemporaryIndexResult = GetAppropriateIndexToQuery(entityName, query, map);

            map.IndexName = touchTemporaryIndexResult.Item1;
            // Re-write the query
            string realQuery = map.Items.Aggregate(query.Query,
                                                   (current, mapItem) => current.Replace(mapItem.QueryFrom, mapItem.To));

            UpdateFieldNamesForSortedFields(query, map);
            UpdateFieldsInArray(map, query.FieldsToFetch);
            UpdateFieldsInArray(map, query.GroupBy);

            return(ExecuteActualQuery(query, map, touchTemporaryIndexResult, realQuery));
        }
        public void DefinitionExtensionWontDuplicateFields()
        {
            _sut = DynamicQueryMapping.Create("Users", new IndexQueryServerSide
            {
                Query        = "FirstName:A* LastName:a*",
                SortedFields = new[]
                {
                    new SortedField("Count_Range"),
                },
            });

            var existingDefinition = _sut.CreateAutoIndexDefinition();

            _sut = DynamicQueryMapping.Create("Users", new IndexQueryServerSide
            {
                Query        = "FirstName:A* AddressId:addresses/1",
                SortedFields = new[]
                {
                    new SortedField("Age_Range"),
                    new SortedField("Count_Range")
                },
            });

            _sut.ExtendMappingBasedOn(existingDefinition);

            var definition = _sut.CreateAutoIndexDefinition();

            Assert.Equal(1, definition.Collections.Length);
            Assert.Equal("Users", definition.Collections[0]);
            Assert.True(definition.ContainsField("FirstName"));
            Assert.True(definition.ContainsField("LastName"));
            Assert.True(definition.ContainsField("AddressId"));
            Assert.True(definition.ContainsField("Age"));
            Assert.True(definition.ContainsField("Count"));
            Assert.Equal("Auto/Users/ByAddressIdAndAgeAndCountAndFirstNameAndLastNameSortByAgeCount", definition.Name);

            var ageField = definition.GetField("Age");

            Assert.Equal(SortOptions.NumericDefault, ageField.SortOption);

            var countField = definition.GetField("Count");

            Assert.Equal(SortOptions.NumericDefault, countField.SortOption);
        }
Example #14
0
        public void Failure_match_for_map_reduce_index_having_different_aggregation_function()
        {
            var definition = new AutoMapReduceIndexDefinition(new[] { "Users" }, new[]
            {
                new IndexField
                {
                    Name               = "Count",
                    Storage            = FieldStorage.Yes,
                    MapReduceOperation = FieldMapReduceOperation.Count
                },
            },
                                                              new[]
            {
                new IndexField
                {
                    Name    = "Location",
                    Storage = FieldStorage.Yes,
                }
            });

            add_index(definition);

            var dynamicQuery = DynamicQueryMapping.Create("Users", new IndexQueryServerSide
            {
                Query = "Location:Poland",
                DynamicMapReduceFields = new[]
                {
                    new DynamicMapReduceField
                    {
                        Name          = "Count",
                        OperationType = FieldMapReduceOperation.Sum
                    },
                    new DynamicMapReduceField
                    {
                        Name      = "Location",
                        IsGroupBy = true
                    }
                }
            });

            var result = _sut.Match(dynamicQuery);

            Assert.Equal(DynamicQueryMatchType.Failure, result.MatchType);
        }
Example #15
0
        private string GetIndexNameFromCollectionAndField(string field)
        {
            var collection = GetStringQueryString("collection", false);

            if (string.IsNullOrEmpty(collection))
            {
                return(null);
            }
            var query = new IndexQueryServerSide(new QueryMetadata($"from {collection} select {field}", null, 0));
            var dynamicQueryToIndex = new DynamicQueryToIndexMatcher(Database.IndexStore);
            var match = dynamicQueryToIndex.Match(DynamicQueryMapping.Create(query));

            if (match.MatchType == DynamicQueryMatchType.Complete ||
                match.MatchType == DynamicQueryMatchType.CompleteButIdle)
            {
                return(match.IndexName);
            }
            throw new IndexDoesNotExistException($"There is no index to answer the following query: from {collection} select {field}");
        }
        public void Partial_match_if_exact_is_required()
        {
            using (var db = CreateDocumentDatabase())
            {
                var mapping = DynamicQueryMapping.Create(new IndexQueryServerSide(@"from Users
where Name = 'arek'"));

                db.IndexStore.CreateIndex(mapping.CreateAutoIndexDefinition()).Wait();

                mapping = DynamicQueryMapping.Create(new IndexQueryServerSide(@"from Users
where exact(Name = 'arek')"));

                var matcher = new DynamicQueryToIndexMatcher(db.IndexStore);

                var result = matcher.Match(mapping, null);

                Assert.Equal(DynamicQueryMatchType.Partial, result.MatchType);
            }
        }
        public void Failure_if_there_is_no_index_for_given_collection()
        {
            var definition = new AutoMapIndexDefinition("Users", new[]
            {
                new AutoIndexField
                {
                    Name    = "Name",
                    Storage = FieldStorage.No
                },
            });

            add_index(definition);

            var dynamicQuery = DynamicQueryMapping.Create(new IndexQueryServerSide("FROM Companies WHERE Name = 'IBM'"));

            var result = _sut.Match(dynamicQuery, null);

            Assert.Equal(DynamicQueryMatchType.Failure, result.MatchType);
        }
Example #18
0
        public void Failure_if_matching_index_is_disabled_errored_or_has_lot_of_errors()
        {
            var definition = new AutoMapIndexDefinition("Users", new[]
            {
                new IndexField
                {
                    Name        = "Name",
                    Highlighted = false,
                    Storage     = FieldStorage.No
                },
            });

            add_index(definition);

            var dynamicQuery = DynamicQueryMapping.Create("Users", new IndexQueryServerSide {
                Query = "Name:Arek"
            });

            var index = get_index(definition.Name);

            index.SetState(IndexState.Disabled);

            var result = _sut.Match(dynamicQuery);

            Assert.Equal(DynamicQueryMatchType.Failure, result.MatchType);

            index.SetState(IndexState.Error);

            result = _sut.Match(dynamicQuery);

            Assert.Equal(DynamicQueryMatchType.Failure, result.MatchType);

            index.SetPriority(IndexPriority.Normal);
            index._indexStorage.UpdateStats(DateTime.UtcNow, new IndexingRunStats()
            {
                MapAttempts = 1000,
                MapErrors   = 900
            });

            result = _sut.Match(dynamicQuery);

            Assert.Equal(DynamicQueryMatchType.Failure, result.MatchType);
        }
        public void Complete_match_for_single_matching_index()
        {
            var definition = new AutoMapIndexDefinition("Users", new[]
            {
                new AutoIndexField
                {
                    Name    = "Name",
                    Storage = FieldStorage.No
                },
            });

            add_index(definition);

            var dynamicQuery = DynamicQueryMapping.Create(new IndexQueryServerSide("FROM Users WHERE Name = 'Arek'"));

            var result = _sut.Match(dynamicQuery, null);

            Assert.Equal(DynamicQueryMatchType.Complete, result.MatchType);
            Assert.Equal(definition.Name, result.IndexName);
        }
        public void Partial_match_when_sort_field_is_not_mapped()
        {
            var definition = new AutoMapIndexDefinition("Users", new[]
            {
                new AutoIndexField
                {
                    Name    = "Name",
                    Storage = FieldStorage.No
                },
            });

            add_index(definition);

            var dynamicQuery = DynamicQueryMapping.Create(new IndexQueryServerSide("FROM Users WHERE Name = 'Arek' ORDER BY Weight"));

            var result = _sut.Match(dynamicQuery, null);

            Assert.Equal(DynamicQueryMatchType.Partial, result.MatchType);
            Assert.Equal(definition.Name, result.IndexName);
        }
        public void Complete_match_for_single_matching_index_with_numeric_sort_option_for_nested_field()
        {
            var definition = new AutoMapIndexDefinition("Users", new[]
            {
                new AutoIndexField
                {
                    Name    = "Address.ZipCode",
                    Storage = FieldStorage.No,
                },
            });

            add_index(definition);

            var dynamicQuery = DynamicQueryMapping.Create(new IndexQueryServerSide("FROM Users ORDER BY Address.ZipCode AS double"));

            var result = _sut.Match(dynamicQuery, null);

            Assert.Equal(DynamicQueryMatchType.Complete, result.MatchType);
            Assert.Equal(definition.Name, result.IndexName);
        }
        public void PartialMatch_for_index_containing_only_part_of_indexes_fields()
        {
            var usersByName = new AutoMapIndexDefinition("Users", new[]
            {
                new AutoIndexField
                {
                    Name    = "Name",
                    Storage = FieldStorage.No
                },
            });

            add_index(usersByName);

            var dynamicQuery = DynamicQueryMapping.Create(new IndexQueryServerSide("FROM Users WHERE Name = 'Arek' AND Age = 29"));

            var result = _sut.Match(dynamicQuery, null);

            Assert.Equal(DynamicQueryMatchType.Partial, result.MatchType);
            Assert.Equal(usersByName.Name, result.IndexName);
        }
        public async Task Partial_match_if_analyzer_is_required()
        {
            Initialize();
            using (var db = CreateDocumentDatabase())
            {
                var mapping = DynamicQueryMapping.Create(new IndexQueryServerSide(@"from Users
where Name = 'arek'"));

                await db.IndexStore.CreateIndex(mapping.CreateAutoIndexDefinition(), Guid.NewGuid().ToString());

                mapping = DynamicQueryMapping.Create(new IndexQueryServerSide(@"from Users
where search(Name, 'arek')"));

                var matcher = new DynamicQueryToIndexMatcher(db.IndexStore);

                var result = matcher.Match(mapping, null);

                Assert.Equal(DynamicQueryMatchType.Partial, result.MatchType);
            }
        }
Example #24
0
        public void ExtendsMappingBasedOnExistingDefinition()
        {
            _sut = DynamicQueryMapping.Create(new IndexQueryServerSide("FROM Users WHERE StartsWith(FirstName, 'a') ORDER BY Count AS long"));

            var existingDefinition = _sut.CreateAutoIndexDefinition();

            _sut = DynamicQueryMapping.Create(new IndexQueryServerSide("FROM Users WHERE StartsWith(LastName, 'A') ORDER BY Age AS double"));

            _sut.ExtendMappingBasedOn(existingDefinition);

            var definition = _sut.CreateAutoIndexDefinition();

            Assert.Equal(1, definition.Collections.Count);
            Assert.Equal("Users", definition.Collections.Single());
            Assert.True(definition.ContainsField("FirstName"));
            Assert.True(definition.ContainsField("LastName"));
            Assert.True(definition.ContainsField("Age"));
            Assert.True(definition.ContainsField("Count"));
            Assert.Equal("Auto/Users/ByAgeAndCountAndFirstNameAndLastName", definition.Name);
        }
Example #25
0
        private QueryResultWithIncludes ExecuteActualQuery(IndexQuery query, DynamicQueryMapping map, Tuple <string, bool> touchTemporaryIndexResult, string realQuery)
        {
            // Perform the query until we have some results at least
            QueryResultWithIncludes result;
            var sp = Stopwatch.StartNew();

            while (true)
            {
                result = documentDatabase.Query(map.IndexName,
                                                new IndexQuery
                {
                    Cutoff                     = query.Cutoff,
                    PageSize                   = query.PageSize,
                    Query                      = realQuery,
                    Start                      = query.Start,
                    FieldsToFetch              = query.FieldsToFetch,
                    GroupBy                    = query.GroupBy,
                    AggregationOperation       = query.AggregationOperation,
                    SortedFields               = query.SortedFields,
                    DefaultField               = query.DefaultField,
                    CutoffEtag                 = query.CutoffEtag,
                    DebugOptionGetIndexEntries = query.DebugOptionGetIndexEntries,
                    DefaultOperator            = query.DefaultOperator,
                    SkipTransformResults       = query.SkipTransformResults,
                    SkippedResults             = query.SkippedResults,
                    HighlighterPreTags         = query.HighlighterPreTags,
                    HighlighterPostTags        = query.HighlighterPostTags,
                    HighlightedFields          = query.HighlightedFields
                });

                if (!touchTemporaryIndexResult.Item2 ||
                    !result.IsStale ||
                    (result.Results.Count >= query.PageSize && query.PageSize > 0) ||
                    sp.Elapsed.TotalSeconds > 15)
                {
                    return(result);
                }

                Thread.Sleep(100);
            }
        }
Example #26
0
        public void Failure_if_matching_index_is_disabled_errored_or_has_lot_of_errors()
        {
            Initialize();
            var definition = new AutoMapIndexDefinition("Users", new[]
            {
                new AutoIndexField
                {
                    Name    = "Name",
                    Storage = FieldStorage.No
                },
            });

            AddIndex(definition);

            var dynamicQuery = DynamicQueryMapping.Create(new IndexQueryServerSide("FROM Users WHERE Name = 'Arek'"));

            var index = GetIndex(definition.Name);

            index.SetState(IndexState.Disabled);

            var result = _sut.Match(dynamicQuery, null);

            Assert.Equal(DynamicQueryMatchType.Failure, result.MatchType);

            index.SetState(IndexState.Error);

            result = _sut.Match(dynamicQuery, null);

            Assert.Equal(DynamicQueryMatchType.Failure, result.MatchType);

            index.SetPriority(IndexPriority.Normal);
            index._indexStorage.UpdateStats(DateTime.UtcNow, new IndexingRunStats()
            {
                MapAttempts = 1000,
                MapErrors   = 900
            });

            result = _sut.Match(dynamicQuery, null);

            Assert.Equal(DynamicQueryMatchType.Failure, result.MatchType);
        }
Example #27
0
        public void Complete_match_for_index_containing_all_fields()
        {
            var usersByName = new AutoMapIndexDefinition("Users", new[]
            {
                new IndexField
                {
                    Name        = "Name",
                    Highlighted = false,
                    Storage     = FieldStorage.No
                },
            });

            var usersByNameAndAge = new AutoMapIndexDefinition("Users", new[]
            {
                new IndexField
                {
                    Name        = "Name",
                    Highlighted = false,
                    Storage     = FieldStorage.No
                },
                new IndexField
                {
                    Name        = "Age",
                    Highlighted = false,
                    Storage     = FieldStorage.No
                }
            });

            add_index(usersByName);
            add_index(usersByNameAndAge);

            var dynamicQuery = DynamicQueryMapping.Create("Users", new IndexQueryServerSide {
                Query = "Name:Arek Age:29"
            });

            var result = _sut.Match(dynamicQuery);

            Assert.Equal(DynamicQueryMatchType.Complete, result.MatchType);
            Assert.Equal(usersByNameAndAge.Name, result.IndexName);
        }
Example #28
0
        public void Should_match_auto_map_index_if_analyzed_field_isnt_used_in_where()
        {
            using (var db = CreateDocumentDatabase())
            {
                var mapping = DynamicQueryMapping.Create(new IndexQueryServerSide(@"
from LastFms
where search(Artist, ""Chri"") and Genre = ""jazz"""));

                db.IndexStore.CreateIndex(mapping.CreateAutoIndexDefinition(), Guid.NewGuid().ToString()).Wait();

                mapping = DynamicQueryMapping.Create(new IndexQueryServerSide(@"
from LastFms
where Genre = ""jazz""
select Artist"));

                var matcher = new DynamicQueryToIndexMatcher(db.IndexStore);

                var result = matcher.Match(mapping, null);

                Assert.Equal(DynamicQueryMatchType.Complete, result.MatchType);
            }
        }
Example #29
0
        public void Failure_if_there_is_no_index_for_given_collection()
        {
            var definition = new AutoMapIndexDefinition("Users", new[]
            {
                new IndexField
                {
                    Name        = "Name",
                    Highlighted = false,
                    Storage     = FieldStorage.No
                },
            });

            add_index(definition);

            var dynamicQuery = DynamicQueryMapping.Create("Companies", new IndexQueryServerSide {
                Query = "Name:IBM"
            });

            var result = _sut.Match(dynamicQuery);

            Assert.Equal(DynamicQueryMatchType.Failure, result.MatchType);
        }
Example #30
0
        private QueryResultWithIncludes ExecuteActualQuery(IndexQuery query, DynamicQueryMapping map, Tuple <string, bool> touchTemporaryIndexResult, string realQuery, CancellationToken token)
        {
            // Perform the query until we have some results at least
            QueryResultWithIncludes result;
            var sp = Stopwatch.StartNew();

            while (true)
            {
                var indexQuery = CreateIndexQuery(query, map, realQuery);
                result = documentDatabase.Queries.Query(map.IndexName, indexQuery, token);

                if (!touchTemporaryIndexResult.Item2 ||
                    !result.IsStale ||
                    (result.Results.Count >= query.PageSize && query.PageSize > 0) ||
                    sp.Elapsed.TotalSeconds > 15)
                {
                    return(result);
                }

                Thread.Sleep(100);
            }
        }