c#使用Elastic.Clients.Elasticsearch 库进行ElasticSearch的增删改查操作,根据变量动态构建查询条件。

实体类Shop结构:

cs 复制代码
public class Shop
{
    public string UUID { set; get; }

    public string ItemType { set; get; }

    public long ItemId { set; get; }

    public string ItemName { set; get; }

    public long Gold { set; get; }

    public long Number { set; get; }

    public string Data { set; get; }

    public string Quality { set; get; }

    public string Category { set; get; }

    public string SellerIp { set; get; }
}

初始化客户端

cs 复制代码
var client = new ElasticsearchClient(new Uri("http://localhost:9200"));

创建索引

cs 复制代码
var response = await client.Indices.CreateAsync("dragon");

判断索引是否存在

cs 复制代码
var response = await client.Indices.ExistsAsync("dragon");

增加数据

cs 复制代码
var response = await client.IndexAsync(shop, (IndexName)"dragon");

修改数据

cs 复制代码
var response = await client.UpdateAsync<Shop, Shop>((IndexName)"dragon", 1, u => u.Doc(shop));

判断是否存在

cs 复制代码
var response = await client.ExistsAsync<Shop>(1, idx => idx.Index("dragon"));

删除数据

cs 复制代码
var response = await client.DeleteAsync((IndexName)"dragon", 1);

查询数据(根据4个变量是否为空,动态构建查询条件).其中,Term是精确匹配,Match是模糊匹配。

cs 复制代码
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    var client = new ElasticsearchClient(new Uri("http://localhost:9200"));

    string category = "";
    string quality = "";
    string itemName = "";
    string itemType = "";

    List<Action<QueryDescriptor<Shop>>> configure = new List<Action<QueryDescriptor<Shop>>>();

    if (!string.IsNullOrEmpty(quality))
    {
        configure.Add(m => m.Term(t => t.Field(f => f.Quality).Value(FieldValue.String(quality))));
    }
    if (!string.IsNullOrEmpty(category))
    {
        configure.Add(m => m.Term(t => t.Field(f => f.Category).Value(FieldValue.String(category))));
    }
    if (!string.IsNullOrEmpty(itemType))
    {
        configure.Add(m => m.Term(t => t.Field(f => f.ItemType).Value(FieldValue.String(itemType))));
    }
    if (!string.IsNullOrEmpty(itemName))
    {
        configure.Add(m => m.Match(t => t.Field(f => f.ItemName).Query(itemName)));
    }

    var response = await client.SearchAsync<Shop>(s => s
        .Index("dragon")
        .From(0)
        .Size(16)
        .Query(q =>
            q.Bool(b => b.Must(configure.ToArray()))
        )
    );

    if (response.IsValidResponse)
    {
        //本次查询获得的数据
        List<Shop> shops = response.Documents.ToList();
        //本次查询取得的数据量
        int count = response.Documents.Count;
        //满足查询条件的总数据量
        long total = response.HitsMetadata.Total.Match(x => x.Value, y => y);
    }
}
相关推荐
一个大专生的淘汰之路39 分钟前
Elasticsearch 如何确保新增文档立即可见?
elasticsearch
白雪公主的后妈1 小时前
Auto CAD二次开发——Ribbon界面(1)
ribbon·c#·cad二次开发
知秋正在9962 小时前
ElasticSearch服务端报错:system call filters failed to install
大数据·elasticsearch·搜索引擎
Byron Loong2 小时前
【C#】 RSA 密钥生成工具
c#
Elasticsearch3 小时前
Elastic Streams 介绍
elasticsearch
yngsqq4 小时前
二维异形排版、二维装箱(NPF碰撞检测)——CAD c#二次开发
开发语言·javascript·c#
切糕师学AI4 小时前
.NET 如何引用两个不同版本的dll?
c#·.net
烛阴7 小时前
不只是Public与Private:C#访问修饰符全方位解读
前端·c#
知秋正在9967 小时前
ElasticSearch服务端报错:Unrecognized VM option ‘UseAVX=2‘
大数据·elasticsearch·jenkins
秋雨雁南飞7 小时前
c# 多项目编译发布
c#