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