In my quest to learn a bit more about Elasticsearch (post 1 en post 2) I will now use a .Net framework to connect to the server.

I have found that NEST is the most popular out there and featurecomplete. Of course there is a blogpost by Joel Abrahamsson out there but it is a bit dated.

The code

Let me begin by making a model.

Class Fiber
    Public Property Id As Integer
    Public Property FiberColor As FiberColorEnum
    Public Property Remarks As String
    Public Property Msps As IList(Of Msp)

    Public Enum FiberColorEnum
    End Enum
End Class

Class Msp
    Public Property Id As Integer
    Public Property A As Decimal
    Public Property WaveLength As Decimal
End Class```
And now that I have that out of the way I can make a connection to the server.

Dim setting = New ConnectionSettings(New Uri("")).SetDefaultIndex("fibers")
Dim client = New ElasticClient(setting)

Apparently the setdefaultindex is important because without it you get all kinds of errors all telling you to set a default index. Don’t know why that isn’t in the constructor as a parameter.

But now that we have a client we can add thins to the index.

vbnet Dim fiber As New Fiber With {.Id = 1, .Remarks = "Test", .FiberColor = fiber.FiberColorEnum.Black, .Msps = New List(Of Msp) From {New Msp With {.Id = 1, .A = 0.1D, .WaveLength = 380}, New Msp With {.Id = 2, .A = 0.11D, .WaveLength = 381}}} client.Index(Of Fiber)(fiber) Of course putting the enum in there is a bad idea since we are creating a full text index and we won’t find what we are looking for since it will have an int in there and not some string but I’ll try to solve that in a latter episode.

Anyway we can now Get that object by doing

vbnet client.Get(Of Fiber)(1) Which will give you the _source object from the result when you do GET /fibers/fibers/1 via the REST interface.


“_index”: “fibers”,

“_type”: “fibers”,

“_id”: “1”,

“_version”: 5,

“exists”: true,

“_source”: {

“id”: 1,

“fiberColor”: 5,

“remarks”: “Test”,

“msps”: [


“id”: 1,

“a”: 0.1,

“waveLength”: 380



“id”: 2,

“a”: 0.11,

“waveLength”: 381





If you want to get the full object you need to use GetFull.

vbnet client.GetFull(Of Fiber)(1) And now you have the full object as shown in the REST response. So you now show that.

vbnet Private Sub PrintFiber(ByVal fiberResponse As IGetResponse(Of Fiber)) Console.WriteLine("Id: " & fiberResponse.Id) If fiberResponse.Exists Then Console.WriteLine("Id: " & fiberResponse.Source.Remarks) Console.WriteLine("FiberColor: " & fiberResponse.Source.FiberColor) Console.WriteLine("Msps: " & fiberResponse.Source.Msps.Count) End If Console.WriteLine("Connectionstatus: " & fiberResponse.ConnectionStatus.Success) Console.WriteLine("Exists: " & fiberResponse.Exists) Console.WriteLine("Version: " & fiberResponse.Version) End Sub Which shows you that GetFull returns an object of IGetResponse(Of T).


That was a nice start and very easy to get to grips with, although the difference between Get and GetFull was not very clear to me in the beginning. Next up is search.