CAST supports Elasticsearch via its NoSQL for .NET extension. Details about how this support is provided for .NET source code is discussed below.
Supported Client Libraries
Supported Operations
Operation | Methods Supported |
---|---|
Insert | |
Update | |
Select | |
Delete |
Objects
Icon | Description |
---|---|
DotNet Elasticsearch Cluster | |
DotNet Elasticsearch Index | |
DotNet Unknown Elasticsearch Index |
Links
Links are created for transaction and function point needs:
Link type | Source and destination of link | Methods supported |
---|---|---|
belongsTo | From DotNet Elasticsearch Index object to DotNet Elasticsearch Cluster object | |
useLink | Between the caller .NET Class / Method objects and DotNet Elasticsearch Index objects |
|
useInsertLink |
| |
useDeleteLink |
| |
useSelectLink |
| |
useUpdateLink |
|
What results can you expect?
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)
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
<?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>
Insert Operation(Elasticsearch.Net and NEST)
IndexDocument
public void Indexing() { var person = new Person { Id = 1, FirstName = "Martijn", LastName = "Laarman" }; var ndexResponse = client.IndexDocument(person); //<1> }
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)
Update
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)
Select
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)
Delete
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; }
Bulk Operations(Elasticsearch.Net and NEST)
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; }
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 }) )); }
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