Page tree
Skip to end of metadata
Go to start of metadata

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

OperationMethods Supported
Insert
  • Index
  • IndexAsync
  • IndexDocument
  • IndexDocumentAsync
Update
  • Update
  • UpdateAsync
  • UpdateByQuery
  • UpdateByQueryAsync
Select
  • Search
  • SearchAsync
  • DocumentExists
  • DocumentExistsAsync
  • Explain
  • ExplainAsync
  • Get
  • GetAsync
Delete 
  • Delete
  • DeleteAsync
  • DeleteByQuery
  • DeleteByQueryAsync

Objects

Icon Description

DotNet Elasticsearch Cluster

DotNet Elasticsearch Index

DotNet Unknown Elasticsearch Index 

Links are created for transaction and function point needs:

Link typeSource and destination of link Methods supported
parentLink

Between Elasticsearch Cluster object and Elasticsearch Index object


useLinkBetween the caller .NET Class / Method objects and 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

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

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);
        }
}


Insert Operation

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

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 

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

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

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

  • 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.
  • Operations where .AllIndices() is used for index, links are generated between method and all indexes found in the project

Limitations

  • Index name is resolved as "known only" in the following situations:
    • 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 using ObjectInitializerSyntax result in useLinks only
  • Version .NET SDK 6.x and 7.x are supported

Future development

  • Resolving the index name when passed as arguments in method
  • No labels