Exemple #1
0
 public EsConnector(string host, int port, string login, string password)
 {
     var credentials = !login.IsNullOrEmpty() && !password.IsNullOrEmpty()
                         ? new NetworkCredential(login, password)
                         : null;
     Connection = new ElasticConnection(host, port) { Credentials = credentials };
 }
        public void Execute()
        {
            Console.WriteLine("PLAIN SAMPLE");

            var connection = new ElasticConnection("localhost", 9200);
            var serializer = new JsonNetSerializer();

            var tweet = new Tweet
            {
                User = "******",
                Message = "trying out Elastic Search"
            };

            var anotherTweet = new Tweet
            {
                User = "******",
                Message = "one more message"
            };


            IndexTweet(tweet, "1", connection, serializer);

            IndexTweet(anotherTweet, "2", connection, serializer);

            GetTweet("1", serializer, connection);

            SearchTweets(connection, serializer);

            DeleteTweeterIndex(connection, serializer);

            Console.WriteLine("Press any key");
            Console.ReadKey();
        }
        private static void IndexTweet(Tweet tweet, string id, ElasticConnection connection, JsonNetSerializer serializer)
        {
           /*            
           $ curl -XPUT 'http://localhost:9200/twitter/tweet/1?pretty=true' -d '{
                    "User" : "testUser",
                    "Message" : "trying out Elastic Search"
                }'            
           */

            // This is url that will be requested from ES. We can grab it and put to any ES admin console (like ElasticHead) to debug ES behavior.
            string indexCommand =  Commands.Index(index: "twitter", type: "tweet", id: id)
                .Refresh(true)
                .Pretty(); // this will generate: twitter/tweet/1?pretty=true

            // This variable contains JSON of serialized tweet, thus we can check if our object serialized correctly 
            // or use it directly in ES admin console.
            string tweetJson = serializer.ToJson(tweet);

            var result = connection.Put(indexCommand, tweetJson);

            // Parse index result.
            IndexResult indexResult = serializer.ToIndexResult(result);


            PrintIndexCommand(result, indexResult, indexCommand, tweetJson);
        }
        void Log_Events_Expected()
        {
            // Dev note - this builds the index, but need to run tests again to work
            var connection = new ElasticConnection("localhost", 9200);
            if (IsIndexExists(ElasticSearchStorage.GetIndex(), connection))
            {
                connection.Delete(new DeleteCommand(ElasticSearchStorage.GetIndex()));
            }

            for (var i = 1; i <= 100; i++)
            {
                Log.Trace("Entry Message : {0}", i);
                Log.Info("Entry Message : {0}", i);
                Log.Error("Entry Message : {0}", i);
            }

            Thread.Sleep(TimeSpan.FromSeconds(5));

            var serializer = new JsonNetSerializer();

            // Build the Search Query
            var query = new QueryBuilder<Entry>().Build();

            // Execute the search
            string result = connection.Post(Commands.Search(ElasticSearchStorage.GetIndex(), "Log"), query);
            var searchResult = serializer.ToSearchResult<Entry>(result);

            // Check all log entries in search index
            Assert.AreEqual(300, searchResult.hits.total);

            // Secondary check, use the instance based loger
            using (var log = Log.GetLogger())
            {
                for (var i = 1; i <= 100; i++)
                {
                    log.Trace("Entry Message : {0}", i);
                    log.Info("Entry Message : {0}", i);
                    log.Error("Entry Message : {0}", i);
                }

                Thread.Sleep(TimeSpan.FromSeconds(5));

                // Build the Search Query
                query = new QueryBuilder<Entry>().Build();

                // Execute the search
                result = connection.Post(Commands.Search(ElasticSearchStorage.GetIndex(), "Log"), query);
                searchResult = serializer.ToSearchResult<Entry>(result);

                // Check all log entries in search index
                Assert.AreEqual(600, searchResult.hits.total);
            }
        }
        private static void CreateIndexAlias(ElasticConnection connection, JsonNetSerializer serializer)
        {
            /*
             * curl -XPUT http://localhost:9200/twitter/_alias/twitter_alias
             */
 
            string indexAliasCommand = Commands.IndexAlias("twitter", "twitter_alias")
                .Pretty();

            var result = connection.Put(indexAliasCommand);

            // Parse index result.
            var indexAliasResult = serializer.ToCommandResult(result);

            PrintIndexAliasResult(indexAliasResult, indexAliasCommand, result);
        }
        private static IEnumerable<Tweet> SearchTweets(ElasticConnection connection, JsonNetSerializer serializer)
        {
            string searchCommand = Commands.Search("twitter", "tweet").Pretty();

            /*
{
    "query": {
        "term": {
            "User": {
                "value": "testuser",
                "boost": "5"
            }
        }
    }
}
             */


            string query = new QueryBuilder<Tweet>()
                .Query(qry => qry
                    .Term(term => term
                        .Field(tweet => tweet.User)
                        .Value("testUser".ToLower()) // by default terms query requires lowercased values.
                        .Boost(5)
                     )
                    // Alternate way 
                    //.Custom(" 'term': {{  '{0}': {{ 'value': '{1}', 'boost': '5' }} }}".AltQuote(), "User", "testuser")
                ).BuildBeautified();

            var results = connection.Post(searchCommand, query);

            var searchResult = serializer.ToSearchResult<Tweet>(results);


            PrintSearchResults(searchResult, searchCommand, query, results);

            return searchResult.Documents;
        }
        private static void DeleteTweeterIndex(ElasticConnection connection, JsonNetSerializer serializer)
        {
           /*            
           $ curl -XDELETE 'http://localhost:9200/twitter?pretty=true'
           */

            string deleteCommand = Commands.Delete(index: "twitter").Pretty();

            var result = connection.Delete(deleteCommand);

            DeleteResult deleteResult = serializer.ToDeleteResult(result);



            PrintDeleteCommand(deleteCommand, deleteResult, result);
        }
        private static Tweet GetTweet(string id, JsonNetSerializer serializer, ElasticConnection connection)
        {
            /*            
            $ curl -XGET 'http://localhost:9200/twitter/tweet/1?pretty=true'
            */

            String getCommand = Commands.Get(index: "twitter", type: "tweet", id: id).Pretty(); // this will generate: twitter/tweet/1?pretty=true

            var result = connection.Get(getCommand); 

            // Deserialize Get command result to GetResult object.
            var getResult = serializer.ToGetResult<Tweet>(result);

            var getTweet = getResult.Document;

            PrintGetCommand(getTweet, result, getCommand);

            return getTweet;
        }
        private static void BulkTweetIndex(IEnumerable<Tweet> tweets, ElasticConnection connection, JsonNetSerializer serializer)
        {
            string bulkCommand = new BulkCommand(index: "twitter", type: "tweet").Refresh();

            int id = 10; // start adding tweets from id = 10 
            string bulkJson = new BulkBuilder(serializer)
                                    .BuildCollection(tweets, 
                                    (builder, tweet) => builder.Index(data: tweet, id: (id++).AsString())
                                    );
            
            string result = connection.Post(bulkCommand, bulkJson);

            //Parse bulk result;
            BulkResult bulkResult = serializer.ToBulkResult(result);

            PrintBulkCommand(bulkCommand, bulkJson, bulkResult);
        }
