日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

搜索引擎技术之概要预览

發布時間:2023/11/27 生活经验 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搜索引擎技术之概要预览 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

搜索引擎技術之概要預覽

前言

? ? 近些天在學校靜心復習功課與梳理思路(找工作的事情暫緩),趁閑暇之際,常看有關搜索引擎相關技術類的文章,接觸到不少此前未曾觸碰到的諸多概念與技術,如爬蟲,網頁抓取,分詞,索引,查詢,排序等等,更驚嘆于每一幅精彩的架構圖,特此,便有記錄下來的沖動,以作備忘。

? ? 本文從最主要的搜索引擎的概念談起,到全文檢索的概念,由網絡蜘蛛,分詞技術,系統架構,排序的解說(結合google搜索引擎的技術原理),而后到圖片搜索的原理,終于以幾個開源搜索引擎軟件的介紹結束全文。

? ? 因為本文初次接觸此類有關搜索引擎的技術,參考和借鑒了互聯網上諸多牛人的文章與作品,有不妥之處,還望諸君海涵。再者因本人見識淺薄,才疏學淺,有不論什么問題或錯誤,歡迎不吝指正。同一時候,正式進軍搜索引擎領域的學習與研究。謝謝。

1、什么是搜索引擎

? ? 搜索引擎指自己主動從因特網搜集信息,經過一定整理以后,提供給用戶進行查詢的系統。因特網上的信息浩瀚萬千,并且毫無秩序,全部的信息像汪洋上的一個個小島,網頁鏈接是這些小島之間縱橫交錯的橋梁,而搜索引擎,則為用戶繪制一幅一目了然的信息地圖,供用戶隨時查閱。

? ? 搜索引擎的工作原理以最簡單的語言描寫敘述,即是:

  1. 搜集信息:首先通過一個稱為網絡蜘蛛的機器人程序來追蹤互聯網上每一個網頁的超鏈接,因為互聯網上每一個網頁都不是單獨存在的(必存在到其他網頁的鏈接),然后這個機器人程序便由原始網頁鏈接到其他網頁,一鏈十,十鏈百,至此,網絡蜘蛛便爬滿了絕大多數網頁。
  2. 整理信息:搜索引擎整理信息的過程稱為“創建索引”。搜索引擎不僅要保存搜集起來的信息,還要將它們依照一定的規則進行編排。這樣,搜索引擎根本不用又一次翻查它全部保存的信息而迅速找到所要的資料。
  3. 接受查詢:用戶向搜索引擎發出查詢,搜索引擎接受查詢并向用戶返回資料。搜索引擎每時每刻都要接到來自大量用戶的差點兒是同一時候發出的查詢,它依照每一個用戶的要求檢查自己的索引,在極短時間內找到用戶須要的資料,并返回給用戶。
? ? 整理信息及接受查詢的過程,大量應用了文本信息檢索技術,并依據網絡超文本的特點,引入了很多其他的信息。接下來,下文便由網絡蜘蛛,分詞技術,到系統架構,排序一一介紹。

2、網絡蜘蛛

? ? 網絡蜘蛛即Web Spider,是一個非常形象的名字。把互聯網比喻成一個蜘蛛網,那么Spider就是在網上爬來爬去的蜘蛛。網絡蜘蛛是通過網頁的鏈接地址來尋找網頁,從站點某一個頁面(一般是首頁)開始,讀取網頁的內容,找到在網頁中的其他鏈接地址,然后通過這些鏈接地址尋找下一個網頁,這樣一直循環下去,直到把這個站點全部的網頁都抓取完為止。假設把整個互聯網當成一個站點,那么網絡蜘蛛就能夠用這個原理把互聯網上全部的網頁都抓取下來。

