使用 Algolia C# 添加分面属性

Adding attributes for faceting with Algolia C#

我有一个要添加到分面的属性:ApprovalFL。当我在 Algolia 仪表板中添加构面时,它工作正常,直到我不得不重新索引,最终由于某种原因在仪表板中删除了我的构面。我在想,也许在我的代码中添加属性可以解决这个问题。我在这里找到了有关此步骤的文档:https://www.algolia.com/doc/api-reference/api-parameters/attributesForFaceting/

这是他们提供的 C# 示例:

index.SetSettings(
  JObject.Parse(@"{""attributesForFaceting"":[""author"",""filterOnly(category)"",""searchable(publisher)""]}")
);

如果我理解正确,这段代码需要进入我的后端重新索引代码(在我的 AdminController.cs 中找到):

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

顺便说下为什么要重新索引?最佳做法是仅在最初设置索引。

对于那些使用 C# .NET 的人来说,这就像将它添加到您的 Global.asax.cs 一样简单,例如对我来说:

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