0

NEST (ガウス関数) を使用して function_score elasticsearch クエリを作成しようとしており、「オリジン」として渡すジオ ポイント オブジェクトがありますが、NEST の「オリジン」メソッドは文字列のみを受け入れ、elasticsearch は結果を解析できません。クエリ。Elasticsearch が正しく解析できるように、NEST でクエリを作成するにはどうすればよいですか?

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)))));

NEST は上記のコードを次のように elasticsearch に渡しますが、elasticsearch はこれを解析できません (origin は文字列として解析されます)。

"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
        }
      }
    }
  ]
}
4

1 に答える 1

3

私は自分のコードにこのようなものを持っています

.Query(f => f
        .FunctionScore(fs => fs
                        .BoostMode(FunctionBoostMode.Sum)
                        .Functions(ff => ff
                            .Linear("location", d => d.Origin(origin).Scale("8km").Decay(0.33))
                        )
        )
)

どこの起源 - >var origin = object.latitude + "," + object.longitude;

于 2015-07-21T08:05:34.867 に答える