...
Operation | Methods Supported |
---|
Insert |
Expand |
---|
title | Insert Methods Supported -Elasticsearch.Net |
---|
| - Elasticsearch.Net.ElasticLowLevelClient.Index
- Elasticsearch.Net.ElasticLowLevelClient.IndexAsync
|
Expand |
---|
title | Insert Methods Supported - NEST |
---|
| - Nest.ElasticClient.Index
- Nest.ElasticClient.IndexAsync
- Nest.ElasticClient.IndexDocument
- Nest.ElasticClient.IndexDocumentAsync
|
|
Update |
Expand |
---|
title | Update Methods Supported - Elasticsearch.Net |
---|
| - Elasticsearch.Net.ElasticLowLevelClient.Update
- Elasticsearch.Net.ElasticLowLevelClient.UpdateAsync
- Elasticsearch.Net.ElasticLowLevelClient.UpdateByQuery
- Elasticsearch.Net.ElasticLowLevelClient.UpdateByQueryAsync
|
Expand |
---|
title | Update Methods Supported - NEST |
---|
| - Nest.ElasticClient.Update
- Nest.ElasticClient.UpdateAsync
- Nest.ElasticClient.UpdateByQuery
- Nest.ElasticClient.UpdateByQueryAsync
|
|
Select |
Expand |
---|
title | Select Methods Supported - Elasticsearch.Net |
---|
| - Elasticsearch.Net.ElasticLowLevelClient.Search
- Elasticsearch.Net.ElasticLowLevelClient.SearchAsync
- Elasticsearch.Net.ElasticLowLevelClient.DocumentExists
- Elasticsearch.Net.ElasticLowLevelClient.DocumentExistsAsync
- Elasticsearch.Net.ElasticLowLevelClient.Explain
- Elasticsearch.Net.ElasticLowLevelClient.ExplainAsync
|
Expand |
---|
title | Select Methods Supported - NEST |
---|
| - Nest.ElasticClient.Search
- Nest.ElasticClient.SearchAsync
- Nest.ElasticClient.DocumentExists
- Nest.ElasticClient.DocumentExistsAsync
- Nest.ElasticClient.Explain
- Nest.ElasticClient.ExplainAsync
- Nest.ElasticClient.Get
- Nest.ElasticClient.GetAsync
|
|
Delete |
Expand |
---|
title | Delete Methods Supported - Elasticsearch.Net |
---|
| - Elasticsearch.Net.ElasticLowLevelClient.Delete
- Elasticsearch.Net.ElasticLowLevelClient.DeleteAsync
- Elasticsearch.Net.ElasticLowLevelClient.DeleteByQuery
- Elasticsearch.Net.ElasticLowLevelClient.DeleteByQueryAsync
|
Expand |
---|
title | Delete Methods Supported - NEST |
---|
| - Nest.ElasticClient.Delete
- Nest.ElasticClient.DeleteAsync
- Nest.ElasticClient.DeleteByQuery
- Nest.ElasticClient.DeleteByQueryAsync
|
|
Objects
Icon | Description |
---|
| DotNet Elasticsearch Cluster |
| DotNet Elasticsearch Index |
| DotNet Unknown Elasticsearch Index |
...
Link type | Source and destination of link | Methods supported |
---|
parentLink | Between belongsTo | From DotNet Elasticsearch Index object to DotNet Elasticsearch Cluster object and Elasticsearch Index object |
|
useLink | Between the caller .NET Class / Method objects and DotNet Elasticsearch Index objects
| - Bulk
- BulkAsync
- .DefaultIndex
|
useInsertLink | - Index
- IndexAsync
- IndexDocument
- IndexDocumentAsync
|
useDeleteLink | - Delete
- DeleteAsync
- DeleteByQuery
- DeleteByQueryAsync
|
useSelectLink | - Search
- SearchAsync
- DocumentExists
- DocumentExistsAsync
- Explain
- ExplainAsync
- Get
- GetAsync
|
useUpdateLink | - Update
- UpdateAsync
- UpdateByQuery
- UpdateByQueryAsync
|
...
Once the analysis/snapshot generation has completed, you can view the results in the normal manner (for example via CAST Enlighten). Some examples are shown below.
Cluster Creation and Default Index(Elasticsearch.Net and NEST)
Code Block |
---|
language | c# |
---|
title | Cluster Creation and Default Index |
---|
|
class HighLevel
{
public void UsingConnectionPool()
{ var uris = new[]
{
new Uri("http://localhost:9200"),
new Uri("http://localhost:9201"),
new Uri("http://localhost:9202"),
};
var connectionPool = new SniffingConnectionPool(uris);
var settings = new ConnectionSettings(connectionPool)
.DefaultIndex("people");
var client = new ElasticClient(settings);
}
} |

