搜索在計算機中的地位十分重要

無論是在內(nèi)部系統(tǒng)還是在外部的互聯(lián)網(wǎng)站上腺律,都少不了檢索系統(tǒng)臭觉。數(shù)據(jù)是為了用戶而服務(wù)。計算機在采集數(shù)據(jù)疮绷,處理數(shù)據(jù)莉擒,存儲數(shù)據(jù)之后澜躺,各種客戶端的操作pc機或者是移動嵌入式設(shè)備都可以很好的獲取數(shù)據(jù)吼虎,得到 想要的數(shù)據(jù)服務(wù)。


檢索分為SQL過濾查詢和全文檢索喜颁。數(shù)據(jù)都是放在數(shù)據(jù)庫里,數(shù)據(jù)庫里的數(shù)據(jù)量太大盛嘿,要檢索到精準的數(shù)據(jù)是需要很好的用戶體驗洛巢。用戶對響應(yīng)時長要求特別嚴格括袒,最好控制在一定的響應(yīng)時間內(nèi)次兆。SQL查詢是普通的字段過濾,一般在沒有走全表掃描的情況下都是性能較好的數(shù)據(jù)查詢方式锹锰。全文檢索的實現(xiàn)方式是在數(shù)據(jù)庫設(shè)計的時候就有這些模塊芥炭,比如MySQL的全文檢索。之后在市面上有公司開發(fā)了成型的開源產(chǎn)品恃慧,比如Lucene等园蝠。??? 學(xué)過luncene框架,? 能就是論事痢士。在銀行工作的時候有接觸過es框架彪薛,到現(xiàn)在也沒仔細去弄懂。每個人的學(xué)習(xí)能力不一樣怠蹂,有的工程師削尖了腦袋要去專研每個技術(shù)善延。??? 是在學(xué)習(xí)Java開發(fā)框架的時候接觸過Lucene框架, 跟著源碼敲了一遍那個搜索引擎城侧。對于那種根據(jù)分詞查詢數(shù)據(jù)的方式有深刻的映像易遣,但是并不是每個系統(tǒng)都是要使用全文檢索分詞搜索。


按需開發(fā)嫌佑,意思就是根據(jù)需求進行商業(yè)開發(fā)豆茫。以用戶體驗為中心,金錢盈利為目的屋摇。沒有誰在為做無用功揩魂,得到與失去,不要去說炮温,也說不準肤京。像普通的字段搜索看起來十分簡單,其實就是很簡單茅特。但是如果遇到數(shù)據(jù)量大的情況忘分,或者是用戶不會使用系統(tǒng)的情況下,都是有問題的白修。像百度妒峦,Google,搜什么就有什么兵睛,這就是全文檢索肯骇。


搜索窥浪,依賴于搜索引擎。搜索引擎的建立是十分困難的事情笛丙。以? 現(xiàn)在的水平理解的搜索漾脂,? 能說個大概。? 做Java

6年時間胚鸯,雖然沒有寫過搜索引擎骨稿,但是沒有經(jīng)驗的同學(xué)可以去嘗試著實踐下。做任何系統(tǒng)都是需要構(gòu)建bs架構(gòu)或者是cs架構(gòu)姜钳,cs架構(gòu)是client-server架構(gòu)坦冠。


在操作系統(tǒng)中有客戶端軟件開發(fā)包,bs架構(gòu)是broswer-server架構(gòu)哥桥,在所有的數(shù)據(jù)操作都是在瀏覽器中實現(xiàn)辙浑,把瀏覽器當(dāng)做一個子系統(tǒng),子系統(tǒng)上面又有很多應(yīng)用程序... bs架構(gòu)是特殊的cs架構(gòu)拟糕。


在大學(xué)學(xué)習(xí)計算機編程開發(fā)判呕,首選的語言是C++。那種語言是寫客戶端軟件送滞, 也是學(xué)的很糾結(jié)侠草,以為沒有很好的效果。大三休學(xué)的時候?qū)W習(xí)了Java累澡,接觸全文檢索梦抢,學(xué)習(xí)了前端頁面的設(shè)計開發(fā),后臺數(shù)據(jù)庫的建立愧哟。到現(xiàn)在有更多的想法和思考奥吩。爬蟲的建立,爬蟲是怎么從網(wǎng)站上爬數(shù)據(jù)蕊梧,用戶是怎么在網(wǎng)站上面搜索數(shù)據(jù)霞赫。


