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); }
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(); }
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"); }
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; } }
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(); }