【发布时间】:2016-03-10 12:49:25
【问题描述】:
我想应用“距离带”。我不只是简单地按距离排序,而是希望 5 英里内的文档首先出现,然后是 5-10 英里的文档,然后是 10-15 英里、15-25 英里、25-50 英里、50+ 英里的文档。 (并且在每个距离范围内,它们将按其他标准排序)。
我阅读了关于 function_score 衰减的内容,但我认为它不太符合目的。
你会建议如何去做?提升?
【问题讨论】:
标签: elasticsearch
我想应用“距离带”。我不只是简单地按距离排序,而是希望 5 英里内的文档首先出现,然后是 5-10 英里的文档,然后是 10-15 英里、15-25 英里、25-50 英里、50+ 英里的文档。 (并且在每个距离范围内,它们将按其他标准排序)。
我阅读了关于 function_score 衰减的内容,但我认为它不太符合目的。
你会建议如何去做?提升?
【问题讨论】:
标签: elasticsearch
实现此目的的一种方法是使用geo_distance 聚合来定义波段,然后在每个波段中使用带有某种排序标准的top_hits。
看起来像这样。您需要更改位置字段 (location) 和排序字段 (name) 以匹配您的:
{
"size": 0,
"aggs": {
"rings": {
"geo_distance": {
"field": "location",
"origin": "52.3760, 4.894",
"ranges": [
{
"to": 5
},
{
"from": 5, "to": 10
},
{
"from": 10, "to": 15
},
{
"from": 15, "to": 25
},
{
"from": 25, "to": 50
},
{
"from": 50
}
]
},
"aggs": {
"hits": {
"top_hits": {
"size": 5,
"sort": {
"name": "asc"
}
}
}
}
}
}
}
【讨论】: