搜索引擎核心理論思想

1. 為什么需要搜索平引擎

首先先思考下面的幾個(gè)問(wèn)題:

  1. 我們的應(yīng)用中一般用什么來(lái)存儲(chǔ)數(shù)據(jù)?
    數(shù)據(jù)庫(kù)如 MySQL

  2. 我們經(jīng)常瀏覽新聞岂贩、博客茫经、商品等,存儲(chǔ)這些數(shù)據(jù)的表都應(yīng)該有哪些字段萎津?


  3. 在數(shù)據(jù)庫(kù)中如何做下面的查詢卸伞? 以上面的新聞表為例


  4. 當(dāng)數(shù)據(jù)量變大時(shí),上邊3中的四個(gè)查詢都變慢了锉屈,該如何優(yōu)化荤傲?
    常用的數(shù)據(jù)庫(kù)優(yōu)化方法:
    建索引、分區(qū)表

  5. 建索引對(duì)“查詢與釣魚(yú)島有關(guān)的新聞”有效率上邊的提升嗎颈渊?為什么遂黍?
    答案是沒(méi)有的

  6. 索引的原理是怎樣的?
    對(duì)列值創(chuàng)建排序存儲(chǔ)俊嗽,數(shù)據(jù)結(jié)構(gòu)={列值雾家、行地址}。在有序數(shù)據(jù)列表中就可以利用二分查找快速找到要查找的行的地址绍豁,再根據(jù)地址直接取行數(shù)據(jù)芯咧。

  7. 索引的排序,是怎么排的竹揍?
    數(shù)值列 : 數(shù)值大小
    時(shí)間列 : 轉(zhuǎn)換成long之后按照數(shù)值大小
    文本列 : 按照字符集編碼

  8. 在“新聞標(biāo)題”列上建索引后敬飒,當(dāng)我們查詢 標(biāo)題 = “釣魚(yú)島”,數(shù)據(jù)庫(kù)會(huì)怎么去查鬼佣?



    而當(dāng)我們查詢 標(biāo)題 LIKE ‘%釣魚(yú)島%’驶拱,數(shù)據(jù)庫(kù)此時(shí)無(wú)法使用索引進(jìn)行查詢霜浴,所以無(wú)法提升效率晶衷,此時(shí)會(huì)全表掃描。

由以上八個(gè)問(wèn)題,我們可以得出以下的結(jié)論:

結(jié)論:
數(shù)據(jù)庫(kù)適合結(jié)構(gòu)化數(shù)據(jù)的精確查詢晌纫,而不適合半結(jié)構(gòu)化税迷、非結(jié)構(gòu)化數(shù)據(jù)的模糊查詢及靈活搜索(特別是數(shù)據(jù)量大時(shí)),無(wú)法提供想要的實(shí)時(shí)性锹漱。

  • 結(jié)構(gòu)化數(shù)據(jù):用表箭养、字段表示的數(shù)據(jù)
  • 半結(jié)構(gòu)化數(shù)據(jù):xml html
  • 非結(jié)構(gòu)化數(shù)據(jù):文本、文檔哥牍、圖片毕泌、音頻、視頻等

2. 搜索引擎是如何做到快速查詢的

1思考:如何做才能快速查詢到與“釣魚(yú)島是中國(guó)的”有關(guān)的新聞嗅辣?
分析:我們查詢時(shí)撼泛,輸入的是“釣魚(yú)島是中國(guó)的”,想要得到標(biāo)題或內(nèi)容中包含“釣魚(yú)島是中國(guó)的”的新聞列表澡谭。
如何做愿题,可以快速找到包含“釣魚(yú)島”的文章id,包含“中國(guó)”的文章id?

  • 倒排索引

2.為什么稱為倒排索引蛙奖?
英文原名Inverted index潘酗,失敗地翻譯成了倒排索引,正確翻譯為:反向索引

  1. 下面這兩個(gè)索引可以合并在一起嗎雁仲?

正確的合并方式


上邊的合并方式節(jié)約了存儲(chǔ)空間仔夺,提升了檢索效率。

  1. 反向索引的記錄數(shù)會(huì)不會(huì)很大攒砖?
    正常來(lái)說(shuō)是不會(huì)的囚灼,可以查看下面的圖:



    所以一般來(lái)說(shuō)最多也不會(huì)超過(guò)100W個(gè)

  2. 如何建立這樣一個(gè)索引?


  3. 如果要開(kāi)發(fā)一個(gè)中文分詞器祭衩,你覺(jué)得該怎么實(shí)現(xiàn)對(duì)一句話進(jìn)行分詞灶体?
    語(yǔ)句示例:張三說(shuō)的卻是在理:


  4. java開(kāi)源的中文分詞器有哪些?

  • 有很多掐暮,如何選擇蝎抽?
    1.準(zhǔn)確率 2.分詞效率 3.中英混合分詞支持

  • 常用的中文分詞器有:IKAnalyzer mmseg4j

  1. 分詞器在分詞時(shí)能不能統(tǒng)計(jì)出詞的出現(xiàn)次數(shù)、位置路克?有什么作用樟结?
    可以,這樣可以方便進(jìn)行一個(gè)短語(yǔ)查詢和高亮等等精算。


  2. 你瓢宦、我、他灰羽、的驮履、地鱼辙、了、標(biāo)點(diǎn)符號(hào)…..這些需要為其創(chuàng)建索引嗎?
    這種詞一般稱為停用詞玫镐,不會(huì)被索引

  3. 當(dāng)出現(xiàn)了新詞了倒戏,該怎么辦?
    撩妹老司機(jī)、軟妹子恐似、直男 遇到這種情況就需要允許自行添加內(nèi)容到字典

