using OpenSearch.Client; namespace Store.Modules.CloudProduct.Dtos { /// /// 用户收藏商品搜索文档:OpenSearch 索引中的收藏模型。 /// 一条收藏记录 = 用户 + 商品快照(标题/价格/销量/类目)+ 收藏分组, /// 文档 Id 固定为 "{user_name}:{goods_id}"(表 uk_user_goods 保证唯一),便于收藏/取消收藏时幂等覆盖与删除。 /// public class UserFavoritesSearchDocument { /// /// 文档主键(同时作为 OpenSearch 的 _id):{user_name}:{goods_id} /// [Keyword(Name = "id")] public string Id { get; set; } = string.Empty; /// /// 收藏记录自增主键(user_goods_favorites.id) /// [Number(NumberType.Long, Name = "fav_id")] public long FavId { get; set; } /// 用户名(收藏归属人,检索时强制过滤) [Keyword(Name = "user_name")] public string UserName { get; set; } = string.Empty; /// 收藏分组ID(0 表示默认分组) [Number(NumberType.Integer, Name = "group_id")] public int GroupId { get; set; } /// 收藏分组名(分组ID为0时为默认分组名) [Keyword(Name = "group_name")] public string GroupName { get; set; } = string.Empty; /// 商品编号 [Number(NumberType.Long, Name = "goods_id")] public long GoodsId { get; set; } /// 平台类型(1 PDD、2 WX) [Number(NumberType.Byte, Name = "platform")] public byte Platform { get; set; } /// 商品标题,用于分词搜索 [Text(Name = "title", Analyzer = "ik_max_word", SearchAnalyzer = "ik_smart")] public string Title { get; set; } = string.Empty; /// 缩略图 [Text(Name = "thumb_url")] public string? ThumbUrl { get; set; } /// 一级类目ID [Number(NumberType.Integer, Name = "cat_id_1")] public int? CatId1 { get; set; } /// 二级类目ID [Number(NumberType.Integer, Name = "cat_id_2")] public int? CatId2 { get; set; } /// 三级类目ID [Number(NumberType.Integer, Name = "cat_id_3")] public int? CatId3 { get; set; } /// 四级类目ID [Number(NumberType.Integer, Name = "cat_id_4")] public int? CatId4 { get; set; } /// 最低价快照(分),用于价格区间过滤和按价格排序 [Number(NumberType.Long, Name = "min_price")] public long? MinPrice { get; set; } /// 销量,用于按销量排序 [Number(NumberType.Integer, Name = "sold_quantity")] public int SoldQuantity { get; set; } /// 收藏时间,默认按此字段倒序 [Date(Name = "created_at")] public DateTime CreatedAt { get; set; } /// /// 生成文档主键:{user_name}:{goods_id} /// public static string BuildId(string userName, long goodsId) => $"{userName}:{goodsId}"; public override string ToString() => $"[Id={Id}] User={UserName} Goods={GoodsId} Group={GroupId}({GroupName}) Title={Title} Price={MinPrice} Sold={SoldQuantity}"; } }