In this guide i want to show you how to start in c# .net framework with ElasticSearch version 5, with the library NEST.


Elasticsearch is a Lucene-based search server with Full Text capability, with support for distributed architectures. All features are natively exposed through RESTful interface, while information is handled as JSON documents.
Is a database that contain many table and date, the table are called “index” and the date are called “documents” is like a no-sql database, as mongodb or couchbase.
In each “index” you can load many “documents” with many different “mapping”.

I suggest to install Kibana to manage ElasticSeach. Starter guide.


You can put the mapping on elastic search server throw Kibana dev console.
Mapping is the process of defining how a document, and the fields it contains, are stored and indexed. For instance, use mappings to define:

  • which string fields should be treated as full text fields.
  • which fields contain numbers, dates, or geolocations.
  • whether the values of all fields in the document should be indexed into the catch-all _allfield.
  • the format of date values.
  • custom rules to control the mapping for dynamically added fields.
PUT my_index 
  "mappings": {
    "user": { 
      "_all":       { "enabled": false  }, 
      "properties": { 
        "title":    { "type": "text"  }, 
        "name":     { "type": "text"  }, 
        "age":      { "type": "integer" }  
    "blogpost": { 
      "_all":       { "enabled": false  }, 
      "properties": { 
        "title":    { "type": "text"  }, 
        "body":     { "type": "text"  }, 
        "user_id":  {
          "type":   "keyword" 
        "created":  {
          "type":   "date", 
          "format": "strict_date_optional_time||epoch_millis"

In the mapping you can define the field, and each field as a datatype. Read the official guide for all datatypes.
Principles datatype:
– boolean
– int | short | long
– date
– text
– keyword
– specialized type (as IP, Completion (autocomplete), Token count datatype)


NEST is a high level client that has the advantage of having mapped all the request and response objects, comes with a strongly typed query DSL that maps 1 to 1 with the Elasticsearch query DSL, and takes advantage of specific .NET features such as covariant results and auto mapping of POCOs. NEST internally uses and still exposes the low level Elasticsearch.Net client.
Link to download NEST.


#Connect to elastic search server
ElasticClient client = new ElasticClient(new Uri("http://localhost:9200"));

Now we must to create the filter query to take data.
Using Nest to take this is very simple, i show you an example:

#Create our query container
QueryContainer filters = null;
#take a filter on datetime
var filterDate = new QueryContainerDescriptor<Record>().DateRange(t => t.Field("datetimeborn")
#Add the filter on query container
filters &= (filterDate);
#You can use the Or
filters |= (filterDate);

Mapping of data type and method:
Boolean => Exists
Date => DateRange
Number => Range
Text Like => WildCard
Text Exact => Term

#Elastic Search Query
POST students/_search
      "path": "information", 

#Nest c# query
var filterWildCard = new QueryContainerDescriptor<Record>().WildCard(t => t.Field("").Value("*SURNAME*"));

Now i’have used the Bool Query type, but exist other type, remind you to this official link.

#Execute client search
var response = client.Search<IndexType>(s => s
	.Query(q => q.Bool(bq => bq.Filter(filters))

#In the response we find
var documents = response.Documents;


The scroll API allows you to efficiently page through a large dataset as it keeps the query alive in the cluster. And if you want all / unlimited data, without pagination.