具有地理和时间高斯功能的Elasticsearch Java API功能评分查询

时间:2015-06-14 09:33:49

标签: elasticsearch

我目前正在尝试使用elasticsearch的Java API构建此功能评分查询:

{
   "query": {
      "function_score": {
         "functions": [
            {
               "gauss": {
                  "location": {
                     "origin": {
                        "lat": 52.55,
                        "lon": 13.69
                     },
                     "offset": "30km",
                     "scale": "10km",
                     "decay": 0.9
                  }
               }
            },
            {
               "gauss": {
                  "createdAt": {
                     "origin": "2015-06-14T15:50:00",
                     "scale": "8h",
                     "offset": "4h",
                     "decay": 0.75
                  }
               }
            }
         ]
      }
   }
}

但我无法找到有关java api和功能评分查询的任何文档。这就是我到目前为止所做的:

elasticsearch.client
  .prepareSearch(config.offerIndex.value)
  .setQuery(
     QueryBuilders.functionScoreQuery(
       ScoreFunctionBuilders
         .gaussDecayFunction("location", ???, ???).setDecay(0.9)
     )
  )

gaussDecayFunction的第二个和第三个参数被命名为origin和scale。但他们有任何类型,我不知道如何在那里提供我的位置和时间价值。 接下来的问题是我如何在FunctionScore Builder中为函数提供

1 个答案:

答案 0 :(得分:6)

我找到了这个解决方案,但我不确定这是否是干净的方法。如果有人可以批准,我们将不胜感激。

val lat = 52.52
val lon = 13.402

QueryBuilders
  .functionScoreQuery(
     ScoreFunctionBuilders.gaussDecayFunction("location", new GeoPoint(lat, lon), "10km")
       .setDecay(0.9)
       .setOffset("30km"))
  .add(
     ScoreFunctionBuilders.gaussDecayFunction("createdAt", new DateTime(), "8h")
       .setDecay(0.75)
       .setOffset("4h"))
)