所以由以上十個(gè)點(diǎn)杜跷,可以得出結(jié)論,如果要快速查詢到指定的內(nèi)容的新聞

結(jié)論:使用分詞器對(duì)數(shù)據(jù)進(jìn)行分詞矫夷,建立反向索引葛闷。


3. 有了反向索引了,如何進(jìn)行搜索双藕?

  • 步驟1: 對(duì)搜索輸入進(jìn)行分詞
    釣魚(yú)島孵运、中國(guó)
  • 步驟2: 在反向索引中找出包含釣魚(yú)島、中國(guó)的文章列表


  • 步驟3: 合并兩個(gè)列表蔓彩,排序輸出
    {1,12,8,5}

由上邊的內(nèi)容治笨,引申出以下問(wèn)題:

  • 問(wèn)題1:合并后列表該如何排序?我們希望最相關(guān)的排在最前面
  • 問(wèn)題2:相關(guān)性如何度量?
    人可以通過(guò)讀內(nèi)容判定相關(guān)性赤嚼,機(jī)器不懂人話旷赖。
    得建立一套能評(píng)估相關(guān)性的模型。
  • 問(wèn)題3:如何根據(jù)次數(shù)建立一個(gè)相關(guān)性評(píng)估模型?

  • 規(guī)則1:統(tǒng)計(jì)出現(xiàn)次數(shù)更卒,根據(jù)次數(shù)從高到低排序


  • 規(guī)則2:加入權(quán)重,標(biāo)題權(quán)重10等孵,內(nèi)容權(quán)重1,計(jì)算權(quán)重得分蹂空,按高-低排序



4. 其他的剩余議題

4.1 反向索引更新:數(shù)據(jù)更新時(shí)俯萌,索引是不是必須得更新?好更新嗎上枕?

正常來(lái)說(shuō)是不存在更新這個(gè)操作的咐熙,實(shí)現(xiàn)更新操作的方式也很簡(jiǎn)單粗暴,就是先刪除文章然后再重新索引該文章辨萍。

4.2 反向索引是存儲(chǔ)在內(nèi)存中棋恼,還是磁盤中合適?反向索引會(huì)有多大锈玉?

一般到都是寫到磁盤上爪飘,然后用buff快速寫入。

4.3 搜索引擎需要支持精確搜索嗎拉背?需要支持像數(shù)據(jù)庫(kù)一樣的多條件AND OR組合搜索嗎师崎?

必須要支持


5. Lucene

最受歡迎的java開(kāi)源全文搜索引擎開(kāi)發(fā)工具包。提供了完整的查詢引擎和索引引擎椅棺,部分文本分詞引擎犁罩。Lucene的目的是為軟件開(kāi)發(fā)人員提供一個(gè)簡(jiǎn)單易用的工具包齐蔽,以方便在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎昼汗。

是Apache的子項(xiàng)目,網(wǎng)址: http://lucene.apache.org/

  • Lucene在ES中的應(yīng)用

ES將index的數(shù)據(jù)分為多份鬼雀,每份叫一個(gè)shard顷窒,為了提高數(shù)據(jù)可用性,每個(gè)shard都會(huì)有冗余副本,每個(gè)副本實(shí)際上是一個(gè)Lucene index實(shí)例.


如果覺(jué)得有收獲就點(diǎn)個(gè)贊吧源哩,更多知識(shí)鞋吉,請(qǐng)點(diǎn)擊關(guān)注查看我的主頁(yè)信息哦~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市励烦,隨后出現(xiàn)的幾起案子谓着,更是在濱河造成了極大的恐慌,老刑警劉巖坛掠,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赊锚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡屉栓,警方通過(guò)查閱死者的電腦和手機(jī)舷蒲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)友多,“玉大人牲平,你說(shuō)我怎么就攤上這事∮蚶模” “怎么了纵柿?”我有些...
    開(kāi)封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)启绰。 經(jīng)常有香客問(wèn)我昂儒,道長(zhǎng),這世上最難降的妖魔是什么委可? 我笑而不...
    開(kāi)封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任荆忍,我火速辦了婚禮,結(jié)果婚禮上撤缴,老公的妹妹穿的比我還像新娘刹枉。我一直安慰自己,他們只是感情好屈呕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布微宝。 她就那樣靜靜地躺著,像睡著了一般虎眨。 火紅的嫁衣襯著肌膚如雪蟋软。 梳的紋絲不亂的頭發(fā)上镶摘,一...
    開(kāi)封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音岳守,去河邊找鬼凄敢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛湿痢,可吹牛的內(nèi)容都是我干的涝缝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼譬重,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拒逮!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起臀规,我...
    開(kāi)封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤滩援,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后塔嬉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體玩徊,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佣赖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了憎蛤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仿野。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纲熏,死狀恐怖碾盟,靈堂內(nèi)的尸體忽然破棺而出棚辽,到底是詐尸還是另有隱情,我是刑警寧澤冰肴,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布屈藐,位于F島的核電站,受9級(jí)特大地震影響熙尉,放射性物質(zhì)發(fā)生泄漏联逻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一检痰、第九天 我趴在偏房一處隱蔽的房頂上張望包归。 院中可真熱鬧,春花似錦铅歼、人聲如沸公壤。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)厦幅。三九已至沾鳄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間确憨,已是汗流浹背译荞。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缚态,地道東北人磁椒。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓堤瘤,卻偏偏與公主長(zhǎng)得像玫芦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子本辐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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