public ElasticsearchCommand( ElasticsearchOptions options, Func <string, TEntity, string> generateIndexName) : base(ConnectionMode.Write, options, generateIndexName) { }
static void Main(string[] args) { // init var elasticsearchOptions = new ElasticsearchOptions { WriteUrl = "http://localhost:9200", ReadUrl = "http://localhost:9200", DefaultTypeName = "docs", DefaultIndexName = "my-index", TimeoutInSeconds = 60, MaximumRetries = 5, Environment = "MyServer" }; PersonCommand = new ElasticsearchCommand <Person>(elasticsearchOptions, Person.GenerateIndexName); PersonQuery = new ElasticsearchQuery <Person>(elasticsearchOptions); // bulk Console.Write("Bulk:"); var persons = new List <Person> { { new Person { Id = "1", Name = "Thiago Barradas", Age = 27, CreateDate = new DateTime(2019, 01, 01) } }, { new Person { Id = "8", Name = "Ralph Legal", Age = 29, CreateDate = new DateTime(2018, 12, 01) } }, { new Person { Id = "9", Name = "James Bond", Age = 30, CreateDate = new DateTime(2018, 12, 10) } }, { new Person { Id = "10", Name = "John Doe", Age = 54, CreateDate = new DateTime(2018, 11, 01) } }, { new Person { Id = "11", Name = "Jow Troll Moon Do", Age = 58, CreateDate = new DateTime(2018, 05, 25) } } }; persons.ForEach(person => Console.WriteLine(person.Name)); PersonCommand.Bulk(persons); // upsert Console.WriteLine("Upsert:"); var otherPerson = new Person { Id = "2", Name = "Rafael Barradas", Age = 25, CreateDate = new DateTime(2018, 12, 01) }; Console.WriteLine(otherPerson.Name); PersonCommand.Upsert(otherPerson); // get by id Console.WriteLine("Get:"); Person personX = PersonQuery.Get("8"); // null Person personY = PersonQuery.Get("4"); // John Doe Console.WriteLine(personX?.Name); Console.WriteLine(personY?.Name); // search Console.WriteLine("Search:"); var searchOptions = new SearchOptions { Page = 1, Size = 1, SortField = "name.keyword", SortMode = BulkAndSearch.Models.SortMode.ASC }; var query = Query <Person> .DateRange(i => i.Field("createDate").LessThan("2018-12-01")); var searchResult = PersonQuery.Search(query, searchOptions); searchResult.Items.ToList().ForEach(person => Console.WriteLine(person.Name)); // scroll Console.WriteLine("Scroll:"); var scrollOptions = new ScrollOptions { Scroll = "1m", Size = 2, SortField = "name.keyword", SortMode = BulkAndSearch.Models.SortMode.ASC }; List <Person> scrollPersons = new List <Person>(); var scrollResult = PersonQuery.Scroll(query, scrollOptions); while (scrollResult.Items.Any()) { scrollPersons.AddRange(scrollResult.Items); scrollResult = PersonQuery.Scroll(query, scrollOptions); } scrollPersons.ForEach(person => Console.WriteLine(person.Name)); }
public static IElasticClient GetElasticClientMock( ElasticsearchOptions options, Func <string, Person, string> generateIndexName, Person returnedPerson, string scrollId) { var getMock = new Mock <IGetResponse <Person> >(); getMock.SetupGet(m => m.Source).Returns(returnedPerson); var searchMock = new Mock <ISearchResponse <Person> >(); var persons = new List <Person>(); if (returnedPerson != null) { persons.Add(returnedPerson); } searchMock.SetupGet(m => m.IsValid).Returns(true); searchMock.SetupGet(m => m.Total).Returns((returnedPerson == null) ? 0 : 1); searchMock.SetupGet(m => m.Documents).Returns(persons); searchMock.SetupGet(m => m.ScrollId).Returns(scrollId); var responseMock = new Mock <IIndexResponse>(); responseMock.SetupGet(m => m.IsValid).Returns(true); var bulkMock = new Mock <IBulkResponse>(); bulkMock.SetupGet(m => m.IsValid).Returns(true); var clientMock = new Mock <IElasticClient>(); clientMock .Setup(m => m.Index( It.IsAny <object>(), It.IsAny <Func <IndexDescriptor <object>, IIndexRequest <object> > >())) .Returns((object document, Func <IndexDescriptor <object>, IIndexRequest <object> > selector) => { LastElasticClientAction = "Index"; LastProcessedPerson = (Person)document; LastProcessedIndex = generateIndexName?.Invoke(options.DefaultIndexName, (Person)document) ?? options.DefaultIndexName; return(responseMock.Object); }); clientMock .Setup(m => m.Bulk( It.IsAny <BulkDescriptor>())) .Returns((BulkDescriptor descriptor) => { LastElasticClientAction = "Bulk"; LastProcessedPersons = new List <Person>(); LastProcessedIndexes = new List <string>(); var descriptorAsJson = SerializeUtil.Serialize(descriptor); var lines = descriptorAsJson.Split('\n'); bool isOperation = true; for (int i = 0; i < lines.Length; i++) { if (string.IsNullOrWhiteSpace(lines[i])) { continue; } if (isOperation) { var operation = JsonConvert.DeserializeObject <dynamic>(lines[i]); LastProcessedIndexes.Add(operation.index._index.ToString()); isOperation = false; } else { var document = JsonConvert.DeserializeObject <Person>(lines[i]); LastProcessedPersons.Add(document); isOperation = true; } } return(bulkMock.Object); }); clientMock .Setup(m => m.Search <Person>(It.IsAny <ISearchRequest>())) .Returns((ISearchRequest request) => { LastElasticClientAction = "Search"; LastQueryBody = SerializeUtil.Serialize(request); return(searchMock.Object); }); clientMock .Setup(m => m.Get <Person>(It.IsAny <DocumentPath <Person> >(), null)) .Returns(() => { LastElasticClientAction = "Get"; return(getMock.Object); }); clientMock .Setup(m => m.Scroll <Person>(It.IsAny <IScrollRequest>())) .Returns((IScrollRequest request) => { LastElasticClientAction = "Scroll"; LastQueryBody = SerializeUtil.Serialize(request); return(searchMock.Object); }); return(clientMock.Object); }
public ElasticsearchQuery( ElasticsearchOptions options) : base(ConnectionMode.Read, options, null) { }
public static StorageOptions Register(CommandLineApplication app) { var elasticSearchOptions = ElasticsearchOptions.Register(app); return(new StorageOptions(elasticSearchOptions)); }
public StorageOptions(ElasticsearchOptions elasticSearchOptions) { _elasticsearchOptions = elasticSearchOptions ?? throw new ArgumentNullException(nameof(elasticSearchOptions)); }