- Supported Client Libraries
- Supported Operations
- Objects
- Links
- What results can you expect?
- Cluster Creation and Default Index(Elasticsearch.Net and NEST)
- Cluster Creation From Configuration File
- Insert Operation(Elasticsearch.Net and NEST)
- Update Operation(Elasticsearch.Net and NEST)
- Select Operation(Elasticsearch.Net and NEST)
- Delete Operation(Elasticsearch.Net and NEST)
- Bulk Operations(Elasticsearch.Net and NEST)
- Bulk Operations Using Fluent DSL
- Known Limitations
CAST supports Elasticsearch via its com.castsoftware.nosqldotnet extension. Details about how this support is provided for .NET source code is discussed below.
Supported Client Libraries
Library | Supported |
---|---|
Elasticsearch.NET | |
NEST |
Supported Operations
Operation | Scenario | Methods Supported |
---|---|---|
Insert | Elasticsearch.Net | Elasticsearch.Net.ElasticLowLevelClient.Index Elasticsearch.Net.ElasticLowLevelClient.IndexAsync |
Insert | NEST | Nest.ElasticClient.Index Nest.ElasticClient.IndexAsync Nest.ElasticClient.IndexDocument Nest.ElasticClient.IndexDocumentAsync |
Update | Elasticsearch.Net | Elasticsearch.Net.ElasticLowLevelClient.Update Elasticsearch.Net.ElasticLowLevelClient.UpdateAsync Elasticsearch.Net.ElasticLowLevelClient.UpdateByQuery Elasticsearch.Net.ElasticLowLevelClient.UpdateByQueryAsync |
Update | NEST | Nest.ElasticClient.Update Nest.ElasticClient.UpdateAsync Nest.ElasticClient.UpdateByQuery Nest.ElasticClient.UpdateByQueryAsync |
Select | 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 |
Select | 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 | Elasticsearch.Net | Elasticsearch.Net.ElasticLowLevelClient.Delete Elasticsearch.Net.ElasticLowLevelClient.DeleteAsync Elasticsearch.Net.ElasticLowLevelClient.DeleteByQuery Elasticsearch.Net.ElasticLowLevelClient.DeleteByQueryAsync |
Delete | 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 |
Links
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 | Bulk BulkAsync DefaultIndex |
useInsertLink | Between the caller .NET Class / Method objects and DotNet Elasticsearch Index objects | Index IndexAsync IndexDocument IndexDocumentAsync |
useDeleteLink | Between the caller .NET Class / Method objects and DotNet Elasticsearch Index objects | Delete DeleteAsync DeleteByQuery DeleteByQueryAsync |
useSelectLink | Between the caller .NET Class / Method objects and DotNet Elasticsearch Index objects | Search SearchAsync DocumentExists DocumentExistsAsync Explain ExplainAsync Get GetAsync |
useUpdateLink | Between the caller .NET Class / Method objects and DotNet Elasticsearch Index objects | Update UpdateAsync UpdateByQuery UpdateByQueryAsync |
What results can you expect?
Some example scenarios are shown below:
Cluster Creation and Default Index(Elasticsearch.Net and NEST)
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)
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)
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)
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)
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 }) )); }
Known Limitations
- If index names are not resolved, the links are created between methods and default or unknown index objects