public void OrOperatorGeneratesFlattenedOrCriteria() { var possibleIds = new[] { 1, 2, 3, 4 }; var where = Robots.Where(e => e.Name == "IG-88" || e.Cost > 1 || e.Zone.HasValue || possibleIds.Contains(e.Id)); var criteria = ElasticQueryTranslator.Translate(Mapping, "prefix", where.Expression).SearchRequest.Filter; Assert.IsType<OrCriteria>(criteria); var orCriteria = (OrCriteria)criteria; Assert.Equal("or", orCriteria.Name); Assert.Single(orCriteria.Criteria, f => f.Name == "term"); Assert.Single(orCriteria.Criteria, f => f.Name == "range"); Assert.Single(orCriteria.Criteria, f => f.Name == "exists"); Assert.Single(orCriteria.Criteria, f => f.Name == "terms"); Assert.Equal(4, orCriteria.Criteria.Count); }
public static void ContainsAll_ListFirst_CreatesTermsQuery() { var matchNames = new[] { "Robbie", "Kryten", "IG-88", "Marvin" }; var where = Robots.Where(r => ElasticMethods.ContainsAll(matchNames, r.Aliases)); var criteria = ElasticQueryTranslator.Translate(Mapping, "prefix", where.Expression).SearchRequest.Filter; var termsCriteria = Assert.IsType<TermsCriteria>(criteria); Assert.Equal("prefix.aliases", termsCriteria.Field); Assert.Contains("Robbie", termsCriteria.Values); Assert.Contains("Kryten", termsCriteria.Values); Assert.Contains("IG-88", termsCriteria.Values); Assert.Contains("Marvin", termsCriteria.Values); Assert.Equal(TermsExecutionMode.and, termsCriteria.ExecutionMode); }
public void Int32ArrayContainsGeneratesTermsCriteria() { var expectedIds = new[] { 1, 3, 2, 9, 7, 6, 123, 45678 }; var where = Robots.Where(e => expectedIds.Contains(e.Id)); var criteria = ElasticQueryTranslator.Translate(Mapping, "prefix", where.Expression).SearchRequest.Filter; var termsCriteria = Assert.IsType<TermsCriteria>(criteria); Assert.Equal("prefix.id", termsCriteria.Field); Assert.Equal(expectedIds.Length, termsCriteria.Values.Count); foreach (var term in expectedIds) Assert.Contains(term, termsCriteria.Values); }
public void DateTimeArrayContainsGeneratesTermsCriteria() { var expectedIds = new[] { 1, 3, 2, 9, 7, 6, 123, 4568 }.Select(d => DateTime.Now.AddDays(d)).ToArray(); var where = Robots.Where(e => expectedIds.Contains(e.Started)); var criteria = ElasticQueryTranslator.Translate(Mapping, "prefix", where.Expression).SearchRequest.Filter; var termsCriteria = Assert.IsType<TermsCriteria>(criteria); Assert.Equal("terms", termsCriteria.Name); Assert.Equal("prefix.started", termsCriteria.Field); Assert.Equal(expectedIds.Length, termsCriteria.Values.Count); foreach (var term in expectedIds) Assert.Contains(term, termsCriteria.Values); }
public void DoubleArrayContainsGeneratesTermsCriteria() { var expectedValues = new[] { 1.1, 3.2, 4.9, 7.6, 8.9, 12345.678 }; var where = Robots.Where(e => expectedValues.Contains(e.EnergyUse)); var criteria = ElasticQueryTranslator.Translate(Mapping, "prefix", where.Expression).SearchRequest.Filter; var termsCriteria = Assert.IsType<TermsCriteria>(criteria); Assert.Equal("prefix.energyUse", termsCriteria.Field); Assert.Equal(expectedValues.Length, termsCriteria.Values.Count); foreach (var term in expectedValues) Assert.Contains(term, termsCriteria.Values); }
public void DecimalArrayContainsGeneratesTermsCriteria() { var expectedHourlyWages = new[] { 1.1m, 3.2m, 4.9m, 7.6m, 8.9m, 12345.678m }; var where = Robots.Where(e => expectedHourlyWages.Contains(e.Cost)); var criteria = ElasticQueryTranslator.Translate(Mapping, "prefix", where.Expression).SearchRequest.Filter; var termsCriteria = Assert.IsType<TermsCriteria>(criteria); Assert.Equal("prefix.cost", termsCriteria.Field); Assert.Equal(expectedHourlyWages.Length, termsCriteria.Values.Count); foreach (var term in expectedHourlyWages) Assert.Contains(term, termsCriteria.Values); }
public void StringArrayInlineContainsGeneratesTermsCriteria() { var expectedNames = new[] { "Robbie", "Kryten", "IG-88", "Marvin" }; var where = Robots.Where(e => new[] { "Robbie", "Kryten", "IG-88", "Marvin" }.Contains(e.Name)); var criteria = ElasticQueryTranslator.Translate(Mapping, "prefix", where.Expression).SearchRequest.Filter; var termsCriteria = Assert.IsType<TermsCriteria>(criteria); Assert.Equal("prefix.name", termsCriteria.Field); Assert.Equal(expectedNames.Length, termsCriteria.Values.Count); foreach (var term in expectedNames) Assert.Contains(term, termsCriteria.Values); }
public void QueryStringWithFieldsGeneratesQueryStringCriteriaWithFields() { const string expectedQueryStringValue = "Data"; var expectedFields = new[] { "Green", "Brown" }; var where = Robots.QueryString(expectedQueryStringValue, expectedFields); var criteria = ElasticQueryTranslator.Translate(Mapping, where.Expression).SearchRequest; Assert.Null(criteria.Filter); Assert.NotNull(criteria.Query); var queryStringCriteria = Assert.IsType<QueryStringCriteria>(criteria.Query); Assert.Equal(expectedQueryStringValue, queryStringCriteria.Value); Assert.Equal(expectedFields, queryStringCriteria.Fields); }
public void SelectProjectionCreatesMultipleFacets() { var expectedFields = new[] { "cost", "energyUse", "started" }; var query = Robots.GroupBy(r => 2m) .Select(g => new { SumCost = g.Sum(a => a.Cost), AverageEnergyUse = g.Average(a => a.EnergyUse), MinStarted = g.Min(a => a.Started) }); var translation = ElasticQueryTranslator.Translate(Mapping, query.Expression); Assert.Contains("AnonymousType", Assert.IsType<ListTermlessFacetsElasticMaterializer>(translation.Materializer).ElementType.FullName); Assert.Equal("count", translation.SearchRequest.SearchType); Assert.Equal(expectedFields.Length, translation.SearchRequest.Facets.Count); foreach (var expectedField in expectedFields) { var facet = translation.SearchRequest.Facets.OfType<StatisticalFacet>().Single(s => s.Fields.Contains(expectedField)); Assert.Null(facet.Filter); Assert.Equal(1, facet.Fields.Count); } }