public void Setup() { var client = new ElasticClient( //ElasticsearchConfiguration.Settings(hostOverride: new Uri("http://localhost:9200")) ElasticsearchConfiguration.Settings() ); try { IntegrationSetup.CreateTestIndex(client, ElasticsearchConfiguration.DefaultIndex); IntegrationSetup.CreateTestIndex(client, ElasticsearchConfiguration.DefaultIndex + "_clone"); IntegrationSetup.IndexDemoData(client); } catch (Exception) { throw; } }
public void MultiPercolate_ReturnsExpectedResults() { //lets start fresh using a new index var indexName = ElasticsearchConfiguration.NewUniqueIndexName(); IntegrationSetup.CreateTestIndex(this.Client, indexName); // lets register several percolators in our new index that do a term match // on document name == indexname // we associate some metadata with the percolator so that we can later filter // the ones we want to execute easier foreach (var i in Enumerable.Range(0, 10)) { var registerPercolator = this.Client.RegisterPercolator(new RegisterPercolatorRequest(indexName, "my-percolator-" + i) { Query = new TermQuery { Field = Property.Path <ElasticsearchProject>(p => p.Name.Suffix("sort")), Value = indexName }, MetaData = new Dictionary <string, object> { { "order", i } } }); registerPercolator.IsValid.Should().BeTrue(); } // Set up 2 projects to index both with indexName as Name var projects = Enumerable.Range(0, 2) .Select(i => new ElasticsearchProject { Id = 1337 + i, Name = indexName }) .ToList(); this.Client.IndexMany(projects, indexName); this.Client.Refresh(r => r.Index(indexName)); //Now we kick of multiple percolations var multiPercolateResponse = this.Client.MultiPercolate(mp => mp //provding document in the percolate request .Percolate <ElasticsearchProject>(perc => perc .Index(indexName) .Document(projects.First()) ) //providing an existing document .Percolate <ElasticsearchProject>(perc => perc .Index(indexName) .Id(projects.Last().Id) ) //do a count percolation but force it to only //run on two of the 10 percolators .Count <ElasticsearchProject>(cp => cp .Id(projects.Last().Id) .Index(indexName) .Query(ff => ff.Term("order", 3) || ff.Term("order", 4) ) ) //Force an error by providing a bogus type-name .Percolate <ElasticsearchProject>(perc => perc .Index(indexName) .Type("bogus!") .Id(projects.Last().Id) ) ); multiPercolateResponse.IsValid.Should().BeTrue(); var percolateResponses = multiPercolateResponse.Responses.ToList(); percolateResponses.Should().NotBeEmpty().And.HaveCount(4); var percolateResponse = percolateResponses[0]; percolateResponse.Total.Should().Be(10); percolateResponse.Matches.Should().HaveCount(10); var existingResponse = percolateResponses[1]; existingResponse.Total.Should().Be(10); existingResponse.Matches.Should().HaveCount(10); var countResponse = percolateResponses[2]; countResponse.Total.Should().Be(2); countResponse.Matches.Should().BeNull(); var errorResponse = percolateResponses[3]; errorResponse.Total.Should().Be(0); errorResponse.ServerError.Error.Should().NotBeNullOrWhiteSpace(); }
public void PercolateHighlighting() { //lets start fresh using a new index var indexName = ElasticsearchConfiguration.NewUniqueIndexName(); IntegrationSetup.CreateTestIndex(this.Client, indexName); var property = Property.Path <ElasticsearchProject>(p => p.Content); // lets register several percolators in our new index that do a term match // on document name == indexname // we associate some metadata with the percolator so that we can later filter // the ones we want to execute easier foreach (var i in Enumerable.Range(0, 10)) { var registerPercolator = this.Client.RegisterPercolator(new RegisterPercolatorRequest(indexName, "high-percolator-" + i) { Query = new MatchQuery { Field = property, Query = i % 2 == 0 ? "brown dog" : "lazy dog" } }); registerPercolator.IsValid.Should().BeTrue(); } var content = "The quick brown fox jumps over the lazy dog"; var percolateResponse = this.Client.Percolate <ElasticsearchProject>(perc => perc .Index(indexName) .Document(new ElasticsearchProject { Content = content }) .Highlight(10, h => h .OnFields(fd => fd .OnField(p => p.Content) ) ) ); percolateResponse.Total.Should().Be(10); percolateResponse.Matches.Should().HaveCount(10); var field = percolateResponse.Infer.PropertyPath(property); foreach (var match in percolateResponse.Matches) { match.Highlight.Should().NotBeEmpty().And.ContainKey(field); match.Highlight[field].Should().NotBeEmpty() .And.OnlyContain(l => l.Any()); } var multiPercolateResponse = this.Client.MultiPercolate(mp => mp .Percolate <ElasticsearchProject>(perc => perc .Index(indexName) .Document(new ElasticsearchProject { Content = content }) .Highlight(10, h => h .OnFields(fd => fd .OnField(p => p.Content) ) ) ) ); multiPercolateResponse.IsValid.Should().BeTrue(); multiPercolateResponse.Responses.Should().NotBeEmpty().And.HaveCount(1); percolateResponse = multiPercolateResponse.Responses.First(); percolateResponse.Total.Should().Be(10); percolateResponse.Matches.Should().HaveCount(10); foreach (var match in percolateResponse.Matches) { match.Highlight.Should().NotBeEmpty().And.ContainKey(field); match.Highlight[field].Should().NotBeEmpty() .And.OnlyContain(l => l.Any()); } }