2017-12-15 8 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を置くとは思わない、私のバックエンドのコードにファセッティングのために、この属性を設定するための最良の方法は何ですか? 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に追加するのと同じくらい簡単です:

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

なぜインデックスを再作成する必要がありますか?ベストプラクティスは、最初はインデックスのみを設定することです。 C#.NETを使用してそれらのためのOK

+0

ねえダニエルは、これは新しい曲は、ユーザーがすべての時間を追加されているためであると私は希望彼らがライブに行くときに検索可能であるように。それは理にかなっていますか?検索結果を更新する良い方法はありますか? –

+0

はい、Algoliaをソング追加モジュールと統合するか、定期的に新しいソングをチェックしてインデックス作成するバックグラウンドジョブを作成することができます。 APIを使用してデータをプッシュするには、https://www.algolia.com/doc/tutorials/getting-started/quick-start-with-the-api-client/csharp/を参照してください。 #push-data。新しい曲が追加されるたびに索引を再作成する必要はありません。非効率的です。 –

関連する問題