Java 如何在ElasticSearch中设置高斯衰减函数的下限?
我尝试使用弹性搜索来存储地理空间数据。但是,我希望相关性得分是与某个点的距离和基于文本匹配查询的相关性的组合。例如,假设查询是黄石国家公园,但其来源是芝加哥<芝加哥的code>Portage公园更可能匹配,因为对于任何合理的距离和衰减,黄石国家公园的衰减分数将接近零,并且根本不会出现在结果中。我想做的是在衰变分数上有一个下限,这样在一定距离之外,所有结果看起来都一样 例如,下面是我的Java代码:Java 如何在ElasticSearch中设置高斯衰减函数的下限?,java,
elasticsearch,Java,
elasticsearch,我尝试使用弹性搜索来存储地理空间数据。但是,我希望相关性得分是与某个点的距离和基于文本匹配查询的相关性的组合。例如,假设查询是黄石国家公园,但其来源是芝加哥Portage公园更可能匹配,因为对于任何合理的距离和衰减,黄石国家公园的衰减分数将接近零,并且根本不会出现在结果中。我想做的是在衰变分数上有一个下限,这样在一定距离之外,所有结果看起来都一样 例如,下面是我的Java代码: queryBuilder = new FunctionScoreQueryBuilder(queryBui
queryBuilder = new FunctionScoreQueryBuilder(queryBuilder).add(
ScoreFunctionBuilders.gaussDecayFunction("search_geo_point", point.get(), "10km")
.setDecay(0.75)
.setOffset("5km"));
我想做的是,将所有距离原点大于30km的点视为相同点,并且衰减函数不再减少超过该点的分数。这可能吗?问题是,超过一定距离后,衰减函数会大大降低相关性,即使查询与文本字段完全匹配,也不会出现在结果中。我不知道Elasticsearch中的function score中实现了什么功能,尽管它非常方便 但是,您可以通过使用以下中的筛选子句,通过一个小的变通方法来实现您的目标: 通过上面的查询,您只能对30公里范围内的命中率应用高斯函数分数。在第二个filter子句中,您为所有点击定义了一个常量分数,这些点击距离更远。 请注意,您应该适当地设置include_upper和include_lower,以防止对同一元素多次打分
POST test/parks/_search
{
"query": {
"function_score": {
"query": {
"match": {
"name": "Yellowstone National park"
}
},
"functions": [
{
"gauss": {
"location": {
"origin": "41.4881832, -87.623177",
"scale": "10km",
"offset": "5km"
}
},
"filter": {
"geo_distance_range": {
"from": "0km",
"to": "30km",
"location": {
"lat": 41.881832,
"lon": -87.623177
},
"include_upper": false
}
}
},
{
"weight": ## Set appropriate weight,
"filter": {
"geo_distance_range": {
"from": "30km",
"location": {
"lat": 41.881832,
"lon": -87.623177
},
"include_lower": true
}
}
}
]
}
}
}