大學(xué)畢業(yè)之后對于搜索引擎的理解畫了個草圖


像? 爬蟲



一般的java IDE的debug是這樣設(shè)計




爬蟲是怎么在網(wǎng)站上爬數(shù)據(jù),為什么? 能爬網(wǎng)站的數(shù)據(jù)》适福現(xiàn)在的web瀏覽器都支持HTML標簽編輯的網(wǎng)頁端衰,HTML標簽頁是dom元素。每個DOM元素都是一個實體對象甘改,在數(shù)據(jù)庫中體現(xiàn)的就是dom元素實體對象表旅东。Dom元素表里存放的就是網(wǎng)頁標簽所承載的基礎(chǔ)數(shù)據(jù)和一些基本屬性。每當(dāng)一個網(wǎng)站上面的標簽包裹的數(shù)據(jù)發(fā)生變化十艾,就要觸發(fā)數(shù)據(jù)寫write事件抵代,即 WriteEventListener,更新索引庫里的索引數(shù)據(jù)忘嫉,和文檔庫里的文檔數(shù)據(jù)荤牍。這種數(shù)據(jù)更新同步方式叫做即時同步方式案腺,是的數(shù)據(jù)庫里的數(shù)據(jù)和索引庫里的數(shù)據(jù)保持一致性。用戶查詢數(shù)據(jù)的時候總能查到最新的數(shù)據(jù)康吵,用戶查數(shù)據(jù)都是走索引庫再走文檔庫劈榨,這樣性能更好。


至于怎么構(gòu)建dom元素數(shù)據(jù)庫晦嵌,怎么構(gòu)建dom元素索引庫同辣。那些都是商業(yè)庫,需要開發(fā)注冊維護耍铜,就像?? 在某個地方開商店一樣邑闺,需要辦理很多手續(xù)跌前。


當(dāng)時學(xué)習(xí)操作lucene 框架架構(gòu)方式是通過AOP的方式實現(xiàn)數(shù)據(jù)同步棕兼。數(shù)據(jù)同步是文檔庫和索引庫的同步操作方式。文檔庫存放的是Document 文檔對象抵乓,索引庫存放的是字段對象 Field 伴挚。字段對象分為索引文檔號和經(jīng)歷過分詞器分詞之后的關(guān)鍵字集合。中文分詞器是Analyzer 堆中文的語句進行分詞灾炭。


中文的分詞器對中文語句的此法進行分析茎芋。中文的語句分為主+謂+賓+定+狀+補 . 分詞器分為標準的國際分詞器和中國大陸簡體的中文分詞器。原理十分相似蜈出,實詞和虛詞需要區(qū)分田弥。實詞是名詞,虛詞是冠詞铡原,語氣詞偷厦,稱謂詞燕刻,形容詞卵洗,狀態(tài)詞,補語詞本橙,謂語詞。分詞器分析網(wǎng)站上面的文章關(guān)鍵字片择,中文摘要,具體的文章正文內(nèi)容。分詞器的分詞結(jié)果生成關(guān)鍵字和文檔索引組裝成的字段 Field對象。字段對象集合 fieldList 放在lucene 索引庫中。文檔庫中存放大量的文檔對象,文檔Document 與 字段 Field 對象的索引表中的文檔索引關(guān)聯(lián)罪既。


用戶在前端使用日用語句在lucene搜索引擎中搜索數(shù)據(jù)集合的過程十分復(fù)雜猩谊。簡單的過程可以分為

查詢語句詞的錄入接收。

后臺對中文查詢語句分詞,抽取關(guān)鍵字形成關(guān)鍵字集合棒口。

使用關(guān)鍵字集合在lucene索引庫 中的關(guān)鍵字進行匹配厂抖,匹配成功會有文檔集合 documentList 。

文檔集合返回給業(yè)務(wù)邏輯層service . 使用高亮器hlighter 對文檔中的存在的關(guān)鍵詞高亮克懊。