? ? 在抓取網頁的時候,網絡蜘蛛一般有兩種策略:廣度優先和深度優先(例如以下圖所看到的)。廣度優先是指網絡蜘蛛會先抓取起始網頁中鏈接的全部網頁,然后再選擇當中的一個鏈接網頁,繼續抓取在此網頁中鏈接的全部網頁。這是最經常使用的方式,因為這種方法能夠讓網絡蜘蛛并行處理,提高其抓取速度。深度優先是指網絡蜘蛛會從起始頁開始,一個鏈接一個鏈接跟蹤下去,處理完這條線路之后再轉入下一個起始頁,繼續跟蹤鏈接。這種方法有個長處是網絡蜘蛛在設計的時候比較easy。至于兩種策略的差別,下圖的說明會更加明白。


? ? 因為不可能抓取全部的網頁,有些網絡蜘蛛對一些不太重要的站點,設置了訪問的層數。比如,在上圖中,A為起始網頁,屬于0層,B、C、D、E、F屬于第1層,G、H屬于第2層,I屬于第3層。假設網絡蜘蛛設置的訪問層數為2的話,網頁I是不會被訪問到的。這也讓有些站點上一部分網頁能夠在搜索引擎上搜索到,另外一部分不能被搜索到。 對于站點設計者來說,扁平化的站點結構設計有助于搜索引擎抓取其很多其他的網頁。

3、中文分詞

? ? 下圖是我無聊之際,在百度,谷歌,有道,搜狗,搜搜,雅虎中搜索:結構之法的搜索結果比較(讀者能夠永久在百度或谷歌中搜索:結構之法4個字,即可進入本博客):

? ? 從上圖能夠看出,百度,谷歌,搜狗,搜搜,雅虎都在第一個選項鏈接到了本博客--結構之法算法之道,從上面的搜索結果來看,百度給的結果是最令我愜意的(幾個月前,谷歌的搜索結果是最好的),其次是雅虎英文搜索,谷歌,而有道的搜索結果則差強人意。是什么影響了這些搜索引擎搜索的質量與相關性的程度呢?答曰:中文分詞。以下,咱們來詳細了解什么是中文分詞技術。

? ? 中文分詞技術屬于自然語言處理技術范疇,對于一句話,人能夠通過自己的知識來明白哪些是詞,哪些不是詞,但怎樣讓計算機也能理解?其處理過程就是分詞算法。
? ? 現有的分詞算法可分為三大類:基于字符串匹配的分詞方法、基于理解的分詞方法和基于統計的分詞方法。

? ? 1、基于字符串匹配的分詞方法
? ? 這樣的方法又叫做機械分詞方法,它是依照一定的策略將待分析的漢字串與一個“充分大的”機器詞典中的詞條進行配,若在詞典中找到某個字符串,則匹配成功(識別出一個詞)。依照掃描方向的不同,串匹配分詞方法能夠分為正向匹配和逆向匹配;依照不同長度優先匹配的情況,能夠分為最大(最長)匹配和最小(最短)匹配;依照是否與詞性標注過程相結合,又能夠分為單純分詞方法和分詞與標注相結合的一體化方法。經常使用的幾種機械分詞方法例如以下:
? ? 1)正向最大匹配法(由左到右的方向);
? ? 2)逆向最大匹配法(由右到左的方向);
? ? 3)最少切分(使每一句中切出的詞數最小)。

? ? 還能夠將上述各種方法相互組合,比如,能夠將正向最大匹配方法和逆向最大匹配方法結合起來構成雙向匹配法。因為漢語單字成詞的特點,正向最小匹配和逆向最小匹配一般非常少使用。一般說來,逆向匹配的切分精度略高于正向匹配,遇到的歧義現象也較少。統計結果表明,單純使用正向最大匹配的錯誤率為1/169,單純使用逆向最大匹配的錯誤率為1/245。但這樣的精度還遠遠不能滿足實際的須要。實際使用的分詞系統,都是把機械分詞作為一種初分手段,還需通過利用各種其他的語言信息來進一步提高切分的準確率。
? ? 一種方法是改進掃描方式,稱為特征掃描或標志切分,優先在待分析字符串中識別和切分出一些帶有明顯特征的詞,以這些詞作為斷點,可將原字符串分為較小的串再來進機械分詞,從而降低匹配的錯誤率。還有一種方法是將分詞和詞類標注結合起來,利用豐富的詞類信息對分詞決策提供幫助,并且在標注過程中又反過來對分詞結果進行檢驗、調整,從而極大地提高切分的準確率。