Exemple #10
0
        public ElasticSearchDbLogger(ITime time)
        {
            _time = time;
            var host = Environment.GetEnvironmentVariable("ElasticSearchHost");

            if (string.IsNullOrEmpty(host))
            {
                throw new ConfigurationErrorsException(@"Please define an environment variable of ElasticSearchHost with the hostname of your ES server.");
            }

            _connection = new ElasticConnection(host);
            _serializer = new JsonNetSerializer();
        }
Exemple #11
0
        private static Task<IEnumerable<Tweet>> SearchTweetsAsync(ElasticConnection connection, JsonNetSerializer serializer)
        {
            string searchCommand = Commands.Search("twitter", "tweet").Pretty();

            string query = new QueryBuilder<Tweet>()
                .Query(qry => qry
                    .Term(term => term
                        .Field(tweet => tweet.User)
                        .Value("testUser".ToLower()) // by default terms query requires lowercased values.
                        .Boost(5)
                     )
                ).BuildBeautified();


            return connection.PostAsync(searchCommand, query)
                             // process search results asynchronously
                            .ContinueWith( searchTask => {

                               OperationResult results = searchTask.Result;
                               var searchResult = serializer.ToSearchResult<Tweet>(results);

                               Console.WriteLine("ASYNC Search Results: \r\n");
                               PrintSearchResults(searchResult, searchCommand, query, results);

                               return searchResult.Documents;
                           });
        }
        void Log_Disabled_Events_Expected()
        {
            Settings.LoggingEnabled = false;

            // Dev note - this builds the index, but need to run tests again to work
            var connection = new ElasticConnection("localhost", 9200);

            for (var i = 1; i <= 100; i++)
            {
                Log.Trace("Entry Message : {0}", i);
                Log.Info("Entry Message : {0}", i);
                Log.Error("Entry Message : {0}", i);
            }

            Thread.Sleep(TimeSpan.FromSeconds(5));

            var serializer = new JsonNetSerializer();

            // Build the Search Query
            var query = new QueryBuilder<Entry>().Build();

            // Execute the search
            string result = connection.Post(Commands.Search(ElasticSearchStorage.GetIndex(), "Log"), query);
            var searchResult = serializer.ToSearchResult<Entry>(result);

            // Check all log entries in search index
            Assert.AreEqual(600, searchResult.hits.total);
        }
 private void ConfigurePlainElasticClient()
 {
     _plainClient = new ElasticConnection("localhost");
 }
