我的理解是,要在Algolia中使用PartialUpdateObject
,我需要知道objectID
。 Source
然而,在我的情况下,我并不直接知道objectID
。让我解释一下......
我有一个音乐网站,艺术家可以提交音乐,这个充满歌曲信息的JSON存储在Algolia的索引中。现在,艺术家还可以更新他们的个人资料(更改他们的艺术家姓名等)。我有两个单独的指数。一个名为Song
,其中包含所有歌曲信息,Artist
包含艺术家信息。当艺术家编辑他的个人资料以更改他的艺术家姓名时,我试图让这个变化反映在他的Artist
帐户JSON和他/她上传的所有歌曲中。如果JSON没有在歌曲方面更新,它仍然会显示他/她的旧名字......不好!
以下是Artist
JSON的样子:
{
"AccountInfoID": 94,
"AccountType": "Artist",
"DisplayName": "Unlike Pluto",
"ImageURL": "https://ucarecdn.com/81abba2d-7966-48ac-abab-79a2ecc97811/",
"UserID": "",
"objectID": "94"
}
这是Song
JSON的样子。还要注意两个json文件之间的一个常量是AccountInfoID
,这将歌曲链接到艺术家,在这种情况下与Pluto不同。 objectID
的{{1}}不同。如果我要上传另一首歌曲,除了Song
之外,以下所有值都会有所不同(只是为了澄清):
AccountInfoID
要更新Artist JSON,这没什么大不了的:
{
"ApprovalFL": true,
"FreeFL": true,
"LicenseFL": true,
"AccountInfoID": 94,
"AlbumID": 117,
"SongID": 105,
"BPM": 92,
"AccountImageURL": "https://ucarecdn.com/81abba2d-7966-48ac-abab-79a2ecc97811/",
"AccountType": "Artist",
"AlbumName": "Let It Bleed",
"Artist": "Unlike Pluto",
"FeaturedArtist": "Cristina Gatti",
"ImageURL": "https://ucarecdn.com/d60c9302-eacf-4050-920d-9d54ce93cd46/",
"iTunesURL": null,
"LabelName": "Lowly Palace",
"Title": "Let It Bleed",
"URL": "https://ucarecdn.com/b75e6e30-7082-49e5-b5d5-93d23e74af21/",
"UserID": "",
"UploadDate": "2017-12-16T01:55:22.81",
"Duration": "2017-12-16T00:03:20",
"objectID": "105"
}
然而,歌曲更新比较棘手,因为我需要能够找到该艺术家上传的所有歌曲。如上所述,我需要找到dynamic registerArtistObjs = new JObject();
registerArtistObjs.DisplayName = accountInfo.DisplayName;
registerArtistObjs.ImageURL = accountInfo.ImageURL;
registerArtistObjs.objectID = accountInfo.AccountInfoID;
var artistIndexHelper = HttpContext.Application.Get("ArtistIndexHelper") as IndexHelper<ArtistAlgoliaModel>;
artistIndexHelper.PartialUpdateObject(registerArtistObjs);
的所有歌曲,这样我才能获得歌曲JSON中的AccountInfoID: 94
和更新objectID
。这样做的最佳方法是什么,或者是否有一种我更容易丢失的方法?
这是我在使用代码来更新Song索引中的Artist名称的地方,但我不知道如何从Song索引中获取包含的所有Artist
值,例如{ {1}}:
objectID
答案 0 :(得分:0)
正如您所说,您需要能够找到该艺术家上传的所有歌曲&#34;。
如果你跟踪这个(我假设你的网站必须依赖某种数据库?),那么当艺术家更新时,你可以获取该艺术家的所有相关的songID,并从中推断出对象列表你需要更新algolia的结尾。
答案 1 :(得分:0)
我能够通过以下方式解决这个问题:
dynamic registerSongObjs = new JObject();
var songs = EntityDataAccess.GetSongsByAccountInfoID(accountInfo.AccountInfoID);
foreach (var item in songs)
{
registerSongObjs.Artist = accountInfo.DisplayName;
registerSongObjs.objectID = item.SongID;
songIndexHelper.PartialUpdateObject(registerSongObjs);
}