日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

深入搜索引擎原理 搜索引擎其實(shí)也是一個(gè)什么系統(tǒng)( 四 )

  • 同1、2的計(jì)算步驟,116.397 的最后6位編碼是 “11010 01011”
  • 三、合并組碼
    1. 將奇數(shù)位放經(jīng)度,偶數(shù)位放緯度,把2串編碼組合生成新串:“11100 11101 00100 01111”;
    2. 通過 Base32 編碼,每5個(gè)二進(jìn)制編碼一個(gè)數(shù),“28 29 04 15”
    3. 根據(jù) Base32 表,得到 Geo Hash 為:“WX4G”
    即最后天安門的4位 Geo Hash 為 “WX4G”,如果需要經(jīng)度更準(zhǔn)確,在對應(yīng)的經(jīng)緯度編碼粒度再往下追溯即可 。
    附:Base32 編碼圖
    深入搜索引擎原理 搜索引擎其實(shí)也是一個(gè)什么系統(tǒng)


    Geo Hash 如何用于地理搜索?
    舉個(gè)例子,搜索天安門附近 200 米的景點(diǎn),如下是天安門附近的Geo編碼
    深入搜索引擎原理 搜索引擎其實(shí)也是一個(gè)什么系統(tǒng)


    搜索過程如下:
    1. 首先確定天安門的Geo Hash為 WX4G0B,(6位區(qū)域碼約 0.34平分千米,約為長寬600米區(qū)域)
    2. 而6位編碼表示 600 米,半徑 300 米 > 要求的 200 米,搜索所有編碼為 WX4G0B 的景點(diǎn)即可
    3. 但是由于天安門處于 WX4G0B 的邊緣位置,并不一定處在正中心 。這就需要將 WX4G0B 附近的8個(gè)區(qū)域同時(shí)納入搜索,故搜索 WX4G0B、WX4G09、WX4G0C 一共9個(gè)編碼的景點(diǎn)
    4. 第3步已經(jīng)將范圍縮小到很小的一個(gè)區(qū)間,但是得到的景點(diǎn)距離并不是準(zhǔn)確的,需要在通過距離計(jì)算過濾出小于 200 米的景點(diǎn),得到最終結(jié)果 。
    由上面步驟可以看出,Geo Hash 將原本大量的距離計(jì)算,變成一個(gè)字符串檢索縮小范圍后,再進(jìn)行小范圍的距離計(jì)算,及快速又準(zhǔn)確的進(jìn)行距離搜索 。
    Geo Hash 依據(jù)的數(shù)學(xué)原理
    深入搜索引擎原理 搜索引擎其實(shí)也是一個(gè)什么系統(tǒng)


    如圖所示,我們將二進(jìn)制編碼的結(jié)果填寫到空間中,當(dāng)將空間劃分為四塊時(shí)候,編碼的順序分別是左下角00,左上角01,右下腳10,右上角11,也就是類似于Z的曲線 。當(dāng)我們遞歸的將各個(gè)塊分解成更小的子塊時(shí),編碼的順序是自相似的(分形),每一個(gè)子快也形成Z曲線,這種類型的曲線被稱為Peano空間填充曲線 。
    這種類型的空間填充曲線的優(yōu)點(diǎn)是將二維空間轉(zhuǎn)換成一維曲線(事實(shí)上是分形維),對大部分而言,編碼相似的距離也相近,但Peano空間填充曲線最大的缺點(diǎn)就是突變性,有些編碼相鄰但距離卻相差很遠(yuǎn),比如0111與1000,編碼是相鄰的,但距離相差很大 。
    深入搜索引擎原理 搜索引擎其實(shí)也是一個(gè)什么系統(tǒng)


    除Peano空間填充曲線外,還有很多空間填充曲線,如圖所示,其中效果公認(rèn)較好是Hilbert空間填充曲線,相較于Peano曲線而言,Hilbert曲線沒有較大的突變 。為什么GeoHash不選擇Hilbert空間填充曲線呢?可能是Peano曲線思路以及計(jì)算上比較簡單吧,事實(shí)上,Peano曲線就是一種四叉樹線性編碼方式 。
    Part 5、數(shù)值索引Lucene的倒排索引決定,索引內(nèi)容是一個(gè)可排序的字符串,如果要查找一個(gè)數(shù)字,那么也需要將數(shù)字轉(zhuǎn)成字符串 。這樣,檢索一個(gè)數(shù)字是沒問題的,如果需要搜索一個(gè)數(shù)值范圍,怎么做呢?
    要做范圍查找,那么要求數(shù)字轉(zhuǎn)成的字符串也是有序并單調(diào)的,但數(shù)字本身的位數(shù)是不一樣的,最簡單的版本就是前綴補(bǔ)0,比如 35, 234, 1 都補(bǔ)成 4 位,得到 0035, 0234, 0001,這樣能保證:
    數(shù)字(a) > 數(shù)字(b) ===> 字符串(a) > 字符串(b)這時(shí)候,查詢應(yīng)該用范圍內(nèi)的所有數(shù)值或查詢,比如查詢 [33, 36) 這個(gè)范圍,對應(yīng)的查詢語法是:
    33 || 34 || 35嗯看起來很好的解決了范圍查詢,但是,這樣存在3個(gè)問題:
    1. 補(bǔ)位多少合適呢?總有一個(gè)數(shù)字會超出你的補(bǔ)位范圍

      推薦閱讀