.net core+elasticsearch实战案例
Posted 开发Web那点事
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net core+elasticsearch实战案例相关的知识,希望对你有一定的参考价值。
接上一篇这次我们来说说elasticsearch如何在.net core中的使用,通过一个地图搜索的实战案例来让大家快速入门!这里有个坑需要注意使用NEST客户端的时候,添加geo_point经纬度数据的时候,格式必须为{"lat":223,"lon":2323}这种格式,本人亲测过,有可能是NEST7.9这个版本有bug,我使用[lon,lat]这个格式是没办法反序列化的。
一、安装NEST客户端类库(官网有2个类库-低级的Elasticsearch.Net和高级的NEST,实际上NEST是基于Elasticsearch.Net的)
二、单例注入elasticsearchclient
三、查询录入一些测试数据进去并查询
ISearchResponse<TestEntity> data = null;
try
{
data =await this._elasticClient.SearchAsync<TestEntity>(s =>
s.Source(true)
.ScriptFields(sf=>sf.ScriptField("dist",sd=>sd.Source("doc['location'].arcDistance(params.lat,params.lon) * 0.001").Lang("painless").Params(new Dictionary<string, object> { ["lat"]= 39.91416 ,["lon"]= 116.402688 })))
.Query(q =>
q.FunctionScore(fs =>
fs.Query(fsq => fsq.MatchAll())
.Functions(fs =>
fs.GaussGeoLocation(geo =>
geo.Origin(new GeoLocation(39.91416, 116.402688))
.Offset("5km")
.Scale("10km")
.Field(fd => fd.Location)))
.BoostMode(FunctionBoostMode.Replace)
)
)
.Sort(ss => ss.GeoDistance(g => g.Field(p => p.Location).DistanceType(GeoDistanceType.Plane).Order(SortOrder.Ascending).Unit(DistanceUnit.Kilometers).Points(new GeoLocation(39.91416, 116.402688))))
.Size(15)
);
}
catch (Exception ex)
{
LogHelper.Log(ex);
throw;
}
return Ok(data.Documents);
打完收工!
以上是关于.net core+elasticsearch实战案例的主要内容,如果未能解决你的问题,请参考以下文章
.net core 与ELK安装Elasticsearch可视化工具
.net core使用NLog+Elasticsearch记录日志
十四.net core(.NET 6)搭建ElasticSearch(ES)系列之给ElasticSearch添加SQL插件和浏览器插件