实体类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);
}
}