Exemple #14
0
        private static void ListIndexAliases(ElasticConnection connection, JsonNetSerializer serializer)
        {
            /*
             * curl -XGET http://localhost:9200/twitter/_aliases
             */

            string indexAliasCommand = Commands.IndexAliases("twitter")
                .Pretty();

            var result = connection.Get(indexAliasCommand);

            // Parse index result.
            var indexAliasResult = serializer.ToIndexAliasesResult(result);

            PrintIndexAliasListResult(indexAliasResult, indexAliasCommand, result);
        }
        private static long CountTweets(ElasticConnection connection, JsonNetSerializer serializer)
        {
            string countCommand = Commands.Count("twitter", "tweet").Pretty();

            string query = new SingleQueryBuilder<Tweet>()
                                    .Term(t => t
                                        .Field(x => x.User)
                                        .Value("testuser")
                                    )
                                    .BuildBeautified();  // or .Buid(); to get condensed single line query.

            /* or alternatively  
            query = new TermQuery<Tweet>()
                            .Field(x => x.User)
                            .Value("testuser")
                            .BuildBeautified();  // or .Buid(); to get condensed single line query.
            */

            var results = connection.Post(countCommand, query);

            var searchResult = serializer.ToCountResult(results);

            PrintCountResults(searchResult, countCommand, query, results);

            return searchResult.count;
        }
 private static bool IsIndexExists(string indexName, ElasticConnection connection)
 {
     try
     {
         connection.Head(new IndexExistsCommand(indexName));
         return true;
     }
     catch (Exception)
     {
         return false;
     }
 }
Exemple #17
0
        public void Execute()
        {
            Console.WriteLine("PLAIN SAMPLE");

            var connection = new ElasticConnection("localhost", 9200);
            var serializer = new JsonNetSerializer();

            var tweet = new Tweet
            {
                User = "******",
                Message = "trying out Elastic Search"
            };

            var anotherTweet = new Tweet
            {
                User = "******",
                Message = "one more message"
            };


            var tweets = new List<Tweet> {
                                    new Tweet
                                    {
                                        User = "******",
                                        Message = "first bulk tweet"
                                    },
                                    new Tweet
                                    {
                                        User = "******",
                                        Message = "second bulk tweet"
                                    },
                                    new Tweet
                                    {
                                        User = "******",
                                        Message = "third bulk tweet"
                                    },                                 
                             };

            IndexTweet(tweet, "1", connection, serializer);

            IndexTweet(anotherTweet, "2", connection, serializer);

            BulkTweetIndex(tweets, connection, serializer);

            CreateIndexAlias(connection, serializer);

            ListIndexAliases(connection, serializer);

            GetTweet("1", serializer, connection);

            SearchTweets(connection, serializer);

            SearchTweetsAsync(connection, serializer).Wait();

            CountTweets(connection, serializer);

            DeleteTweeterIndex(connection, serializer);

            Console.WriteLine("Press any key");
            Console.ReadKey();
        }