我正在实现一个能够接收 10 个最近对象的程序。作为我使用 ElasticSearch 的数据库,我的模型看起来像这样。
[Nest.ElasticsearchType(Name = "eventelastic", IdProperty = "Id")]
public class EventElastic:BaseElastic
{
[Nest.String]
public string EventName { get; set; }
[Nest.Date]
public DateTime CreateTime { get; set; }
[Nest.String]
public string Country { get; set; }
[Nest.String]
public string City { get; set; }
[Nest.String]
public string Place { get; set; }
[Nest.Boolean]
public bool IsPrivate { get; set; }
[Nest.Boolean]
public bool IsSponsored { get; set; }
[Nest.String]
public string ImageWeb { get; set; }
[Nest.Number]
public int MaxPersons { get; set; }
[Nest.GeoPoint]
public LocationModel Location { get; set; }
}
[Nest.ElasticsearchType(Name = "location", IdProperty = "Id")]
public class LocationModel
{
public LocationModel(double lon, double lat)
{
Lon = lon;
Lat = lat;
}
public double Lon { get; set; }
public double Lat { get; set; }
}
我创建了这样的索引
connection.CreateIndex("index", s => s.Mappings(f => f.Map<EventElastic>(m => m.AutoMap().Properties(p=> p.GeoPoint(g => g.Name(n => n.Location))))));
我像这样插入新文件
var response = connection.IndexAsync<EventElastic>(model, idx => idx.Index("index"));
response.ContinueWith(t =>
{
if (!t.Result.IsValid)
{
log.Error(t.Result.ServerError.Error.Reason);
}
});
模型的所有值都已设置,并且可以正常工作。
但现在我想得到 10 公里范围内最近的 10 个。我这样查询
var geoResult = connection.Search<EventElastic>(s => s.From(0).Size(10)
.Query(query => query.Bool(b => b.Filter(filter => filter
.GeoDistance(geo => geo
.Field(f => f.Location) //<- this
.Distance("10km").Location(lon, lat)
.DistanceType(GeoDistanceType.SloppyArc)
))
)
)
);
但它不返回任何文档,但如果我将距离值设置为 10000 公里,它会返回一个文档。
我在模型中使用的数据是:LAT:47.4595248 LON:9.6385962
我在搜索中使用的位置:LAT:47.4640298 LON:9.6389685
这些地方相距100米。有人可以帮我找出代码中的错误吗?是否有可能从弹性搜索服务器获得计算出的距离?
顺便说一句:我正在设置默认索引
var settings = new ConnectionSettings(pool).DefaultIndex("index");
编辑 我发现了错误:
var geoResult = connection.Search<EventElastic>(s => s.From(0).Size(10)
.Query(query => query.Bool(b => b.Filter(filter => filter
.GeoDistance(geo => geo
.Field(f => f.Location)
.Distance("10km").Location(lat, lon) //wrong parameter
.DistanceType(GeoDistanceType.SloppyArc)
))
)
)
);
我不得不改变纬度和经度的位置。
但是我没有得到计算出的距离,有人知道我怎么能得到距离吗?
此致