賞金將在 6 天后到期。此問題的答案有資格獲得 100聲望賞金。 Ash Archin希望引起對這個問題的更多關注。
我有一個名為的索引store,它包含一個嵌套物件作為串列,它是WorkTimes.
WorkTimeslist 有 open time 和 close time 并且可能不止一個OpenTimeand CloseTime。
我需要做的是根據打開時間和關閉時間對這個索引進行排序。
OpenTime需要大于當前時間,CloseTime需要小于當前時間。
到目前為止,這是我的實作:
var allfilters = new List<Func<QueryContainerDescriptor<Store>, QueryContainer>>();
if (storeCategoryIds.Any())
{
allfilters.Add(fq => fq.Terms(t => t.Field(f => f.StoreCategoryIds).Terms(storeCategoryIds)));
}
if (storeSubCategoryIds.Any())
{
allfilters.Add(fq => fq.Terms(t => t.Field(f => f.StoreSubCategoryIds).Terms(storeSubCategoryIds)));
}
var stores = await _elasticClient.SearchAsync<Store>(s => s.Index(index).From(from).Size(size)
.ScriptFields(sf => sf
.ScriptField("distance", descriptor => descriptor
.Source("doc[\u0027location\u0027].arcDistance(params.lat,params.lon)")
.Lang("painless")
.Params(p => p.Add("lat", lat).Add("lon", lng))))
.Query(query => query
.Bool(b=>b.Filter(allfilters)))
.Query(query=>query
.Bool(b => b
.Filter(filter => filter
.GeoDistance(geo => geo
.Field(f => f.Location)
.Distance(10, DistanceUnit.Kilometers).Location(lat, lng)
.DistanceType(GeoDistanceType.Arc)))
.Must(m => m
.QueryString(qs => qs
.Fields(f => f
.Fields(f1 => f1.Title))
.Query(searchQuery)))))
.Sort(sort => sort
.GeoDistance(g => g
.Field(f => f.Location)
.Order(SortOrder.Ascending)
.Points(new GeoLocation(lat, lng))
.DistanceType(GeoDistanceType.Arc)
)).Source(sr => sr.IncludeAll()));
var storesArray = stores.Documents?.ToArray();
var arrayCount = 0;
foreach (var fieldValues in stores.Fields)
{
var distance = fieldValues.Value<double>("distance");
storesArray[arrayCount].Distance = distance;
arrayCount ;
}
return storesArray?.ToList();
uj5u.com熱心網友回復:
你可以這樣做
var allfilters = new List<Func<QueryContainerDescriptor<Store>, QueryContainer>>();
if (storeCategoryIds.Any())
{
allfilters.Add(fq => fq.Terms(t => t.Field(f => f.StoreCategoryIds).Terms(storeCategoryIds)));
}
if (storeSubCategoryIds.Any())
{
allfilters.Add(fq => fq.Terms(t => t.Field(f => f.StoreSubCategoryIds).Terms(storeSubCategoryIds)));
}
var stores = await _elasticClient.SearchAsync<Store>(s => s.Index(index).From(from).Size(size)
.ScriptFields(sf => sf
.ScriptField("distance", descriptor => descriptor
.Source("doc[\u0027location\u0027].arcDistance(params.lat,params.lon)")
.Lang("painless")
.Params(p => p.Add("lat", lat).Add("lon", lng))))
.Query(query => query
.Bool(b => b.Filter(allfilters)) &&
query.Bool(b => b.Filter(filter => filter
.GeoDistance(geo => geo
.Field(f => f.Location)
.Distance(10, DistanceUnit.Kilometers).Location(lat, lng)
.DistanceType(GeoDistanceType.Arc)))
.Must(m => m
.QueryString(qs => qs
.Fields(f => f
.Fields(f1 => f1.Title))
.Query(searchQuery)))))
.Sort(sort => sort
.GeoDistance(g => g
.Field(f => f.Location)
.Order(SortOrder.Ascending)
.Points(new GeoLocation(lat, lng))
.DistanceType(GeoDistanceType.Arc)
)).Source(sr => sr.IncludeAll()));
var storesArray = stores.Documents?.ToArray();
var arrayCount = 0;
foreach (var fieldValues in stores.Fields)
{
var distance = fieldValues.Value<double>("distance");
storesArray[arrayCount].Distance = distance;
arrayCount ;
}
return storesArray?.ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/478695.html
標籤:弹性搜索
