我目前正在尝试使用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中为函数提供
答案 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"))
)