public static async Task<IApiResponse<Index>> RetrieveOrCreateIndexAsync() { var managementClient = GetIndexManagementClient(); IApiResponse<Index> index = new ApiResponse<Index>(); try { index = await managementClient.GetIndexAsync(Keys.ListingsServiceIndexName); } catch (Exception e) { Console.WriteLine("Index doesn't yet exist, create it"); } if (index.Body == null) { var newIndex = new Index(Keys.ListingsServiceIndexName) .WithStringField("Id", opt => opt.IsKey().IsRetrievable()) .WithStringField("Color", opt => opt.IsSearchable().IsSortable().IsFilterable().IsRetrievable()) .WithStringField("Package", opt => opt.IsSearchable().IsFilterable().IsRetrievable()) .WithStringField("Options", opt => opt.IsSearchable().IsFilterable().IsRetrievable()) .WithStringField("Type", opt => opt.IsSearchable().IsFilterable().IsRetrievable()) .WithStringField("Image", opt => opt.IsRetrievable()); index = await managementClient.CreateIndexAsync(newIndex); if (!index.IsSuccess) { Console.WriteLine("Error when making index"); } } return index; }
/// <summary> /// PUT api/indexes /// </summary> /// <param name="index"></param> /// <returns></returns> public async Task<HttpResponseMessage> Put(Index index) { var result = await _managementClient.UpdateIndexAsync(index); if (!result.IsSuccess) { return Request.CreateResponse(result.StatusCode, result); } return Request.CreateResponse(HttpStatusCode.OK, result); }
/// <summary> /// Update an existing index. /// </summary> /// <param name="index"></param> /// <returns></returns> public Task<IApiResponse<Index>> UpdateIndexAsync(Index index) { return _connection.Execute<Index>(new ApiRequest("indexes/{0}", HttpMethod.Put) { Body = index } .WithUriParameter(index.Name)); }
/// <summary> /// Create a new index. /// </summary> /// <param name="index"></param> /// <returns></returns> public Task<IApiResponse<Index>> CreateIndexAsync(Index index) { return _connection.Execute<Index>( new ApiRequest("indexes", HttpMethod.Post) { Body = index }); }
public virtual void Index(string scope, string documentType, IDocument document) { var core = GetCoreName(scope, documentType); if (!_pendingDocuments.ContainsKey(core)) { _pendingDocuments.Add(core, new List<AzureDocument>()); } Index mapping = null; var indexAlreadyCreated = false; if (!_mappings.ContainsKey(core)) { Thread.Sleep(3000); // Get mapping info mapping = Client.GetIndex(scope).Result; if (mapping != null) { indexAlreadyCreated = true; _mappings.Add(core, mapping); } } else { indexAlreadyCreated = true; mapping = _mappings[core]; } var submitMapping = false; var localDocument = new AzureDocument(); for (var index = 0; index < document.FieldCount; index++) { var field = document[index]; var key = ConvertToAzureName(field.Name.ToLower()); if (localDocument.ContainsKey(key)) { var objTemp = localDocument[key]; string[] objListTemp; var temp = objTemp as string[]; if (temp != null) { var objList = new List<string>(temp) { ConvertToOffset(field.Value).ToString() }; objListTemp = objList.ToArray(); } else { objListTemp = new string[] { objTemp.ToString(), ConvertToOffset(field.Value).ToString() }; } localDocument[key] = objListTemp; } else { if (mapping == null || !mapping.Fields.Any(x => x.Name.Equals(key))) { if (mapping == null) { mapping = new Index(scope); } var indexField = new IndexField(key, AzureTypeMapper.GetAzureSearchType(field)); indexField.IsFilterable(); if (key == ConvertToAzureName("__key")) { indexField.IsKey(); } if (field.ContainsAttribute(IndexStore.Yes)) { indexField.IsRetrievable(); } if (field.ContainsAttribute(IndexType.Analyzed)) { indexField.IsSearchable(); } if (indexField.Type != FieldType.StringCollection) { indexField.IsSortable(); } if (indexField.Type == FieldType.StringCollection || indexField.Type == FieldType.String) { if (field.ContainsAttribute(IndexType.Analyzed)) { indexField.IsSearchable(); } } mapping.Fields.Add(indexField); submitMapping = true; } if (field.ContainsAttribute(IndexDataType.StringCollection)) localDocument.Add(key, ConvertToOffset(field.Values.OfType<string>().ToArray())); else localDocument.Add(key, ConvertToOffset(field.Value)); } } // submit mapping if (submitMapping) { IApiResponse<Index> result = null; if (indexAlreadyCreated) { result = Client.UpdateIndex(mapping).Result; } else { result = Client.CreateIndex(mapping).Result; } if (!result.IsSuccess) { throw new IndexBuildException(AzureSearchHelper.FormatSearchException(result)); } } _pendingDocuments[core].Add(localDocument); // Auto commit changes when limit is reached if (AutoCommit && _pendingDocuments[core].Count > AutoCommitCount) { Commit(scope); } }
public async Task<IApiResponse<Index>> UpdateIndex(Index index) { var result = await IndexClient.UpdateIndexAsync(index).ConfigureAwait(false); return result; }
/// <summary> /// Update an existing index. /// </summary> /// <param name="index"></param> /// <returns></returns> public Task<IApiResponse<Index>> UpdateIndexAsync(Index index) { return UpdateIndexAsync(index, default(CancellationToken)); }
private Index GetIndexDefinition() { var index = new Index(IndexName) .WithStringField("id", opt => opt.IsKey().IsRetrievable().IsSearchable().IsSortable().IsFilterable()) .WithStringField("projectid", opt => opt.IsRetrievable().IsSortable().IsFilterable()) .WithStringField("title", opt => opt.IsRetrievable().IsSearchable()) .WithStringField("status", opt => opt.IsRetrievable().IsSearchable().IsSortable().IsFilterable()) .WithDateTimeField("lastupdatedate", opt => opt.IsSortable().IsFilterable()) .WithStringField("details", opt => opt.IsSearchable()) .WithStringCollectionField("tags", opt => opt.IsRetrievable().IsSearchable().IsFilterable()) .WithStringCollectionField("events", opt => opt.IsSearchable()); index.ScoringProfiles = new Collection<ScoringProfile> { new ScoringProfile { Name = "fieldBooster", Text = new ScoringProfileText { Weights = new Dictionary<string, double> { {"id", 3D}, {"tags", 2.5D}, {"title", 2D}, {"events", 0.75D} } }, Functions = { new ScoringProfileFunction { Type = ScoringProfileFunctionType.Freshness, FieldName = "lastupdatedate", Boost = 1.25d, Interpolation = InterpolationType.Quadratic, Freshness = new ScoringProfileFunctionFreshness { BoostingDuration = new TimeSpan(5, 0, 0) } } } } }; index.DefaultScoringProfile = "fieldBooster"; return index; }