Introduction

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.

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
        Orange
        Red
        Brown
        Blue
        Green
        Black
        NoColor
    End Enum
End Class
 
Class Msp
    Public Property Id As Integer
    Public Property A As Decimal
    Public Property WaveLength As Decimal
End Class
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
        Orange
        Red
        Brown
        Blue
        Green
        Black
        NoColor
    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.

vb.net
1
2
Dim setting = New ConnectionSettings(New Uri("http://192.168.73.128:9200")).SetDefaultIndex("fibers")
Dim client = New ElasticClient(setting)
Dim setting = New ConnectionSettings(New Uri("http://192.168.73.128:9200")).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.

vb.net
1
2
3
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)
        
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

vb.net
1
client.Get(Of Fiber)(1)
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.

vb.net
1
client.GetFull(Of Fiber)(1)
client.GetFull(Of Fiber)(1)

And now you have the full object as shown in the REST response. So you now show that.

vb.net
1
2
3
4
5
6
7
8
9
10
11
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
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).

Conclusion

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.