http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 6324|回复: 4

[搜索引擎] 39-Elasticsearch 按距离排序

[复制链接]
发表于 2019-1-8 08:52:04 | 显示全部楼层 |阅读模式
按距离排序

检索结果可以按与指定点的距离排序 :

提示
当你 可以 按距离排序时, 按距离打分 通常是一个更好的解决方案。
[C#] 纯文本查看 复制代码
GET /attractions/restaurant/_search

{

  "query": {

    "filtered": {

      "filter": {

        "geo_bounding_box": {

          "type":       "indexed",

          "location": {

            "top_left": {

              "lat":  40.8,

              "lon": -74.0

            },

            "bottom_right": {

              "lat":  40.4,

              "lon": -73.0

            }

          }

        }

      }

    }

  },

  "sort": [

    {

      "_geo_distance": {

        "location": { 

          "lat":  40.715,

          "lon": -73.998

        },

        "order":         "asc",

        "unit":          "km", 

        "distance_type": "plane" 

      }

    }

  ]

}



计算每个文档中 location 字段与指定的 lat/lon 点间的距离。

将距离以 km 为单位写入到每个返回结果的 sort 键中。

使用快速但精度略差的 plane 计算方式。

你可能想问:为什么要制定距离的 单位 呢?用于排序的话,我们并不关心比较距离的尺度是英里、公里还是光年。 原因是,这个用于排序的值会设置在每个返回结果的 sort 元素中。

[C#] 纯文本查看 复制代码
...

  "hits": [

     {

        "_index": "attractions",

        "_type": "restaurant",

        "_id": "2",

        "_score": null,

        "_source": {

           "name": "New Malaysia",

           "location": {

              "lat": 40.715,

              "lon": -73.997

           }

        },

        "sort": [

           0.08425653647614346 

        ]

     },

...



餐厅到我们指定的位置距离是 0.084km。

你可以通过设置 单位 ( unit )来让返回值的形式,匹配你应用中需要的。

提示
地理距离排序可以对多个坐标点来使用,不管(这些坐标点)是在文档中还是排序参数中。使用 sort_mode 来指定是否需要使用位置集合的 最小 ( min ) 最大 ( max )或者 平均 ( avg )距离。 如此就可以返回 “离我的工作地和家最近的朋友” 这样的结果了。

按距离打分

有可能距离是决定返回结果排序的唯一重要因素,不过更常见的情况是距离会和其它因素,比如全文检索匹配度、流行程度或者价格一起决定排序结果。

遇到这种场景你需要在 功能评分查询 中指定方式让我们把这些因子处理后得到一个综合分。 越近越好 中有个一个例子就是介绍地理距离影响排序得分的。

另外按距离排序还有个缺点就是性能:需要对每一个匹配到的文档都进行距离计算。而 function_score 查询,在 rescore 语句 中可以限制只对前 n 个结果进行计算。



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2019-1-8 09:03:43 | 显示全部楼层
发表于 2019-1-8 09:39:35 | 显示全部楼层
强烈支持楼主ing……
发表于 2019-1-8 14:30:31 | 显示全部楼层
激动人心,无法言表!
发表于 2019-1-8 16:43:00 | 显示全部楼层
我只是路过打酱油的。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-21 06:17

© 2014-2021

快速回复 返回顶部 返回列表