public ElasticsearchCommand(
     ElasticsearchOptions options,
     Func <string, TEntity, string> generateIndexName)
     : base(ConnectionMode.Write, options, generateIndexName)
 {
 }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 public ElasticsearchQuery(
     ElasticsearchOptions options)
     : base(ConnectionMode.Read, options, null)
 {
 }
Exemplo n.º 5
0
        public static StorageOptions Register(CommandLineApplication app)
        {
            var elasticSearchOptions = ElasticsearchOptions.Register(app);

            return(new StorageOptions(elasticSearchOptions));
        }
Exemplo n.º 6
0
 public StorageOptions(ElasticsearchOptions elasticSearchOptions)
 {
     _elasticsearchOptions = elasticSearchOptions ?? throw new ArgumentNullException(nameof(elasticSearchOptions));
 }