当前位置: 首页 > 面试题库 >

使用Elasticsearch函数得分查询并针对某个地理点进行衰减,是否可以设置目标距离?

李鹏
2023-03-14
问题内容

基于https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-
function-score-
query.html

,这似乎不太可能,但我想确认一下。

用简单的英语来说,我要对结果(带有地理位置的位置)进行打分,以得出它们距某个纬度,经度起点有500公里的距离。

这是令人困惑的,因为有一个名为“ offset”的参数,但是根据文档,它似乎并不是原点的偏移量(例如,距离),而是“阈值”。


问题答案:

我看到几种方法可以做到这一点:

答:一种方法是简单地按距离原点的相反顺序按距离排序。您将使用geo_distance查询,然后按距离排序。在下面的查询中,最远的文档将首先出现,即排序值是距原点的距离,并且我们以降序排序。

{
  "query": {
    "filtered": {
      "filter": {
        "geo_distance": {
          "from" : "100km",
          "to" : "200km",
          "location": {
            "lat": 10,
            "lon": 20
          }
        }
      }
    }
  },
  "sort": [
    {
      "_geo_distance": {
        "location": {
          "lat": 10,
          "lon": 20
        },
        "order": "desc",
        "unit": "km",
        "distance_type": "plane"
      }
    }
  ]
}

B.第二种方法涉及使用geo_distance_range查询以便在原点周围定义一个“环”。圆环的宽度可以某种方式象征您要在高斯函数中使用的偏移+比例(尽管不会衰减)。在这里,我们定义了一个距原点500公里的10公里宽的环,并按该环中的距离对文档进行排序。

{
  "query": {
    "filtered": {
      "filter": {
        "geo_distance_range": {
          "from": "495km",
          "to": "505km",
          "location": {
            "lat": 10,
            "lon": 20
          }
        }
      }
    }
  },
  "sort": [
    {
      "_geo_distance": {
        "location": {
          "lat": 10,
          "lon": 20
        },
        "order": "desc",
        "unit": "km",
        "distance_type": "plane"
      }
    }
  ]
}

C.最后一种方法涉及更多。我们基本上是一个“逆高斯”形后,基本上都是这个数字(33)

,但颠倒,或者这一次它更好地代表甜甜圈形状后,我们是。我们可以将上面的解决方案B与gauss仅在该环内得分的函数结合在一起。在下面的查询中,我们基本上是说,我们只对距原点约500
km的位置感兴趣,而让高斯函数仅对那些文档起作用。虽然它并不完美,但是可能足够接近您的需求。

{
  "query": {
    "filtered": {
      "filter": {
        "geo_distance_range": {
          "from": "495km",
          "to": "505km",
          "location": {
            "lat": 10,
            "lon": 20
          }
        }
      },
      "query": {
        "function_score": {
          "functions": [
            {
              "gauss": {
                "location": {
                  "origin": {
                    "lat": 10,
                    "lon": 20
                  },
                  "offset": "500km",
                  "scale": "5km"
                }
              }
            }
          ]
        }
      }
    }
  },
  "sort": {
    "_score": "desc"
  }
}


 类似资料:
  • 问题内容: 由于您无法在JSONP调用上应用自定义标头,因此如何发出跨域请求并使用jQuery应用自定义标头? 我基本上是想使用jQuery访问google文档,并且需要传递身份验证令牌: 注意:这样做的目的是 完全 绕开应用程序层。使用ruby连接到Google Data API很简单,但是在服务器端始终解析提要会占用大量资源。 问题答案: 您可以使用Google的JavaScript客户端库来

  • 问题内容: 在Python中,我看到了许多示例,其中调用了多处理,但目标仅打印了一些内容。我有一种情况,目标返回2个变量,以后需要使用。例如: 怎么办?我可以执行.start和.join,但是如何检索单个结果?我需要捕捉我执行的所有作业的返回a,b,然后对其进行处理。 问题答案: 是的,可以- 您可以使用多种方法。最简单的一种是共享。在此处查看示例:http : //eli.thegreenpla

  • 嗨,Dynamodb社区, 因此,所讨论的表是MLA_USER_AUTH。正如您所看到的,它有As分区键和As排序键。我希望能够使用用户id和电子邮件查询数据库。 有时我需要查找与电子邮件关联的用户,有时还需要查找用户ID。电子邮件和用户ID属性对于每个访问者都是唯一的。有什么办法可以做到吗? 这是我目前的查询。这显然行不通。当它抛出错误时:ValidationExc0019:查询条件错过了关键架

  • HQL是否可以对另一个查询的结果集进行选择?例如: 我可以在SQL中完成,但当我在HQL中尝试上述操作时,它只显示了语法错误“意外标记:(靠近第1行,第22列…”

  • 我正在用elasticsearch dsl/2.0.0查询Elastic搜索 https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-function-score-query.html#function-腐朽 如何用elasticsearch dsl构造线性函数查询

  • 问题内容: 尝试使用ElasticSearch创建使用距中心点的距离来影响相关性的搜索。 我不想简单地根据到点的距离进行排序,因为我希望这是可能的,因为我希望基于搜索查询的相关性也会影响结果。 我想输入一个搜索字符串,例如“ coffee”,一个纬度/经度,例如“ 38,-77”,然后根据搜索结果与“ coffee”的相关程度以及接近程度的组合来排序我的结果他们是“ 38,-77”。 谢谢! 问题