? ? 2、基于理解的分詞方法
? ? 這樣的分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同一時候進行句法、語義分析,利用句法信息和語義信息來處理歧義現象。它通常包含三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統能夠獲得有關詞、句子等的句法和語義信息來對分詞歧義進行推斷,即它模擬了人對句子的理解過程。這樣的分詞方法須要使用大量的語言知識和信息。因為漢語語言知識的籠統、復雜性,難以將各種語言信息組織成機器可直接讀取的形式,因此眼下基于理解的分詞系統還處在試驗階段。

? ? 3、基于統計的分詞方法
? ? 從形式上看,詞是穩定的字的組合,因此在上下文中,相鄰的字同一時候出現的次數越多,就越有可能構成一個詞。因此字與字相鄰共現的頻率或概率能夠較好的反映成詞的可信度。能夠對語料中相鄰共現的各個字的組合的頻度進行統計,計算它們的互現信息。定義兩個字的互現信息,計算兩個漢字X、Y的相鄰共現概率。互現信息體現了漢字之間結合關系的緊密程度。當緊密程度高于某一個閾值時,便可覺得此字組可能構成了一個詞。

? ? 這樣的方法僅僅需對語料中的字組頻度進行統計,不須要切分詞典,因而又叫做無詞典分詞法或統計取詞方法。但這樣的方法也有一定的局限性,會經常抽出一些共現頻度高、但并非詞的經常使用字組,比如“這一”、“之中的一個”、“有的”、“我的”、“很多的”等,并且對經常使用詞的識別精度差,時空開銷大。實際應用的統計分詞系統都要使用一部主要的分詞詞典(經常使用詞詞典)進行串匹配分詞,同一時候使用統計方法識別一些新的詞,即將串頻統計和串匹配結合起來,既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自己主動消除歧義的長處。

? ? 究竟哪種分詞算法的精確度更高,眼下并無定論。對于不論什么一個成熟的分詞系統來說,不可能單獨依靠某一種算法來實現,都須要綜合不同的算法。個人了解,海量科技的分詞算法就採用“復方分詞法”,所謂復方,相當于用中藥中的復方概念,即用不同的藥才綜合起來去醫治疾病,相同,對于中文詞的識別,須要多種算法來處理不同的問題。

4、系統架構

  • 全文檢索

? ? 全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢索是指對于文章中的每一個字都建立索引,檢索時將詞分解為字的組合。對于各種不同的語言而言,字有不同的含義,比方英文中字與詞實際上是合一的,而中文中字與詞有非常大分別。按詞檢索指對文章中的詞,即語義單位建立索引,檢索時按詞檢索,并且能夠處理同義項等。英文等西方文字因為依照空白切分詞,因此實現上與按字處理類似,加入同義處理也非常easy。中文等東方文字則須要切分字詞,以達到按詞索引的目的,關于這方面的問題,是當前全文檢索技術尤其是中文全文檢索技術中的難點,在此不做詳述。

? ? 全文檢索系統是依照全文檢索理論建立起來的用于提供全文檢索服務的軟件系統。一般來說,全文檢索須要具備建立索引和提供查詢的基本功能,此外現代的全文檢索系統還須要具有方便的用戶接口、面向WWW的開發接口、二次應用開發接口等等。功能上,全文檢索系統核心具有建立索引、處理查詢返回結果集、添加索引、優化索引結構等等功能,外圍則由各種不同應用具有的功能組成。結構上,全文檢索系統核心具有索引引擎、查詢引擎、文本分析引擎、對外接口等等,加上各種外圍應用系統等等共同構成了全文檢索系統。圖1.1展示了上述全文檢索系統的結構與功能。

