鍍金池/ 教程/ Java/ 按距離排序
創(chuàng)建索引
文檔局部更新
映射
查詢與過(guò)濾條件的合并
取回階段
查詢地理形狀
相關(guān)性簡(jiǎn)介
動(dòng)態(tài)索引
處理沖突
geohash單元聚合器
主分片和復(fù)制分片如何交互
自定義分析器
下一步
過(guò)濾順序
空集群
數(shù)據(jù)吞吐
地理坐標(biāo)點(diǎn)
嵌套-映射
動(dòng)態(tài)映射
在查詢中使用已索引的形狀
局部更新文檔
包含,而不是相等
范圍
檢索文檔
映射及分析
結(jié)語(yǔ)
結(jié)構(gòu)化查詢 Query DSL
驗(yàn)證查詢
查找準(zhǔn)確值
Geohashes
結(jié)構(gòu)化搜索
復(fù)合核心字段類型
嵌套-集合
與Elasticsearch交互
請(qǐng)求體查詢
自定義動(dòng)態(tài)索引
簡(jiǎn)易搜索
索引一個(gè)文檔
地理形狀
緩存地理位置過(guò)濾器
多文檔模式
  • 1.
分布式搜索的執(zhí)行方式
安裝Elasticsearch
地理位置聚合
分析和分析器
元數(shù)據(jù):_all 字段
地理坐標(biāo)盒模型過(guò)濾器
類型和映射
合并段
查詢多個(gè)準(zhǔn)確值
嵌套-查詢
  • 1.
為什么是奇怪的格式?
Geohashes 映射
關(guān)于緩存
開(kāi)始第一步
為了搜索,你懂的
分布式的特性
添加索引
確切值(Exact values) vs. 全文文本(Full text)
掃描和滾屏
相關(guān)性排序
教程小結(jié)
數(shù)據(jù)字段
增加故障轉(zhuǎn)移
按距離排序
索引管理
分布式文檔存儲(chǔ)
geohash單元過(guò)濾器
嵌套排序
檢索多個(gè)文檔
新建、索引和刪除文檔
Geohashes
檢索文檔
減少內(nèi)存占用
重新索引數(shù)據(jù)
檢索文檔
按距離聚合
什么是文檔?
繼續(xù)擴(kuò)展
集群健康
入門
映射(mapping)
近實(shí)時(shí)搜索
地理形狀的過(guò)濾與緩存
集群內(nèi)部工作方式
應(yīng)對(duì)故障
范圍(邊界)聚合器
分析
分頁(yè)
刪除文檔
倒排索引
索引地理形狀
嵌套-對(duì)象
  • 1.
橫向擴(kuò)展
查詢階段
元數(shù)據(jù):_source 字段
多索引和多類別
路由文檔到分片
索引設(shè)置
williamzhao
多值字段字符串排序
創(chuàng)建一個(gè)新文檔
配置分析器
地理形狀
更新整個(gè)文檔
面向文檔
處理 Null 值
映射地理形狀
使文本可以被搜索
索引別名和零停機(jī)時(shí)間
通過(guò)地理坐標(biāo)點(diǎn)過(guò)濾
地理距離過(guò)濾器
搜索——基本的工具
空搜索
搜索選項(xiàng)
更新時(shí)的批量操作
最重要的查詢過(guò)濾語(yǔ)句
結(jié)語(yǔ)
組合過(guò)濾
地理位置聚合
根對(duì)象
默認(rèn)映射
文檔 ID
持久化變更
檢查文檔是否存在
入門
地理坐標(biāo)點(diǎn)

按距離排序

按距離排序

檢索結(jié)果可以按跟指定點(diǎn)的距離排序:

提示 當(dāng)你可以can)按距離排序時(shí),按距離打分(scoring-by-distance)通常是一個(gè)更好的解決方案。

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": { <1>
          "lat":  40.715,
          "lon": -73.998
        },
        "order":         "asc",
        "unit":          "km", <2>
        "distance_type": "plane" <3>
      }
    }
  ]
}
  • 計(jì)算每個(gè)文檔中 `location` 字段與指定的 `lat/lon` 點(diǎn)間的距離。
  • 以 `公里`(`km`)為單位,將距離設(shè)置到每個(gè)返回結(jié)果的 `sort` 鍵中。
  • 使用快速但精度略差的`平面`(`plane`)計(jì)算方式。

你可能想問(wèn):為什么要制定距離的單位unit)呢? 用于排序的話,我們并不關(guān)心比較距離的尺度是英里,公里還是光年。 原因是,這個(gè)用于排序的值會(huì)設(shè)置在每個(gè)返回結(jié)果的 sort 元素中。


...
  "hits": [
     {
        "_index": "attractions",
        "_type": "restaurant",
        "_id": "2",
        "_score": null,
        "_source": {
           "name": "New Malaysia",
           "location": {
              "lat": 40.715,
              "lon": -73.997
           }
        },
        "sort": [
           0.08425653647614346 <1>
        ]
     },
...
  • 賓館距離我們的指定位置距離是 0.084km。
  • 你可以通過(guò)設(shè)置單位unit)來(lái)讓返回值的形式跟你應(yīng)用中想要的匹配。

提示

地理距離排序可以對(duì)多個(gè)坐標(biāo)點(diǎn)來(lái)使用,不管(這些坐標(biāo)點(diǎn))是在文檔中還是排序參數(shù)中。 使用 sort_mode 來(lái)指定是否需要使用位置集合的 最小min),最大(max)或者平均avg)距離。 這樣就可以返回離我的工作地和家最近的朋友這樣的結(jié)果了。

按距離打分

有可能距離只是決定返回結(jié)果排序的唯一重要因素,不過(guò)更常見(jiàn)的情況是距離會(huì)和其它因素, 比如全文檢索匹配度,流行程度或者價(jià)格一起決定排序結(jié)果。

遇到這種場(chǎng)景你需要在查詢分值計(jì)算(function_score query)中指定方式讓我們把這些因子處理得到一個(gè)綜合分。 decay-functions中有個(gè)一個(gè)例子就是地理距離影響排序得分的。

另外按距離排序還有個(gè)缺點(diǎn)就是性能:需要對(duì)每一個(gè)匹配到的文檔都進(jìn)行距離計(jì)算。 而 function_score請(qǐng)求,在 rescore phase階段有可能只需要對(duì)前 n 個(gè)結(jié)果進(jìn)行計(jì)算處理。