【发布时间】:2015-03-05 09:02:27
【问题描述】:
背景:
我们有以下要求:
- 应返回数据匹配关键字。
- 数据有经度和纬度字段,结果应该接近指定的纬度。
- 返回的结果应包含距离字段,该字段指定数据中包含的给定经度和经度之间的距离。
- 应根据 MultiMatch 得分对数据进行排序。
阅读此链接Spatial Search ElasticSearch tutorial 中的教程我在 C# 中构建了以下查询。
var res = await _elasticClient
.SearchAsync<Results>(
s =>
s.Type("Data")
.Skip(skip)
.Take(limit)
.SortGeoDistance(es =>
es.Ascending().OnField("Coordinates").Unit(GeoUnit.Kilometers).PinTo(lat,lng))
.Query(
q1 =>
q1.Filtered(
f1 =>
f1.Query(q2 => q2.MultiMatch(mm => mm.OnFields(MultiMatchFieldsArray)
.Query(keyword)
.Type(TextQueryType.MostFields)))
.Filter(f2 => f2.GeoDistance("Coordinates",gf => gf.Distance(10,GeoUnit.Kilometers)
.Location(lat,lng))))));
根据教程,我必须使用 SortGeoDistance 方法来获取结果中的距离。使用 SortGeoDistance 会根据距离对结果进行排序,但需要根据 MultiMatch 分数对结果进行排序。
【问题讨论】:
标签: c# elasticsearch nest