? ? 在上圖中,我們看到:全文檢索系統中最為關鍵的部分是全文檢索引擎,各種應用程序都須要建立在這個引擎之上。一個全文檢索應用的優異程度,根本上由全文檢索引擎來決定。因此提升全文檢索引擎的效率即是我們提升全文檢索應用的根本。

  • 搜索引擎與全文檢索的差別

? ? 搜索引擎的門檻究竟有多高?搜索引擎的門檻主要是技術門檻,包含網頁數據的高速採集、海量數據的索引和存儲、搜索結果的相關性排序、搜索效率的毫秒級要求、分布式處理和負載均衡、自然語言的理解技術等等,這些都是搜索引擎的門檻。對于一個復雜的系統來說,各方面的技術固然重要,但整個系統的架構設計也相同不可忽視,搜索引擎也不例外。

? ? 搜索引擎的技術基礎是全文檢索技術,從20世紀60年代,國外對全文檢索技術就開始有研究。全文檢索通常指文本全文檢索,包含信息的存儲、組織、表現、查詢、存取等各個方面,其核心為文本信息的索引和檢索,一般用于企事業單位。隨著互聯網信息的發展,搜索引擎在全文檢索技術上逐漸發展起來,并得到廣泛的應用,但搜索引擎還是不同于全文檢索。搜索引擎和常規意義上的全文檢索主要差別有以下幾點:
  1、數據量
  傳統全文檢索系統面向的是企業本身的數據或者和企業相關的數據,一般索引庫規模多在GB級,數據量大的也僅僅有幾百萬條;但互聯網網頁搜索須要處理幾十億的網頁,搜索引擎的策略都是採用server群集和分布式計算技術。
  2、內容相關性
  信息太多,查準和排序就特別重要,Google等搜索引擎採用網頁鏈接分析技術,依據互聯網上網頁被鏈接次數作為重要性評判的依據;但全文檢索的數據源中相互鏈接的程度并不高,不能作為判別重要性的依據,僅僅能基于內容的相關性排序。
  3、安全性
  互聯網搜索引擎的數據來源都是互聯網上公開的信息,并且除了文本正文以外,其他信息都不太重要;但企業全文檢索的數據源都是企業內部的信息,有等級、權限等限制,對查詢方式也有更嚴格的要求,因此其數據通常會安全和集中地存放在數據倉庫中以保證數據安全和管理的要求。
  4、個性化和智能化

  搜索引擎面向的是互聯網訪問者,因為其數據量和客戶數量的限制,自然語言處理技術、知識檢索、知識挖掘等計算密集的智能計算技術非常難應用,這也是眼下搜索引擎技術努力的方向;而全文檢索數據量小,檢索需求明白,客戶量少,在智能化和個性可走得更遠。

  • 搜索引擎的系統架構