Cluster Creation From Configuration File
Code Block |
---|
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="resizer" type="ImageResizer.ResizerSection,ImageResizer" requirePermission="false" />
<section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<section name="rockConfig" type="Rock.Configuration.RockConfig, Rock" />
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<appSettings>
<add key="baseUrl" value="http://127.0.0.1:9200" />
<add key="AllowDuplicateGroupMembers" value="false" />
<add key="EnableRedisCacheCluster" value="False" />
<add key="RedisPassword" value="" />
<add key="RedisEndpointList" value="" />
<add key="RedisDatabaseNumber" value="0" />
<add key="CacheManagerEnableStatistics" value="False" />
</appSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.1.0" newVersion="5.2.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Protocol.Extensions" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.0.40306.1554" newVersion="1.0.40306.1554" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.AspNetCore.DataProtection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.codedom>
<compilers>
<compiler extension=".cs" language="c#;cs;csharp" warningLevel="4" compilerOptions="/langversion:7.3 /nowarn:1659;1699;1701" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<providerOption name="UseAspNetSettings" value="false" />
</compiler>
</compilers>
</system.codedom>
</configuration> |
Image Added
Insert Operation(Elasticsearch.Net and NEST)
Code Block |
---|
language | c# |
---|
title | IndexDocument |
---|
|
public void Indexing()
{
var person = new Person
{
Id = 1,
FirstName = "Martijn",
LastName = "Laarman"
};
var ndexResponse = client.IndexDocument(person); //<1>
} |
...
Code Block |
---|
language | c# |
---|
title | IndexDocumentAsync |
---|
|
public async Task IndexingAsync()
{ var person = new Person
{
Id = 2,
FirstName = "Jack",
LastName = "Mas"
};
var asyncIndexResponse = await client.IndexDocumentAsync(person);
}
|


Update Operation(Elasticsearch.Net and NEST)
Code Block |
---|
|
public static bool updateDocument(string searchID, string first_name, string last_name)
{
bool status;
//Update by Partial Document
var response = client.Update<DocumentAttributes, UpdateDocumentAttributes>(searchID, d => d
.Index(index)
.Doc(new UpdateDocumentAttributes
{
FirstName = first_name,
LastName = last_name
}));
} |

Select
...
Operation(Elasticsearch.Net and NEST)
Code Block |
---|
|
public void SearchingOnDefaultIndex()
{
var searchResponse = client.Search<Person>(s => s
.From(0)
.Size(10)
.Query(q => q
.Match(m => m
.Field(f => f.FirstName)
.Query("Martijn")
)
)
);
var people = searchResponse.Documents;
} |


Delete Operation(Elasticsearch.Net and NEST)
Code Block |
---|
|
public static bool deleteDocument(string index, string searchID)
{
bool status;
var response = client.Delete<DocumentAttributes>(searchID, d => d
.Index(index));
if (response.IsValid)
{
status = true;
}
else
{
status = false;
}
return status;
} |

Evolution
- Previously, only files consisting of relevant Elasticsearch imports were processed further for analysing.
- Support has been evolved to process a file when it does not contain Elasticsearch import but makes use of its methods. Assumption is file is using same namespace as used in the file containing Elasticsearch imports.
Limitations
...
- Index name is hardcoded
- Index name is defined in the variable in the local method
- Index is defined as C# field
- Index or default name information is present in .config file
...
Bulk Operations(Elasticsearch.Net and NEST)
Code Block |
---|
language | c# |
---|
title | BulkOperations |
---|
|
public void BulkOperations()
{
var people = new object[]
{
new { index = new { _index = "people", _type = "person", _id = "1" }},
new { FirstName = "Martijn", LastName = "Laarman" },
new { index = new { _index = "people", _type = "person", _id = "2" }},
new { FirstName = "Greg", LastName = "Marzouka" },
new { index = new { _index = "people", _type = "person", _id = "3" }},
new { FirstName = "Russ", LastName = "Cam" },
};
var ndexResponse = lowlevelClient.Bulk<StringResponse>(PostData.MultiJson(people));
string responseStream = ndexResponse.Body;
}
|
Code Block |
---|
language | c# |
---|
title | Bulk Operations Using Fluent DSL |
---|
|
public void BulkOperationsUsingFluentDSL ()
{
var result = client.Bulk(b => b
.Index<Person>(i => i
.Document(new Person {Id = 2})
)
.Create<Person>(c => c
.Document(new Person { Id = 3 })
)
.Delete<Person>(d => d
.Document(new Person { Id = 4 })
));
}
|
Image Added
Image Added
Evolution
- Reading Cluster Information from configuration file
Limitations
- If index names are not resolved, the links are created between methods and default or unknown index objects
- Bulk operations using ObjectInitializerSyntax result in useLinks only
- Version .NET SDK 6.x and 7.x are supported
Future development
- Bulk operations to be scanned for the presence of insert (indexing) , update and delete operations
- Resolving the index name when passed as arguments in method