-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathElastic.cs
83 lines (74 loc) · 2.43 KB
/
Elastic.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using Elastic.Clients.Elasticsearch;
using Elastic.Clients.Elasticsearch.Core.Reindex;
using Elastic.Clients.Elasticsearch.IndexManagement;
using MongoDB.Bson;
using Nest;
using System;
using System.Linq;
using System.Threading.Tasks;
namespace DatabaseTests
{
public class Elastic
{
public ElasticClient Client;
string index = "items-index";
public Elastic(string URI)
{
var node = new Uri(URI);
var settings = new ConnectionSettings(node)
.DefaultIndex(index);
Client = new ElasticClient(settings);
}
public async Task<Nest.IndexResponse> IndexEntry(UserItem item)
{
var response = await Client.IndexAsync(item, request => request.Index(index));
if (response.IsValid)
{
Console.WriteLine($"Index document with ID {response.Id} succeeded.");
}
else
{
Console.WriteLine(response);
}
return response;
}
public async Task<System.Collections.Generic.IReadOnlyCollection<IHit<UserItem>>> GetEntries()
{
var response = await Client.SearchAsync<UserItem>(s => s
.From(0)
.Size(100)
);
foreach (var item in response.Hits)
{
Console.WriteLine(item.Id);
}
return response.Hits;
}
public async Task<UserItem> SearchEntries(string searchID)
{
//var response = Client.Get<UserItem>(searchID, g => g.Index(index));
var response = await Client.SearchAsync<UserItem>(s => s.Index(index).Query(q => q.Match(m => m.Field("_id").Query(searchID))));
if (response.IsValid && response.Hits.Count > 0)
{
var hit = response.Hits.First().Source;
return hit;
}
else
{
return null;
}
}
public async Task UpdateEntry(string id, UserItem item)
{
var response = await Client.UpdateAsync<UserItem>(id, u => u
.Index(index)
.Doc(item));
Console.WriteLine(response.ApiCall);
}
public async Task DeleteEntry(string id)
{
var response = await Client.DeleteAsync<UserItem>(id);
Console.WriteLine(response.ApiCall);
}
}
}