文檔集合的返回通過評分對象score 綜合得分排序忱辅。

命中文檔的得分 score 有默認的得分規(guī)則和自定義得分規(guī)則。


數(shù)據(jù)同步在企業(yè)項目中使用很多谭溉。平安集團的hrx人力資源管理系統(tǒng)使用Elasticsearch 搜索引擎搜索數(shù)據(jù)墙懂。Lucene 和 Elasticsearch 兩種引擎搜索數(shù)據(jù)的方式都是全文檢索。全文檢索在數(shù)據(jù)庫軟件中普遍存在扮念。企業(yè)的IDE 開發(fā)環(huán)境有搜索框的地方或許會有全文檢索的影子损搬。軟件和應(yīng)用程序系統(tǒng)都有數(shù)據(jù)。檢索方式分為通過表單的方式和一個表單輸入框的方式扔亥。一個表單輸入框的輸入方式面向的用戶是大眾化的互聯(lián)網(wǎng)網(wǎng)名场躯。Java 的web信息系統(tǒng)安全新能和開發(fā)維護團隊有保障谈为,使用sql 查詢語句查找數(shù)據(jù)的方式限制用戶量旅挤。內(nèi)部系統(tǒng)的用戶量分為內(nèi)部用戶和外圍用戶。使用sql查詢語句查詢數(shù)據(jù)使用全文檢索索引庫和文檔庫伞鲫。數(shù)據(jù)查詢是否全表還是走索引表有用戶自定義粘茄,系統(tǒng)默認,AI 算法相應(yīng)的操作模式秕脓。


數(shù)據(jù)同步索引庫和文檔庫中的數(shù)據(jù)柒瓣。同步平安銀行ES庫和PJ 庫中的數(shù)據(jù)。開發(fā)任務(wù)涉及到項目不同版本發(fā)布的同步數(shù)據(jù)代碼吠架。數(shù)據(jù)量大小和性能問題對于開發(fā)工程師是更高級別的操作芙贫。保證數(shù)據(jù)的正確性,代碼的質(zhì)量高低傍药。項目組之間的工程師都會相互借閱不同開發(fā)分支的代碼磺平。每個開發(fā)都會有不同的編寫代碼的方式。


Elasticsearch 搜索原理和Lucene 類似拐辽。每個企業(yè)采用的技術(shù)架構(gòu)選型不盡相同拣挪。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市俱诸,隨后出現(xiàn)的幾起案子菠劝,更是在濱河造成了極大的恐慌,老刑警劉巖睁搭,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赶诊,死亡現(xiàn)場離奇詭異笼平,居然都是意外死亡,警方通過查閱死者的電腦和手機舔痪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門出吹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辙喂,你說我怎么就攤上這事捶牢。” “怎么了巍耗?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵秋麸,是天一觀的道長。 經(jīng)常有香客問我炬太,道長灸蟆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任亲族,我火速辦了婚禮炒考,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘霎迫。我一直安慰自己斋枢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布知给。 她就那樣靜靜地躺著瓤帚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涩赢。 梳的紋絲不亂的頭發(fā)上戈次,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機與錄音筒扒,去河邊找鬼怯邪。 笑死,一個胖子當(dāng)著我的面吹牛花墩,可吹牛的內(nèi)容都是我干的悬秉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼观游,長吁一口氣:“原來是場噩夢啊……” “哼搂捧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起懂缕,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤允跑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聋丝,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡索烹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了弱睦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片百姓。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖况木,靈堂內(nèi)的尸體忽然破棺而出垒拢,到底是詐尸還是另有隱情,我是刑警寧澤火惊,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布求类,位于F島的核電站,受9級特大地震影響屹耐,放射性物質(zhì)發(fā)生泄漏尸疆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一惶岭、第九天 我趴在偏房一處隱蔽的房頂上張望寿弱。 院中可真熱鬧,春花似錦按灶、人聲如沸症革。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽地沮。三九已至,卻和暖如春羡亩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背危融。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工畏铆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吉殃。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓辞居,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蛋勺。 傳聞我的和親對象是個殘疾皇子瓦灶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容