Skip to content

Management library for Microsoft Azure Search

License

Notifications You must be signed in to change notification settings

carbon/RedDog.Search

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 

Repository files navigation

RedDog.Search

This library interacts with the Microsoft Azure Search REST API. You can use the library to manage indexes, populate indexes and execute queries.

Getting Started

Initialize the ApiConnection with your credentials:

ApiConnection connection = ApiConnection.Create("myservice","mykey");

Index Management

Creating an index:

var client = new IndexManagementClient(connection);
await client.CreateIndexAsync(new Index("records")
    .WithStringField("id", f => f
        .IsKey()
        .IsRetrievable())
    .WithStringField("title", f => f
        .IsSearchable()
        .IsRetrievable())
    .WithDateTimeField("createdOn", f => f
        .IsRetrievable()));

Updating an index:

var client = new IndexManagementClient(connection);
await client.UpdateIndexAsync(new Index("records")
    .WithStringField("id", f => f
        .IsKey()
        .IsRetrievable())
    .WithStringField("author", f => f
        .IsSearchable()
        .IsSortable()
        .IsRetrievable())
    .WithStringField("title", f => f
        .IsSearchable()
        .IsRetrievable())
    .WithDateTimeField("createdOn", f => f
        .IsRetrievable()));

Adding a scoring profile

var index = new Index("products")
// add additional fields to the index.

ScoringProfile scoringProfile = new ScoringProfile();
scoringProfile.Name = "personalized";
scoringProfile.Functions.Add(new ScoringProfileFunction()
{
    Type = ScoringProfileFunctionType.Tag,
    Boost = 2,
    FieldName = "brandTags",
    Tag = new ScoringProfileFunctionTag() { TagsParameter = "brands" }                
}); 
index.ScoringProfiles.Add(scoringProfile);

List all indexes:

var client = new IndexManagementClient(connection);
var indexes = await client.GetIndexesAsync();

Delete an index:

var client = new IndexManagementClient(connection);
var records = await client.DeleteIndexAsync("records");

Get the statistics for an index:

var client = new IndexManagementClient(connection);
var records = await client.GetIndexStatisticsAsync("records");
Console.WriteLine("Total documents: {0}", records.Body.DocumentCount);
Console.WriteLine("Total size: {0} bytes", records.Body.StorageSize);

Upload data to your index:

var client = new IndexManagementClient(connection);
var result = await client.PopulateAsync("records",
    new IndexOperation(IndexOperationType.Upload, "id", "1")
        .WithProperty("title", "My first movie")
        .WithProperty("author", "Sandrino")
        .WithProperty("createdOn", new DateTimeOffset(2014, 8, 1, 0, 0, 0, TimeSpan.Zero)),
    new IndexOperation(IndexOperationType.Upload, "id", "2")
        .WithProperty("title", "My second movie")
        .WithProperty("author", "Sandrino")
        .WithProperty("createdOn", new DateTimeOffset(2014, 8, 2, 0, 0, 0, TimeSpan.Zero)));

Querying

Execute a query:

var client = new IndexQueryClient(connection);
var results = await client.SearchAsync("records", new SearchQuery("movie")
    .OrderBy("author")
    .SearchField("title")
    .Count(true));

Execute a query by using NextLink:

var client = new IndexQueryClient(connection);
var results = await client.SearchAsync("records", new SearchQuery("movie")
    .OrderBy("author")
    .SearchField("title")
    .Count(true));

var nextResults = await client.SearchAsync(results.Body.NextLink);

Execute a query with highlighting:

var client = new IndexQueryClient(connection);
var results = await client.SearchAsync("records", new SearchQuery("movie")
    .OrderBy("author")
    .SearchField("title")
    .Count(true)
	.Highlight("title")
	.HighlightPreTag("<p>")
	.HighlightPostTag("</p>"));

Execute a query with faceting:

var client = new IndexQueryClient(connection);
var results = await client.SearchAsync("records", new SearchQuery("movie")
    .OrderBy("author")
    .SearchField("title")
	.Facet("rating", "values:1|2|3")
    .Count(true));

Execute a query with a score profile:

var client = new IndexQueryClient(connection);
var results = await client.SearchAsync("records", new SearchQuery("products")
    .SearchField("title")
	.ScoringProfile("personalized")
    .ScoringParameter("brands:brandA,brandB")
    .Count(true));

Execute a suggestion:

var client = new IndexQueryClient(connection);
var results = await client.SuggestAsync("records", new SuggestionQuery("mov")
	.Fuzzy(true)
	.Select("author")
	.Select("title")                    
	.SearchField("title")
	.OrderBy("title")
	.Top(10));

Execute a lookup:

var client = new IndexQueryClient(connection);
var results = await client.SuggestAsync("records", new LookupQuery("11ad89b6-9f1b-4380-aa06-8da39df61210")
	.Select("author,title"));

Handling exceptions:

var response = await client.DoSomething();
if (!response.IsSuccess)
{
    Console.WriteLine("{0}: {1}", response.Error.Code, response.Error.Message);
}

About

Management library for Microsoft Azure Search

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%