? ? 這里主要針對全文檢索搜索引擎的系統架構進行說明,下文中提到的搜索引擎假設沒有特殊說明也是指全文檢索搜索引擎。搜索引擎的實現原理,能夠看作四步:從互聯網上抓取網頁→建立索引數據庫→在索引數據庫中搜索→對搜索結果進行處理和排序。  
  1、從互聯網上抓取網頁
  利用能夠從互聯網上自己主動收集網頁的網絡蜘蛛程序,自己主動訪問互聯網,并沿著不論什么網頁中的全部URL爬到其他網頁,重復這過程,并把爬過的全部網頁收集到server中。

  2、建立索引數據庫
  由索引系統程序對收集回來的網頁進行分析,提取相關網頁信息(包含網頁所在URL、編碼類型、頁面內容包含的關鍵詞、關鍵詞位置、生成時間、大小、與其他網頁的鏈接關系等),依據一定的相關度算法進行大量復雜計算,得到每一個網頁針對頁面內容中及超鏈中每一個關鍵詞的相關度(或重要性),然后用這些相關信息建立網頁索引數據庫。

  3、在索引數據庫中搜索
  當用戶輸入關鍵詞搜索后,分解搜索請求,由搜索系統程序從網頁索引數據庫中找到符合該關鍵詞的全部相關網頁。

  4、對搜索結果進行處理排序
  全部相關網頁針對該關鍵詞的相關信息在索引庫中都有記錄,僅僅需綜合相關信息和網頁級別形成相關度數值,然后進行排序,相關度越高,排名越靠前。最后由頁面生成系統將搜索結果的鏈接地址和頁面內容摘要等內容組織起來返回給用戶。

  下圖是一個典型的搜索引擎系統架構圖,搜索引擎的各部分都會相互交錯相互依賴。其處理流程依照例如以下描寫敘述:

  “網絡蜘蛛”從互聯網上抓取網頁,把網頁送入“網頁數據庫”,從網頁中“提取URL”,把URL送入“URL數據庫”,“蜘蛛控制”得到網頁的URL,控制“網絡蜘蛛”抓取其他網頁,重復循環直到把全部的網頁抓取完畢。

  系統從“網頁數據庫”中得到文本信息,送入“文本索引”模塊建立索引,形成“索引數據庫”。同一時候進行“鏈接信息提取”,把鏈接信息(包含錨文本、鏈接本身等信息)送入“鏈接數據庫”,為“網頁評級”提供依據。

  “用戶”通過提交查詢請求給“查詢server”,server在“索引數據庫”中進行相關網頁的查找,同一時候“網頁評級”把查詢請求和鏈接信息結合起來對搜索結果進行相關度的評價,通過“查詢server”依照相關度進行排序,并提取關鍵詞的內容摘要,組織最后的頁面返回給“用戶”。

  • 搜索引擎的索引和搜索

? ? 以下咱們以Google搜索引擎為例主要介紹搜索引擎的數據索引和搜索過程。

  數據的索引分為三個步驟:網頁內容的提取、詞的識別、標引庫的建立。

  互聯網上大部分信息都是以HTML格式存在,對于索引來說,僅僅處理文本信息。因此須要把網頁中文本內容提取出來,過濾掉一些腳本標示符和一些沒用的廣告信息,同一時候記錄文本的版面格式信息。詞的識別是搜索引擎中非常關鍵的一部分,通過字典文件對網頁內的詞進行識別。對于西文信息來說,須要識別詞的不同形式,比如:單復數、過去式、組合詞、詞根等,對于一些亞洲語言(中文、日文、韓文等)須要進行分詞處理。識別出網頁中的每一個詞,并分配唯一的wordID號,用于為數據索引中的標引模塊服務。

  標引庫的建立是數據索引中結構最復雜的一部分。一般須要建立兩種標引:文檔標引和關鍵詞標引。文檔標引分配每一個網頁一個唯一的docID號,依據docID標引出在這個網頁中出現過多少過wordID,每一個wordID出現的次數、位置、大寫和小寫格式等,形成docID相應wordID的數據列表;關鍵詞標引事實上是對文檔標引的逆標引,依據wordID標引出這個詞出如今那些網頁(用wordID表示),出如今每一個網頁的次數、位置、大寫和小寫格式等,形成wordID相應docID的列表。

  搜索的處理過程是對用戶的搜索請求進行滿足的過程,通過用戶輸入搜索keyword,搜索server相應關鍵詞字典,把搜索關鍵詞轉化為wordID,然后在標引庫中得到docID列表,對docID列表進行掃描和wordID的匹配,提取滿足條件的網頁,然后計算網頁和關鍵詞的相關度,依據相關度的數值返回前K篇結果(不同的搜索引擎每頁的搜索結果數不同)返回給用戶。假設用戶查看的第二頁或者第多少頁,又一次進行搜索,把排序結果中在第K+1到2*K的網頁組織返回給用戶。其處理流程例如以下圖所看到的:

5、排序技術

  • Google成功的秘密
