Я пытаюсь создать запрос функции elessearch function_score, используя функцию NEST (функция gauss), и иметь объект геоточечного объекта для передачи как «origin», однако метод «Происхождение» в NEST принимает только строку, результат elasticsearch не может проанализировать запрос. Как написать запрос в NEST, чтобы Elasticsearch мог его правильно разобрать?Как передать объект методу «Происхождение» в NEST (запрос FunctionScore)?
var originLoc = JsonConvert.SerializeObject(userLocation.GeoCenter);
var searchDesc = new SearchDescriptor<MyCustomType>().Query(q => q.FunctionScore(fs => fs.Functions(func => func.Gauss("geoCenter", gs => gs.Origin(originLoc).Offset("1km").Scale("500m").Decay(0.99)))));
НЕСТА передает код, указанный выше, чтобы elasticsearch, как это, который elasticsearch не может разобрать (происхождение обрабатывается как строка).
"query": {
"function_score": {
"functions": [
{
"gauss": {
"geoCenter": {
"origin": "{\"lat\":29.745703,\"lon\":-95.740514}", //<-- string
"scale": "500m",
"offset": "1km",
"decay": 0.99
}
}
}
]
}
}
Ниже приведен корректный запрос, Elasticsearch может работать (происхождение обрабатывается как точка гео объекта)
"query": {
"function_score": {
"functions": [
{
"gauss": {
"geoCenter": {
"origin": { //<----- geo point serialized object
"lon": -95.740514,
"lat": 29.745703
},
"scale": "500m",
"offset": "1km",
"decay": 0.99
}
}
}
]
}