官方Nest使用繁琐、调用不方便,所有自己写了一套扩展类,使代码书写更简洁、调用更方便,操作更简单;请前往nuget搜索:Simple.Elasticsearch
1、ElasticSearchIndex特性介绍
- IndexName --索引名称
- AliasNames --别名
- ReplicasCount --分片数量
- ShardsCount --副本数量
- Format --索引名格式(默认yyyy_MM)
2、创建es实体,并继承IDocument,标记为es实体类
/// <summary>
/// 会员订单
/// </summary>
[ElasticSearchIndex("user_order", AliasNames = new[] { "user_order" })]
public class UserOrder : IDocument
{
/// <summary>
/// 订单ID
/// </summary>
public string OrderID { get; set; }
/// <summary>
/// 会员ID
/// </summary>
public int UserID { get; set; }
/// <summary>
/// 下单金额
/// </summary>
public decimal Money { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
}
3、利用扩展类实现新增、查询操作
IElasticClient client = new ElasticClient(new Uri("localhost:9100"));
//新增
client.Insert(new UserOrder { CreateTime = DateTime.Now, Money = 100, OrderID = "123456789", UserID = 1 });
//查询会员1的并且金额大于100的订单,query仅拼接查询语句,没有进行真实查询
var query = client.Query<UserOrder>(c => c.Where(1, t => t.UserID),
c => c.Where(100, t => t.Money, ExpressionType.GreaterThanOrEqual));
//此处乃真实查询数据
var list = client.Search(query).Documents.ToList();
//根据订单ID查询
var order = client.FirstOrDefault<UserOrder>(c => c.Where("123456789", t => t.OrderID));
//查询订单是否存在
bool exists = client.Any<UserOrder>(c => c.Where("123456789", t => t.OrderID));
//查询会员订单总数
int count = client.Count<UserOrder>(c => c.Where(1, t => t.UserID));