2017-12-15 15 views
0

패싯에 추가하려는 속성이 있습니다 : ApprovalFL. Algolia 대시 보드에 패싯을 추가하면 다시 색인해야만 어떤 이유로 대시 보드에서 패싯을 삭제해야합니다. 내 코드에서 속성을 추가하면 문제가 해결 될지도 모른다고 생각했습니다.Algolia C#으로 패싯에 대한 속성 추가하기

만약 내가 제대로 이해하고,이 코드는 내 백엔드 코드를 다시 색인에 갈 필요
index.SetSettings(
    JObject.Parse(@"{""attributesForFaceting"":[""author"",""filterOnly(category)"",""searchable(publisher)""]}") 
); 

(내 AdminController.cs에 있음) : 여기

https://www.algolia.com/doc/api-reference/api-parameters/attributesForFaceting/는 그들이 제공하는 C# 예제입니다 : 여기이 단계에 대한 문서를 발견 :

public async Task<ActionResult> ReIndexData() 
{ 
    var algoliaArtistModels = Tools.BuildAlgoliaArtistModels(EntityDataAccess.GetAllAccountInfoes()); 
    var algoliaUnaffiliatedArtistModels = Tools.BuildAlgoliaArtistModels(EntityDataAccess.GetAllUnaffiliatedAccountInfo()); 
    var algoliaSongModels = Tools.BuildAlgoliaSongModels(EntityDataAccess.GetAllAcceptedSongs()); 
    var artistIndexHelper = HttpContext.Application.Get("ArtistIndexHelper") as IndexHelper<ArtistAlgoliaModel>; 
    var unaffiliatedArtistIndexHelper = HttpContext.Application.Get("UnaffiliatedArtist") as IndexHelper<ArtistAlgoliaModel>; 
    var songIndexHelper = HttpContext.Application.Get("SongIndexHelper") as IndexHelper<SongAlgoliaModel>; 
    await artistIndexHelper.OverwriteIndexAsync(algoliaArtistModels); 
    await unaffiliatedArtistIndexHelper.OverwriteIndexAsync(algoliaUnaffiliatedArtistModels); 
    await songIndexHelper.OverwriteIndexAsync(algoliaSongModels); 
    return View("AlgoliaReIndexData"); 
} 

그러나, 나는이 코드 블록에 index.setSettings을 넣어 생각하지 않는다, 내 백엔드 코드에서 패 시팅 (faceting)에 대해이 속성을 설정하는 가장 좋은 방법은 무엇입니까? ApprovalFL 속성은 내 노래 색인에 저장됩니다.

Tools.cs에 여기 어딘가에 있어야할까요?

public static SongAlgoliaModel BuildAlgoliaSongModel(Song song) 
     { 
      var model = new SongAlgoliaModel(); 
      var album = EntityDataAccess.GetAlbumByID(song.AlbumID); 
      model.AccountImageURL = album.AccountInfo.ImageURL; 
      model.AccountInfoID = album.AccountInfoID; 
      model.AccountType = album.AccountInfo.CreatorFL == true ? "Creator" : "Artist"; 
      model.AlbumID = song.AlbumID; 
      model.AlbumName = album.AlbumName; 
      model.ApprovalFL = song.ApprovalFL; 
      model.Artist = album.AccountInfo.DisplayName; 
      model.BPM = song.BPM; 
      model.Duration = song.Duration; 
      model.FeaturedArtist = song.Artist; 
      model.FreeFL = album.FreeFL; 
      model.ImageURL = album.ImageURL; 
      model.iTunesURL = album.iTunesURL; 
      model.LabelName = album.LabelName; 
      model.LicenseFL = album.LicenseFL; 
      model.SongID = song.SongID; 
      model.Title = song.Title; 
      model.UploadDate = song.UploadDate; 
      model.URL = song.URL; 
      model.UserID = album.AccountInfo.UserID; 

      return model; 
     } 
     public static List<SongAlgoliaModel> BuildAlgoliaSongModels(AccountInfo accountInfo) 
     { 
      var list = new List<SongAlgoliaModel>(); 
      var songs = EntityDataAccess.GetSongsByUserID(accountInfo.UserID).Where(x => x.ApprovalFL == true).ToList(); 
      foreach(var item in songs) 
      { 
       var model = new SongAlgoliaModel(); 
       model.AccountImageURL = item.Album.AccountInfo.ImageURL; 
       model.AccountInfoID = item.Album.AccountInfoID; 
       model.AccountType = item.Album.AccountInfo.CreatorFL == true ? "Creator" : "Artist"; 
       model.AlbumID = item.AlbumID; 
       model.AlbumName = item.Album.AlbumName; 
       model.ApprovalFL = item.ApprovalFL; 
       model.Artist = item.Album.AccountInfo.DisplayName; 
       model.BPM = item.BPM; 
       model.Duration = item.Duration; 
       model.FeaturedArtist = item.Artist; 
       model.FreeFL = item.Album.FreeFL; 
       model.ImageURL = item.Album.ImageURL; 
       model.iTunesURL = item.Album.iTunesURL; 
       model.LabelName = item.Album.LabelName; 
       model.LicenseFL = item.Album.LicenseFL; 
       model.SongID = item.SongID; 
       model.Title = item.Title; 
       model.UploadDate = item.UploadDate; 
       model.URL = item.URL; 
       model.UserID = item.Album.AccountInfo.UserID; 
       list.Add(model); 
      } 
      return list; 
     } 

답변

2

나를 위해, 예를 들어 당신의 Global.asax.cs에 추가로 간단 그 사용하여 C# .NET을 위해 OK :

var songIndexHelper = new IndexHelper<SongAlgoliaModel>(algoliaClient, "Song", "SongID"); 
songIndexHelper.SetSettings(JObject.Parse(@"{""attributesForFaceting"":[""ApprovalFL""]}")); 
0

왜 색인을 다시 생성해야합니까? 가장 좋은 방법은 처음에는 색인 만 설정하는 것입니다.

+0

이봐 다니엘이이 새로운 노래는 사용자가 추가되고 있기 때문에 모든 시간과 나는 것 그들이 살기 시작할 때 검색 가능한 것처럼. 말이 돼? 검색 결과를 업데이트하는 더 좋은 방법이 있습니까? –

+0

예, 정확하게 노래 추가 모듈에 Algolia를 통합하거나 정기적으로 새 노래를 확인하고 색인 처리하도록하는 배경 작업을 할 수 있습니다. 이제 인덱스 처리를 통해 API로 데이터를 푸시 할 수 있습니다. https://www.algolia.com/doc/tutorials/getting-started/quick-start-with-the-api-client/csharp/를 참조하십시오. # push-data. 새로운 노래가 추가 될 때마다 색인을 다시 만들 필요가 없습니다. 이는 비효율적입니다. –