? ? 到2004年為止,Google( http://www.google.com )已經連續兩年被評為全球第一品牌,Google成立僅五年時間,最初僅僅是兩個斯坦福大學學生的研究項目。這不能不說是一個奇跡,就像比爾?蓋茨創制奇跡一樣。比爾?蓋茨能創造奇跡,是因為他看準了個人計算機軟件市場的趨勢,所以創建的公司叫Microsoft(微軟):Micro(小)Soft(軟件)。那么Google呢?在Google出來之前已經有一些非常有成就的搜索引擎公司,事實上力也非常強,看來不僅僅是Google看見了搜索的趨勢。Google究竟成功的秘密在哪兒?

? ? Google的成功有很多因素,最重要的是Google對搜索結果的排序比其他搜索引擎都要好。Google保證讓絕大部分用搜索的人,都能在搜索結果的第一頁找到他想要的結果。客戶得到了滿足,下一次還過來,并且會向其他人介紹,這一來一往,使用的人就多了。所以Google在沒有做不論什么廣告的前提下,讓自己成為了全球最大的品牌。Google究竟採用了哪種排序技術?PageRank,即網頁級別。

? ? Google有一個創始人叫Larry Page,據說PageRank的專利是他申請的,于是依據他的名字就有了Page Rank。國內也有一家非常成功的搜索引擎公司,叫百度( http://www.baidu.com )。百度的創始人李彥宏說,早在1996年他就申請了名為超鏈分析的專利,PageRank的原理和超鏈分析的原理是一樣的,并且PageRank眼下還在Paten-pending(專利申請中)。言下之意是這里面存在專利全部權的問題。這里不討論專利全部權,僅僅是從中可看出,成功搜索引擎的排序技術,就其原理上來說都差點兒相同,那就是鏈接分析。超鏈分析和PageRank都屬于鏈接分析。

? ? 鏈接分析究竟為何物?因為李彥宏的超鏈分析沒有詳細的介紹,筆者唯一看過的就是在美國專利局站點上關于李彥宏的專利介紹。PageRank的介紹倒是不少,并且眼下Google畢竟是全球最大的搜索引擎,這里以PageRank為代表,詳細介紹鏈接分析的原理。
  • PageRank揭秘
? ? PageRank的原理類似于科技論文中的引用機制:誰的論文被引用次數多,誰就是權威。說的更白話一點:張三在談話中提到了張曼玉,李四在談話中也提到張曼玉,王五在談話中還提到張曼玉,這就說明張曼玉一定是非常有名的人。在互聯網上,鏈接就相當于“引用”,在B網頁中鏈接了A,相當于B在談話時提到了A,假設在C、D、E、F中都鏈接了A,那么說明A網頁是最重要的,A網頁的PageRank值也就最高。

? ? 怎樣計算PageRank值有一個簡單的公式 :

? ? 當中:系數為一個大于0,小于1的數。一般設置為0.85。網頁1、網頁2至網頁N表示全部鏈接指向A的網頁。

由以上公式能夠看出三點 :

  1. 鏈接指向A的網頁越多,A的級別越高。即A的級別和指向A的網頁個數成正比,在公式中表示,N越大, A的級別越高;
  2. 鏈接指向A的網頁,其網頁級別越高, A的級別也越高。即A的級別和指向A的網頁自己的網頁級別成正比,在公式中表示,網頁N級別越高, A的級別也越高;
  3. 鏈接指向A的網頁,其鏈出的個數越多,A的級別越低。即A的級別和指向A的網頁自己的網頁鏈出個數成反比,在公式中現實,網頁N鏈出個數越多,A的級別越低。
? ? 每一個網頁有一個PageRank值,這樣形成一個巨大的方程組,對這個方程組求解,就能得到每一個網頁的PageRank值。互聯網上有上百億個網頁,那么這個方程組就有上百億個未知數,這個方程雖然是有解,但計算畢竟太復雜了,不可能把這全部的頁面放在一起去求解的。對詳細的計算方法有興趣的朋友能夠去參考一些數值計算方面的書。

? ? 總之,PageRank有效地利用了互聯網所擁有的龐大鏈接構造的特性。 從網頁A導向網頁B的鏈接,用Google創始人的話講,是頁面A對頁面B的支持投票,Google依據這個投票數來推斷頁面的重要性,但Google除了看投票數(鏈接數)以外,對投票者(鏈接的頁面)也進行分析。「重要性」高的頁面所投的票的評價會更高,因為接受這個投票頁面會被理解為「重要的物品」。

6、圖片搜索原理

? ? 早有網友阮一峰介紹了一個簡單的圖片搜索原理,可分為以下幾步:

  1. 縮小尺寸。將圖片縮小到8x8的尺寸,總共64個像素。這一步的作用是去除圖片的細節,僅僅保留結構、明暗等基本信息,摒棄不同尺寸、比例帶來的圖片差異。
  2. 簡化色彩。將縮小后的圖片,轉為64級灰度。也就是說,全部像素點總共僅僅有64種顏色。
  3. 計算平均值。計算全部64個像素的灰度平均值。
  4. 比較像素的灰度。將每一個像素的灰度,與平均值進行比較。大于或等于平均值,記為1;小于平均值,記為0。
  5. 計算哈希值。將上一步的比較結果,組合在一起,就構成了一個64位的整數,這就是這張圖片的指紋。組合的次序并不重要,僅僅要保證全部圖片都採用相同次序即可了。
? ? 這樣的方法對于尋找一模一樣的圖片是有效的,但并不能夠去搜索“類似”的照片,也不能局部搜索,比方從一個人的單人照找到這個人與別人的合影。這些Google Images都能做到。

? ? 事實上早在2008年,Google發布了一篇圖片搜索的論文(PDF版),和文本搜索的思路是一樣的:

  1. 對于每張圖片,抽取其特征。這和文本搜索對于網頁進行分詞類似。
  2. 對于兩張圖片,其相關性定義為其特征的類似度。這和文本搜索里的文本相關性也是差點兒相同的。
  3. 圖片一樣有image rank。文本搜索中的page rank依靠文本之間的超鏈接。圖片之間并不存在這樣的超鏈接,image rank主要依靠圖片之間的類似性(兩張圖片類似,便覺得它們之間存在超鏈接)。具有很多其他類似圖片的圖片,其image rank更高一些。

7、開源搜索引擎

全文檢索引擎 Sphinx

? ? 關注本博客的讀者不知是否還記得以前出如今這篇文章從幾幅架構圖中偷得半點海量數據處理經驗中的兩幅圖,例如以下所看到的:

? ? 上圖出自俄羅斯的開源全文搜索引擎軟件Sphinx,單一索引最大可包含1億條記錄,在1千萬條記錄情況下的查詢速度為0.x秒(毫秒級)。Sphinx創建索引的速度為:創建100萬條記錄的索引僅僅需3~4分鐘,創建1000萬條記錄的索引能夠在50分鐘內完畢,而僅僅包含最新10萬條記錄的增量索引,重建一次僅僅需幾十秒。

基于以上幾點,一網友回顧未來-張宴設計出了這套搜索引擎架構。在生產環境執行了一周,效果非常不錯。有時間我會專為配合Sphinx搜索引擎,開發一個邏輯簡單、速度快、占用內存低、非表鎖的MySQL存儲引擎插件,用來取代MyISAM引擎,以解決MyISAM存儲引擎在頻繁更新操作時的鎖表延遲問題。另外,分布式搜索技術上已無不論什么題。

?

? ? Sphinx是一個基于SQL的全文檢索引擎,能夠結合MySQL,PostgreSQL做全文搜索,它能夠提供比數據庫本身更專業的搜索功能,使得應用程序更easy實現專業化的全文檢索。Sphinx特別為一些腳本語言設計搜索API接口,如PHP,Python,Perl,Ruby等,同一時候為MySQL也設計了一個存儲引擎插件。

C++檢索引擎 Xapian

? ? Xapian是一個用C++編寫的全文檢索程序,他的作用類似于Java的lucene。雖然在Java世界lucene已經是標準的全文檢索程序,可是C/C++世界并沒有相應的工具,而Xapian則填補了這個缺憾。?
? ? Xapian的api和檢索原理和lucene在非常多方面都非常類似,可是也有一些地方存在不同,詳細請看Xapian自己的文檔:http://www.xapian.org/docs/?
? ? Xapian除了提供原生的C++編程接口之外,還提供了Perl,PHP,Python和Ruby編程接口和相應的類庫,所以你能夠直接從自己喜歡的腳本編程語言當中使用Xapian進行全文檢索了。

Java搜索引擎 Lucene

? ? Lucene是一套用于全文檢索和搜尋開源程式庫,由Apache軟件基金會支持和提供。Lucene提供了一個簡單確強大的應用程式接口,能夠做全文索引和搜尋,在Java開發環境里Lucene是一個成熟的免費開放源碼工具;就其本身而論,Lucene是如今并且是這幾年,最受歡迎的免費java資訊檢索程式庫。人們經常提到資訊檢索程式庫,就像是搜尋引擎,可是不應該將資訊檢索程式庫與網搜索引擎相混淆。

? ? Lucene最初是由Doug Cutting所撰寫的,是一位資深全文索引/檢索專家,以前是V-Twin搜索引擎的主要開發人員,后來在Excite擔任高級系統架構設計師,眼下從事 于一些INTERNET底層架構的研究。他貢獻出Lucene的目標是為各種中小型應用程式加入全文檢索功能。

C++搜索引擎 CLucene

? ? CLucene是Lucene的一個C++端口,Lucene是上面所講到的一個基于java的高性能的全文搜索引擎。CLucene因為使用C++編寫,所以理論上要比lucene快。

搜索引擎 Nutch

? ? Nutch?是一個開源Java?實現的搜索引擎。它提供了我們執行自己的搜索引擎所需的全部工具。包含全文搜索和Web爬蟲。

? ? 雖然Web搜索是漫游Internet的基本要求, 可是現有web搜索引擎的數目卻在下降. 并且這非常有可能進一步演變成為一個公司壟斷了差點兒全部的web搜索為其謀取商業利益.這顯然 不利于廣大Internet用戶.

? ? Nutch為我們提供了這樣一個不同的選擇. 相對于那些商用的搜索引擎, Nutch作為開放源碼 搜索引擎將會更加透明, 從而更值得大家信賴. 如今全部主要的搜索引擎都採用私有的排序算法, 而不會解釋為什么一個網頁會排在一個特定的位置. 除此之外, 有的搜索引擎依照站點所付的 費用, 而不是依據它們本身的價值進行排序. 與它們不同, Nucth沒有什么須要隱瞞, 也沒有 動機去扭曲搜索的結果. Nutch將盡自己最大的努力為用戶提供最好的搜索結果.

? ? Nutch 致力于讓每一個人能非常easy, 同一時候花費非常少就能夠配置世界一流的Web搜索引擎. 為了完畢這一雄偉的目標, Nutch必須能夠做到:

  • 每一個月取幾十億網頁
  • 為這些網頁維護一個索引
  • 對索引文件進行每秒上千次的搜索
  • 提供高質量的搜索結果
  • 以最小的成本運作
? ? 寫博客是一種學習的過程,即便僅僅是參考他人文章的整理總結,也能借鑒他人的經驗,一舉兩得,有何不敢。ok,興許會研究開源搜索引擎的架構設計與源碼學習。搜索引擎技術交流群:172114338本文完。

轉載于:https://www.cnblogs.com/gcczhongduan/p/4369458.html

總結

以上是生活随笔為你收集整理的搜索引擎技术之概要预览的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。