Programming/How To Post data to Elasticsearch: Difference between revisions

From Wiki Aghanim
Jump to navigationJump to search
No edit summary
Line 20: Line 20:


== Your Project ==  
== Your Project ==  
In <code>appsettings.json</code> add the following.


<syntaxhighlight lang="json">
{
  "Elasticsearch": {
    "Url": "https://10.18.20.1:9200",
    "IndexName": "my-index",
    "ApiKey": "U2g2OTVKc0I5QmZUMW5vY25NOXY6b25VMDFadUhsN1kycjJnZzVGekUwQQ=="
  }
}
</syntaxhighlight>
The below is a simple service that adds the message that the method receives to the body, and post ut using an HttpClient. ''my-index/_doc'' is just the indices that I made.
<syntaxhighlight lang="csharp">
public Task<bool> PostDocument(MessageModel message)
        {
            var apiKey = _configuration["Elasticsearch:ApiKey"];
            var url = _configuration["Elasticsearch:Url"];
            var json = JsonSerializer.Serialize(message);
            _httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("ApiKey", apiKey);
            var body = new StringContent(json, Encoding.UTF8, "application/json");
            var result = _httpClient.PostAsync($"{url}/my-index/_doc/", body).GetAwaiter().GetResult();
            if (result.IsSuccessStatusCode)
            {
                Console.WriteLine(result.ToString());
                return Task.FromResult(true);
            }
            return Task.FromResult(false);
        }
    }
</syntaxhighlight>


[[Category:.NET]]
[[Category:.NET]]
[[Category:CSharp]]
[[Category:CSharp]]
[[Category:Programming]]
[[Category:Programming]]

Revision as of 13:37, 3 March 2026

Elasticsearch API Key

In order to POST or GET data from Elasticsearch, you need an API key.

You must have one of the following cluster privileges:

  • manage_security
  • manage_api_key
  • manage_own_api_key
  1. Open Kibana
  2. In the left sidebar, scroll down and click Stack Management
  3. Under Security, click API Keys
  4. Click Create API key
  5. Fill in the following fields:
    • Name — give it a meaningful name
    • Expiration — optional, leave blank for no expiration
    • Privileges — set index/cluster permissions (e.g. index * with privilege write to post data)
  6. Click Create API key
  7. Copy the key immediately — it is only shown once


Your Project

In appsettings.json add the following.

{
  "Elasticsearch": {
    "Url": "https://10.18.20.1:9200",
    "IndexName": "my-index",
    "ApiKey": "U2g2OTVKc0I5QmZUMW5vY25NOXY6b25VMDFadUhsN1kycjJnZzVGekUwQQ=="
  }
}


The below is a simple service that adds the message that the method receives to the body, and post ut using an HttpClient. my-index/_doc is just the indices that I made.

 public Task<bool> PostDocument(MessageModel message)
        {
            var apiKey = _configuration["Elasticsearch:ApiKey"];
            var url = _configuration["Elasticsearch:Url"];
            var json = JsonSerializer.Serialize(message);

            _httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("ApiKey", apiKey);

            var body = new StringContent(json, Encoding.UTF8, "application/json");
            var result = _httpClient.PostAsync($"{url}/my-index/_doc/", body).GetAwaiter().GetResult();

            if (result.IsSuccessStatusCode)
            {
                Console.WriteLine(result.ToString());
                return Task.FromResult(true);
            }
            return Task.FromResult(false);
        }
    }