加個“星標”,不忘簽到哦 來源:http:///Ebgm7sn 最近項目組安排了一個任務(wù),項目中用到了全文搜索,基于全文搜索 Solr,但是該 Solr 搜索云項目不穩(wěn)定,經(jīng)常查詢不出來數(shù)據(jù),需要手動全量同步,而且是其他團隊在維護,依賴性太強,導致 Solr 服務(wù)一出問題,我們的項目也基本癱瘓,因為所有的依賴查詢都無結(jié)果數(shù)據(jù)了。所以考慮開發(fā)一個適配層,如果 Solr 搜索出問題,自動切換到新的搜索--ES。 其實可以通過 Solr 集群或者服務(wù)容錯等設(shè)計來解決該問題。但是先不考慮本身設(shè)計的合理性,領(lǐng)導需要開發(fā),所以我開始踏上了搭建 ES 服務(wù)的道路,從零開始,因為之前完全沒接觸過 ES,所以通過本系列來記錄下自己的開發(fā)過程。 1. 什么是全文搜索 什么是全文搜索引擎?
從定義中我們已經(jīng)可以大致了解全文檢索的思路了,為了更詳細的說明,我們先從生活中的數(shù)據(jù)說起。 我們生活中的數(shù)據(jù)總體分為兩種:結(jié)構(gòu)化數(shù)據(jù) 和 非結(jié)構(gòu)化數(shù)據(jù)。
當然有的地方還會有第三種:半結(jié)構(gòu)化數(shù)據(jù),如XML,HTML等,當根據(jù)需要可按結(jié)構(gòu)化數(shù)據(jù)來處理,也可抽取出純文本按非結(jié)構(gòu)化數(shù)據(jù)來處理。 根據(jù)兩種數(shù)據(jù)分類,搜索也相應(yīng)的分為兩種:結(jié)構(gòu)化數(shù)據(jù)搜索和非結(jié)構(gòu)化數(shù)據(jù)搜索。 對于結(jié)構(gòu)化數(shù)據(jù),我們一般都是可以通過關(guān)系型數(shù)據(jù)庫(mysql,oracle等)的 table 的方式存儲和搜索,也可以建立索引。對于非結(jié)構(gòu)化數(shù)據(jù),也即對全文數(shù)據(jù)的搜索主要有兩種方法:順序掃描法,全文檢索。 順序掃描:通過文字名稱也可了解到它的大概搜索方式,即按照順序掃描的方式查詢特定的關(guān)鍵字。例如給你一張報紙,讓你找到該報紙中“RNG”的文字在哪些地方出現(xiàn)過。你肯定需要從頭到尾把報紙閱讀掃描一遍然后標記出關(guān)鍵字在哪些版塊出現(xiàn)過以及它的出現(xiàn)位置。 這種方式無疑是最耗時的最低效的,如果報紙排版字體小,而且版塊較多甚至有多份報紙,等你掃描完你的眼睛也差不多了。 全文搜索:對非結(jié)構(gòu)化數(shù)據(jù)順序掃描很慢,我們是否可以進行優(yōu)化?把我們的非結(jié)構(gòu)化數(shù)據(jù)想辦法弄得有一定結(jié)構(gòu)不就行了嗎?將非結(jié)構(gòu)化數(shù)據(jù)中的一部分信息提取出來,重新組織,使其變得有一定結(jié)構(gòu),然后對此有一定結(jié)構(gòu)的數(shù)據(jù)進行搜索,從而達到搜索相對較快的目的。這種方式就構(gòu)成了全文檢索的基本思路。這部分從非結(jié)構(gòu)化數(shù)據(jù)中提取出的然后重新組織的信息,我們稱之索引。 還以讀報紙為例,我們想關(guān)注最近英雄聯(lián)盟S8全球總決賽的新聞,假如都是 RNG 的粉絲,如何快速找到 RNG 新聞的報紙和版塊呢?全文搜索的方式就是,將所有報紙中所有版塊中關(guān)鍵字進行提取,如'EDG','RNG','FW','戰(zhàn)隊','英雄聯(lián)盟'等。然后對這些關(guān)鍵字建立索引,通過索引我們就可以對應(yīng)到該關(guān)鍵詞出現(xiàn)的報紙和版塊。注意區(qū)別目錄搜索引擎。 2. 為什么要用全文搜索搜索引擎 之前,有同事問我,為什么要用搜索引擎?我們的所有數(shù)據(jù)在數(shù)據(jù)庫里面都有,而且 Oracle、SQL Server 等數(shù)據(jù)庫里也能提供查詢檢索或者聚類分析功能,直接通過數(shù)據(jù)庫查詢不就可以了嗎?確實,我們大部分的查詢功能都可以通過數(shù)據(jù)庫查詢獲得,如果查詢效率低下,還可以通過建數(shù)據(jù)庫索引,優(yōu)化SQL等方式進行提升效率,甚至通過引入緩存來加快數(shù)據(jù)的返回速度。如果數(shù)據(jù)量更大,就可以分庫分表來分擔查詢壓力。 那為什么還要全文搜索引擎呢?我們主要從以下幾個原因分析:
什么時候使用全文搜索引擎:
3. Lucene,Solr, ElasticSearch ? 現(xiàn)在主流的搜索引擎大概就是:Lucene,Solr,ElasticSearch。 它們的索引建立都是根據(jù)倒排索引的方式生成索引,何謂倒排索引?
3-1 Lucene Lucene是一個Java全文搜索引擎,完全用Java編寫。Lucene不是一個完整的應(yīng)用程序,而是一個代碼庫和API,可以很容易地用于向應(yīng)用程序添加搜索功能。 Lucene通過簡單的API提供強大的功能: 可擴展的高性能索引
強大,準確,高效的搜索算法
跨平臺解決方案
Apache軟件基金會在Apache軟件基金會提供的開源軟件項目的Apache社區(qū)的支持。 但是Lucene只是一個框架,要充分利用它的功能,需要使用JAVA,并且在程序中集成Lucene。需要很多的學習了解,才能明白它是如何運行的,熟練運用Lucene確實非常復雜。 3-2 Solr Apache Solr是一個基于名為Lucene的Java庫構(gòu)建的開源搜索平臺。它以用戶友好的方式提供Apache Lucene的搜索功能。作為一個行業(yè)參與者近十年,它是一個成熟的產(chǎn)品,擁有強大而廣泛的用戶社區(qū)。它提供分布式索引,復制,負載平衡查詢以及自動故障轉(zhuǎn)移和恢復。如果它被正確部署然后管理得好,它就能夠成為一個高度可靠,可擴展且容錯的搜索引擎。很多互聯(lián)網(wǎng)巨頭,如Netflix,eBay,Instagram和亞馬遜(CloudSearch)都使用Solr,因為它能夠索引和搜索多個站點。 主要功能列表包括:
3-3 ElasticSearch Elasticsearch是一個開源(Apache 2許可證),是一個基于Apache Lucene庫構(gòu)建的RESTful搜索引擎。 Elasticsearch是在Solr之后幾年推出的。它提供了一個分布式,多租戶能力的全文搜索引擎,具有HTTP Web界面(REST)和無架構(gòu)JSON文檔。Elasticsearch的官方客戶端庫提供Java,Groovy,PHP,Ruby,Perl,Python,.NET和Javascript。 分布式搜索引擎包括可以劃分為分片的索引,并且每個分片可以具有多個副本。每個Elasticsearch節(jié)點都可以有一個或多個分片,其引擎也可以充當協(xié)調(diào)器,將操作委派給正確的分片。 Elasticsearch可通過近實時搜索進行擴展。其主要功能之一是多租戶。 主要功能列表包括:
4 Elasticsearch vs. Solr的選擇 由于Lucene的復雜性,一般很少會考慮它作為搜索的第一選擇,排除一些公司需要自研搜索框架,底層需要依賴Lucene。所以這里我們重點分析 Elasticsearch 和 Solr。 Elasticsearch vs. Solr。哪一個更好?他們有什么不同?你應(yīng)該使用哪一個? 4-1 歷史比較 Apache Solr是一個成熟的項目,擁有龐大而活躍的開發(fā)和用戶社區(qū),以及Apache品牌。Solr于2006年首次發(fā)布到開源,長期以來一直占據(jù)著搜索引擎領(lǐng)域,并且是任何需要搜索功能的人的首選引擎。它的成熟轉(zhuǎn)化為豐富的功能,而不僅僅是簡單的文本索引和搜索; 如分面,分組,強大的過濾,可插入的文檔處理,可插入的搜索鏈組件,語言檢測等。 Solr 在搜索領(lǐng)域占據(jù)了多年的主導地位。然后,在2010年左右,Elasticsearch成為市場上的另一種選擇。那時候,它遠沒有Solr那么穩(wěn)定,沒有Solr的功能深度,沒有思想分享,品牌等等。 Elasticsearch雖然很年輕,但它也自己的一些優(yōu)勢,Elasticsearch 建立在更現(xiàn)代的原則上,針對更現(xiàn)代的用例,并且是為了更容易處理大型索引和高查詢率而構(gòu)建的。此外,由于它太年輕,沒有社區(qū)可以合作,它可以自由地向前推進,而不需要與其他人(用戶或開發(fā)人員)達成任何共識或合作,向后兼容,或任何其他更成熟的軟件通常必須處理。 因此,它在Solr之前就公開了一些非常受歡迎的功能(例如,接近實時搜索,英文:Near Real-Time Search)。從技術(shù)上講,NRT搜索的能力確實來自Lucene,它是 Solr 和 Elasticsearch 使用的基礎(chǔ)搜索庫。具有諷刺意味的是,因為 Elasticsearch 首先公開了NRT搜索,所以人們將NRT搜索與Elasticsearch 聯(lián)系在一起,盡管 Solr 和 Lucene 都是同一個 Apache 項目的一部分,因此,人們會首先期望 Solr 具有如此高要求的功能。 4-2 特征差異比較 這兩個搜索引擎都是流行的,先進的的開源搜索引擎。它們都是圍繞核心底層搜索庫 - Lucene構(gòu)建的 - 但它們又是不同的。像所有東西一樣,每個都有其優(yōu)點和缺點,根據(jù)您的需求和期望,每個都可能更好或更差。Solr和Elasticsearch都在快速發(fā)展,所以,話不多說,先來看下它們的差異清單:
另外,我們在從以下幾個方面來分析下:
5. 總結(jié) 那么,到底是Solr還是Elasticsearch?有時很難找到明確的答案。無論您選擇Solr還是Elasticsearch,首先需要了解正確的用例和未來需求。總結(jié)他們的每個屬性。 記?。?/span>
總之,兩者都是功能豐富的搜索引擎,只要設(shè)計和實現(xiàn)得當,它們或多或少都能提供相同的性能。本篇文章的總體內(nèi)容大致如下圖,該圖由園友ReyCG精心繪制并提供。 參考:
|
|
來自: liang1234_ > 《搜索引擎》