Solr&ElasticSearch原理及應(yīng)用
一、綜述
搜索
http://baike.baidu.com/item/%E6%90%9C%E7%B4%A2/2791632#viewPageContent
早期的搜索引擎是把因特網(wǎng)中的資源服務(wù)器的地址收集起來,由其提供的資源的類型不同而分成不同的目錄疯搅,再一層層地進(jìn)行分類足画。人們要找自己想要的信息可按他們的分類一層層進(jìn)入芦疏,就能最后到達(dá)目的地区岗,找到自己想要的信息(樹狀結(jié)構(gòu))炬守。這其實(shí)是最原始的方式涛救,只適用于因特網(wǎng)信息并不多的時(shí)候畏邢。
隨著因特網(wǎng)信息按幾何式增長,出現(xiàn)了真正意義上的搜索引擎州叠,這些搜索引擎知道網(wǎng)站上每一頁的開始棵红,隨后搜索因特網(wǎng)上的所有超級鏈接,把代表超級鏈接的所有詞匯放入一個數(shù)據(jù)庫咧栗。這就是現(xiàn)在搜索引擎的原型逆甜。
它包括信息搜集、信息整理和用戶查詢?nèi)糠帧?/b>
發(fā)展
隨著yahoo!的出現(xiàn)致板,搜索引擎的發(fā)展也進(jìn)入了黃金時(shí)代交煞,相比以前其性能更加優(yōu)越。現(xiàn)在的搜索引擎已經(jīng)不只是單純的搜索網(wǎng)頁的信息了斟或,它們已經(jīng)變得更加綜合化素征,完美化了。以搜索引擎權(quán)威yahoo!為例,從1995年3月由美籍華裔楊致遠(yuǎn)等人創(chuàng)辦yahoo!開始御毅,到現(xiàn)在根欧,他們從一個單一的搜索引擎發(fā)展到現(xiàn)在有電子商務(wù)、新聞信息服務(wù)端蛆、個人免費(fèi)電子信箱服務(wù)等多種網(wǎng)絡(luò)服務(wù)凤粗,充分說明了搜索引擎的發(fā)展從單一到綜合的過程。
ETL-數(shù)據(jù)倉庫技術(shù)
Extraction-Transformation-Loading的縮寫今豆,中文名稱為數(shù)據(jù)提取嫌拣、轉(zhuǎn)換和加載。
http://baike.so.com/doc/2126217-2249603.html
ETL呆躲,是英文Extract-Transform-Load的縮寫异逐,用來描述將數(shù)據(jù)從來源端經(jīng)過抽取(extract)、轉(zhuǎn)換(transform)插掂、加載(load)至目的端的過程灰瞻。ETL一詞較常用在數(shù)據(jù)倉庫,但其對象并不限于數(shù)據(jù)倉庫燥筷。
ETL是構(gòu)建數(shù)據(jù)倉庫的重要一環(huán)箩祥,用戶從數(shù)據(jù)源抽取出所需的數(shù)據(jù),經(jīng)過數(shù)據(jù)清洗,最終按照預(yù)先定義好的數(shù)據(jù)倉庫模型肆氓,將數(shù)據(jù)加載到數(shù)據(jù)倉庫中去袍祖。
原理
每個獨(dú)立的搜索引擎都有自己的網(wǎng)頁抓取程序(spider)。Spider順著網(wǎng)頁中的超鏈接谢揪,連續(xù)地抓取網(wǎng)頁蕉陋。由于互聯(lián)網(wǎng)中超鏈接的應(yīng)用很普遍,理論上拨扶,從一定范圍的網(wǎng)頁出發(fā)凳鬓,就能搜集到絕大多數(shù)的網(wǎng)頁。
搜索引擎抓到網(wǎng)頁后患民,還要做大量的預(yù)處理工作才能提供檢索服務(wù)缩举。其中,最重要的就是提取關(guān)鍵詞匹颤,建立索引文件仅孩。其他還包括去除重復(fù)網(wǎng)頁、分析超鏈接印蓖、計(jì)算網(wǎng)頁的重要度等辽慕。
用戶輸入關(guān)鍵詞進(jìn)行檢索,搜索引擎從索引數(shù)據(jù)庫中找到匹配該關(guān)鍵詞的網(wǎng)頁赦肃;為了用戶便于判斷溅蛉,除了網(wǎng)頁標(biāo)題和URL外公浪,還會提供一段來自網(wǎng)頁的摘要以及其他信息。
二船侧、搜索引擎
搜索引擎(Search Engine)是指根據(jù)一定的策略欠气、運(yùn)用特定的計(jì)算機(jī)程序從互聯(lián)網(wǎng)上搜集信息,在對信息進(jìn)行組織和處理后勺爱,為用戶提供檢索服務(wù)晃琳,將用戶檢索相關(guān)的信息展示給用戶的系統(tǒng)讯检。搜索引擎包括全文索引琐鲁、目錄索引、元搜索引擎人灼、垂直搜索引擎围段、集合式搜索引擎、門戶搜索引擎與免費(fèi)鏈接列表等投放。
一個搜索引擎由搜索器奈泪、索引器、檢索器和用戶接口四個部分組成灸芳。
1.搜索器的功能是在互聯(lián)網(wǎng)中漫游涝桅,發(fā)現(xiàn)和搜集信息。
2.索引器的功能是理解搜索器所搜索的信息烙样,從中抽取出索引項(xiàng)冯遂,用于表示文檔以及生成文檔庫的索引表。
3.檢索器的功能是根據(jù)用戶的查詢在索引庫中快速檢出文檔谒获,進(jìn)行文檔與查詢的相關(guān)度評價(jià)蛤肌,對將要輸出的結(jié)果進(jìn)行排序,并實(shí)現(xiàn)某種用戶相關(guān)性反饋機(jī)制批狱。
4.用戶接口的作用是輸入用戶查詢裸准、顯示查詢結(jié)果、提供用戶相關(guān)性反饋機(jī)制赔硫。
搜索引擎現(xiàn)主要為全文索引和目錄索引炒俱。垂直搜索引擎由于其在特定領(lǐng)域的更高的用戶體驗(yàn),以及更小的硬件成本爪膊,也開始逐漸興起权悟。
1.分類:
1.1全文搜索引擎
搜索引擎分類部分提到過全文搜索引擎從網(wǎng)站提取信息建立網(wǎng)頁數(shù)據(jù)庫的概念。搜索引擎的自動信息搜集功能分兩種惊完。
一種是定期搜索僵芹,即每隔一段時(shí)間(比如Google一般是28天),搜索引擎主動派出“蜘蛛”程序小槐,對一定IP地址范圍內(nèi)的互聯(lián)網(wǎng)網(wǎng)站進(jìn)行檢索拇派,一旦發(fā)現(xiàn)新的網(wǎng)站荷辕,它會自動提取網(wǎng)站的信息和網(wǎng)址加入自己的數(shù)據(jù)庫。
另一種是提交網(wǎng)站搜索件豌,即網(wǎng)站擁有者主動向搜索引擎提交網(wǎng)址疮方,它在一定時(shí)間內(nèi)(2天到數(shù)月不等)定向向你的網(wǎng)站派出“蜘蛛”程序,掃描你的網(wǎng)站并將有關(guān)信息存入數(shù)據(jù)庫茧彤,以備用戶查詢骡显。隨著搜索引擎索引規(guī)則發(fā)生很大變化,主動提交網(wǎng)址并不保證你的網(wǎng)站能進(jìn)入搜索引擎數(shù)據(jù)庫曾掂,最好的辦法是多獲得一些外部鏈接惫谤,讓搜索引擎有更多機(jī)會找到你并自動將你的網(wǎng)站收錄。
當(dāng)用戶以關(guān)鍵詞查找信息時(shí)珠洗,搜索引擎會在數(shù)據(jù)庫中進(jìn)行搜尋溜歪,如果找到與用戶要求內(nèi)容相符的網(wǎng)站,便采用特殊的算法——通常根據(jù)網(wǎng)頁中關(guān)鍵詞的匹配程度许蓖、出現(xiàn)的位置蝴猪、頻次、鏈接質(zhì)量——計(jì)算出各網(wǎng)頁的相關(guān)度及排名等級膊爪,然后根據(jù)關(guān)聯(lián)度高低自阱,按順序?qū)⑦@些網(wǎng)頁鏈接返回給用戶。這種引擎的特點(diǎn)是搜全率比較高
1.2目錄索引
目錄索引也稱為:分類檢索米酬,是因特網(wǎng)上最早提供WWW資源查詢的服務(wù)沛豌,主要通過搜集和整理因特網(wǎng)的資源,根據(jù)搜索到網(wǎng)頁的內(nèi)容淮逻,將其網(wǎng)址分配到相關(guān)分類主題目錄的不同層次的類目之下琼懊,形成像圖書館目錄一樣的分類樹形結(jié)構(gòu)索引。目錄索引無需輸入任何文字爬早,只要根據(jù)網(wǎng)站提供的主題分類目錄哼丈,層層點(diǎn)擊進(jìn)入,便可查到所需的網(wǎng)絡(luò)信息資源筛严。
嚴(yán)格意義上醉旦,目錄索引不能稱為搜索引擎。
1.2.1目錄索引與搜索引擎的不同
1.搜索引擎為程序自動索引桨啃;而目錄索引則依賴人為操作车胡。
2.搜索引擎不考慮網(wǎng)站分類,根據(jù)關(guān)鍵詞網(wǎng)站頻率構(gòu)建搜索索引照瘾;而目錄索引需要甄別網(wǎng)站的分類目錄位置匈棘。
3.搜索引擎檢索到的信息是程序爬蟲自動獲取的,沒有或少有過濾機(jī)制析命,而目錄索引有大量的人為審查過濾機(jī)制主卫,因而信息目錄構(gòu)建也相對緩慢逃默。
1.2.2目錄索引與搜索引擎的融合
現(xiàn)在的搜索引擎一般也提供分類查詢的功能。如Google使用Open Directory目錄提供分類查詢簇搅。在默認(rèn)搜索模式下完域,一些目錄類搜索引擎首先返回的是自己目錄中匹配的網(wǎng)站,如中國的搜狐瘩将、新浪吟税、網(wǎng)易等;而另外一些則默認(rèn)的是網(wǎng)頁搜索姿现,如Yahoo肠仪。這種引擎的特點(diǎn)是檢索的準(zhǔn)確率比較高。
1.3垂直搜索引擎
垂直搜索引擎為2006年后逐步興起的一類搜索引擎建钥。不同于通用的網(wǎng)頁搜索引擎藤韵,垂直搜索專注于特定的搜索領(lǐng)域和搜索需求(例如:機(jī)票搜索、旅游搜索熊经、生活搜索、小說搜索欲险、視頻搜索镐依、購物搜索等等),在其特定的搜索領(lǐng)域有更好的用戶體驗(yàn)天试。相比通用搜索動輒數(shù)千臺檢索服務(wù)器槐壳,垂直搜索具備需要的硬件成本低、用戶需求特定喜每、查詢的方式多樣等優(yōu)點(diǎn)务唐。比較適合中小型公司和創(chuàng)業(yè)型公司的搜索服務(wù)。
2.工作原理
按照搜索引擎的定義带兜,一般將其工作原理分為四部分枫笛,即爬行,抓取存儲刚照,預(yù)處理刑巧,排名。
2.1爬行(信息獲任夼稀)
網(wǎng)絡(luò)搜索引擎通過特定算法的軟件啊楚,跟蹤網(wǎng)頁中的超鏈接,逐層深入鏈接浑彰,逐漸擴(kuò)張成一張遍布網(wǎng)絡(luò)恭理。因此,也形象的稱之為蜘蛛(Spider)或爬蟲郭变。這種軟件的爬行颜价,需要遵循一定的規(guī)則薄风,按照指定的爬行深度和爬行廣度來進(jìn)行網(wǎng)頁爬取。
除了爬取Web之上的資源拍嵌,可獲取的數(shù)據(jù)庫遭赂,文本文件,PDF等可解析出文字形成有效數(shù)據(jù)的信息資源都可以成為爬取的資源横辆。當(dāng)然撇他,針對不同的文件格式和文檔編碼,都需要有相對應(yīng)的文件解析和預(yù)處理器配合狈蚤,才能實(shí)現(xiàn)信息的爬取困肩。
2.2抓取存儲(信息存儲)
搜索引擎將爬蟲爬取到的可識別存儲信息存儲到原始頁面數(shù)據(jù)庫中。其中的數(shù)據(jù)是還未經(jīng)處理的信息脆侮,還不具備數(shù)據(jù)的有效性锌畸,因此還不能稱之為數(shù)據(jù)。
在爬取頁面的過程中靖避,爬蟲也會對數(shù)據(jù)進(jìn)行初步的重復(fù)性檢測潭枣,根據(jù)相應(yīng)的權(quán)重以及重復(fù)比有選擇的爬取頁面信息,并忽略被大量轉(zhuǎn)載幻捏、抄襲盆犁、復(fù)制的內(nèi)容。
2.3預(yù)處理(信息-數(shù)據(jù))
搜索引擎的預(yù)處理器會將爬蟲爬取回來的數(shù)據(jù)進(jìn)行各種的預(yù)處理操作篡九,減小數(shù)據(jù)音噪比谐岁,提煉有效數(shù)據(jù)。并通過索引器根據(jù)指定的索引構(gòu)建方式構(gòu)建索引榛臼。
一般會進(jìn)行的預(yù)處理包括但不限于:提取文字伊佃,特定語種分詞(如中文分詞),去除停止詞沛善,消除噪音(如版權(quán)聲明文字航揉、導(dǎo)航條、廣告等……)路呜,鏈接關(guān)系計(jì)算迷捧,特殊文件處理等礁哄。
索引構(gòu)建一般有正向索引(順序索引)娜搂,倒排索引等方式。
2.4排名
搜索引擎會根據(jù)多種指標(biāo)來對根據(jù)檢索詞匯檢索到的初步結(jié)果進(jìn)行結(jié)果排名罕扎。如有名的Google創(chuàng)始人拉里·佩奇的PageRank算法就是Google搜索引擎排名運(yùn)算法則的一部分抵屿。
Google的PageRank根據(jù)網(wǎng)站的外部鏈接和內(nèi)部鏈接的數(shù)量和質(zhì)量來衡量網(wǎng)站的價(jià)值庆锦。PageRank背后的概念是,每個到頁面的鏈接都是對該頁面的一次投票轧葛,被鏈接的越多搂抒,就意味著被其他網(wǎng)站投票越多艇搀。這個就是所謂的"鏈接流行度"--衡量多少人愿意將他們的網(wǎng)站和你的網(wǎng)站掛鉤。PageRank這個概念引自學(xué)術(shù)中一篇論文的被引述的頻度--即被別人引述的次數(shù)越多求晶,一般判斷這篇論文的權(quán)威性就越高焰雕。
但是這樣的一種排名機(jī)制導(dǎo)致后來出現(xiàn)了SEO中的鏈接銷售和交換策略,市場泛濫的同時(shí)芳杏,也讓搜索的準(zhǔn)確率不斷下降矩屁。因此Google通過修改規(guī)則,對相關(guān)度不高的網(wǎng)頁中鏈接爵赵,以及缺乏內(nèi)容的鏈接工廠(Link Farm)進(jìn)行了排除吝秕。同時(shí)降低了PR值得更新頻率,一般一年更新四次空幻,抑制了互聯(lián)網(wǎng)鏈接的不正常發(fā)展烁峭。
當(dāng)然,Google作為世界上最為著名的搜索引擎(=秕铛。=)约郁,它的排名算法不僅僅只是PageRank,PR只是它排名規(guī)則的一部分而已如捅。
關(guān)于排名規(guī)則與指標(biāo)棍现,還有更多其它考慮因素,如網(wǎng)站與網(wǎng)站內(nèi)容的符合程度等镜遣,其中還涉及到反黑帽SEO作弊技術(shù)的相關(guān)算法規(guī)則。
排名作為搜索引擎面向用戶接口的重要一環(huán)以及一個可獲得利益點(diǎn)士袄,在百度的競價(jià)排名規(guī)則中表現(xiàn)明顯悲关。而Google則遵循其“Don’t be evil”的組織文化原則,根據(jù)搜索結(jié)果提供更大可能對用戶有用的廣告產(chǎn)品來獲取收益娄柳,從而保證了自身搜索引擎排名的公正性和有用性寓辱。
排名算法規(guī)則和方式自誕生以來就廣受爭議,站在成本角度考量赤拒,要維持一個普適性強(qiáng)的搜索引擎的正常良好運(yùn)作秫筏,需要巨大的人力和機(jī)器成本,如果不能從中獲取收益挎挖,對運(yùn)行維護(hù)公司來說將是巨大的損失这敬。但是在互聯(lián)網(wǎng)時(shí)代虛假消息橫行的時(shí)代,反虛假蕉朵、反捏造信息的責(zé)任更多的放到了作為互聯(lián)網(wǎng)網(wǎng)頁入口的搜索引擎的身上崔涂,促使它們不斷的更改自己的算法,添加新的規(guī)則始衅,來讓用戶得到真實(shí)有效的信息冷蚂。
三缭保、Lucene
1.概念
Solr和Elasticsearch都是基于Lucene實(shí)現(xiàn)的。
Lucene是apache軟件基金會4
jakarta項(xiàng)目組的一個子項(xiàng)目蝙茶,是一個開放源代碼的全文檢索引擎工具包艺骂,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構(gòu)隆夯,提供了完整的查詢引擎和索引引擎钳恕,部分文本分析引擎(英文與德文兩種西方語言)。
Lucene的目的是為軟件開發(fā)人員提供一個簡單易用的工具包吮廉,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能苞尝,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。Lucene提供了一個簡單卻強(qiáng)大的應(yīng)用程式接口宦芦,能夠做全文索引和搜尋宙址。在Java開發(fā)環(huán)境里L(fēng)ucene是一個成熟的免費(fèi)開源工具。信息檢索程序庫调卑,雖然與搜索引擎有關(guān)抡砂,但不應(yīng)該將信息檢索程序庫與搜索引擎相混淆。
全文搜索引擎:國外具代表性的有Google恬涧、Fast/AllTheWeb注益、AltaVista、Inktomi溯捆、Teoma丑搔、WiseNut等,國內(nèi)著名的有百度(Baidu)提揍。
2.倒排索引
http://baike.baidu.com/item/%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95/11001569#reference-[2]-676861-wrap
2.1概念
倒排索引源于實(shí)際應(yīng)用中需要根據(jù)屬性的值來查找記錄啤月。這種索引表中的每一項(xiàng)都包括一個屬性值和具有該屬性值的各記錄的地址。由于不是由記錄來確定屬性值劳跃,而是由屬性值來確定記錄的位置谎仲,因而稱為倒排索引(inverted index)。
2.2應(yīng)用背景
在關(guān)系數(shù)據(jù)庫系統(tǒng)里刨仑,索引是檢索數(shù)據(jù)最有效率的方式,郑诺。但對于搜索引擎,它并不能滿足其特殊要求:
1)海量數(shù)據(jù):搜索引擎面對的是海量數(shù)據(jù)杉武,像Google辙诞,百度這樣大型的商業(yè)搜索引擎索引都是億級甚至百億級的網(wǎng)頁數(shù)量,面對如此海量數(shù)據(jù),使得數(shù)據(jù)庫系統(tǒng)很難有效的管理艺智。
2)數(shù)據(jù)操作簡單:搜索引擎使用的數(shù)據(jù)操作簡單,一般而言,只需要增倘要、刪、改、查幾個功能,而且數(shù)據(jù)都有特定的格式,可以針對這些應(yīng)用設(shè)計(jì)出簡單高效的應(yīng)用程序封拧。而一般的數(shù)據(jù)庫系統(tǒng)則支持大而全的功能,同時(shí)損失了速度和空間志鹃。最后,搜索引擎面臨大量的用戶檢索需求,這要求搜索引擎在檢索程序的設(shè)計(jì)上要分秒必爭,盡可能的將大運(yùn)算量的工作在索引建立時(shí)完成,使檢索運(yùn)算盡量的少。一般的數(shù)據(jù)庫系統(tǒng)很難承受如此大量的用戶請求,而且在檢索響應(yīng)時(shí)間和檢索并發(fā)度上都不及我們專門設(shè)計(jì)的索引系統(tǒng)泽西。
2.3概念辨析
2.3.1倒排列表
利用倒排索引方式構(gòu)建而成的單詞與文檔的映射曹铃,其中文檔部分的結(jié)構(gòu)就是倒排列表。
倒排列表用來記錄有哪些文檔包含了某個單詞捧杉。一般在文檔集合里會有很多文檔包含某個單詞陕见,每個文檔會記錄文檔編號(DocID),單詞在這個文檔中出現(xiàn)的次數(shù)(TF)及單詞在文檔中哪些位置出現(xiàn)過等信息味抖,這樣與一個文檔相關(guān)的信息被稱做倒排索引項(xiàng)(Posting)评甜,包含這個單詞的一系列倒排索引項(xiàng)形成了列表結(jié)構(gòu),這就是某個單詞對應(yīng)的倒排列表仔涩。
在實(shí)際的搜索引擎系統(tǒng)中忍坷,并不存儲倒排索引項(xiàng)中的實(shí)際文檔編號,而是代之以文檔編號差值(D-Gap)熔脂。文檔編號差值是倒排列表中相鄰的兩個倒排索引項(xiàng)文檔編號的差值佩研,一般在索引構(gòu)建過程中,可以保證倒排列表中后面出現(xiàn)的文檔編號大于之前出現(xiàn)的文檔編號霞揉,所以文檔編號差值總是大于0的整數(shù)旬薯。之所以要對文檔編號進(jìn)行差值計(jì)算,主要原因是為了更好地對數(shù)據(jù)進(jìn)行壓縮适秩,原始文檔編號一般都是大數(shù)值绊序,通過差值計(jì)算,就有效地將大數(shù)值轉(zhuǎn)換為了小數(shù)值秽荞,而這有助于增加數(shù)據(jù)的壓縮率政模。
2.3.2倒排索引
https://zh.wikipedia.org/wiki/%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95
倒排索引(Inverted index),也常被稱為反向索引蚂会、置入檔案或反向檔案,是一種索引方法耗式,被用來存儲在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射胁住。它是文檔檢索系統(tǒng)中最常用的數(shù)據(jù)結(jié)構(gòu)。通過倒排索引刊咳,可以根據(jù)單詞快速獲取包含這個單詞的文檔列表彪见。倒排索引主要由兩個部分組成:“單詞詞典”和“倒排文件”。
倒排索引有兩種不同的反向索引形式:
一條記錄的水平反向索引(或者反向檔案索引)包含每個引用單詞的文檔的列表娱挨。
一個單詞的水平反向索引(或者完全反向索引)又包含每個單詞在一個文檔中的位置余指。
后者的形式提供了更多的兼容性(比如短語搜索),但是需要更多的時(shí)間和空間來創(chuàng)建。
現(xiàn)代搜索引擎的索引都是基于倒排索引酵镜。相比“簽名文件”碉碉、“后綴樹”等索引結(jié)構(gòu),“倒排索引”是實(shí)現(xiàn)單詞到文檔映射關(guān)系的最佳實(shí)現(xiàn)方式和最有效的索引結(jié)構(gòu)淮韭。
2.3.2.1構(gòu)建方法
構(gòu)建方法有簡單法和合并法兩種垢粮。
簡單法:
索引的構(gòu)建相當(dāng)于從正排表到倒排表的建立過程。當(dāng)我們分析完網(wǎng)頁時(shí),得到的是以網(wǎng)頁為主碼的索引表靠粪。當(dāng)索引建立完成后,應(yīng)得到倒排表,流程描述如下:
1)將文檔分析成單詞term蜡吧,
2)使用hash去重單詞term
3)對單詞生成倒排列表
倒排列表就是文檔編號DocID,沒有包含其他的信息(如詞頻占键,單詞位置等)昔善,這就是簡單的索引。
這個簡單索引功能可以用于小數(shù)據(jù)畔乙,例如索引幾千個文檔君仆。然而它有兩點(diǎn)限制:
1)需要有足夠的內(nèi)存來存儲倒排表,對于搜索引擎來說啸澡,都是G級別數(shù)據(jù)袖订,特別是當(dāng)規(guī)模不斷擴(kuò)大時(shí),我們根本不可能提供這么多的內(nèi)存。
2)算法是順序執(zhí)行嗅虏,不便于并行處理洛姑。
合并法:
歸并法,即每次將內(nèi)存中數(shù)據(jù)寫入磁盤時(shí)皮服,包括詞典在內(nèi)的所有中間結(jié)果信息都被寫入磁盤楞艾,這樣內(nèi)存所有內(nèi)容都可以被清空,后續(xù)建立索引可以使用全部的定額內(nèi)存龄广。
合并流程:
1)頁面分析硫眯,生成臨時(shí)倒排數(shù)據(jù)索引A,B择同,當(dāng)臨時(shí)倒排數(shù)據(jù)索引A两入,B占滿內(nèi)存后,將內(nèi)存索引A敲才,B寫入臨時(shí)文件生成臨時(shí)倒排文件裹纳,
2)對生成的多個臨時(shí)倒排文件,執(zhí)行多路歸并,輸出得到最終的倒排文件(
inverted file)。
索引創(chuàng)建過程中的頁面分析,特別是分詞為主要時(shí)間開銷紧武。算法的第二步相對很快剃氧。這樣創(chuàng)建索引算法的優(yōu)化就集中在分詞效率上了。
2.3.2.2更新策略
更新策略有四種:完全重建阻星、再合并策略朋鞍、原地更新策略以及混合策略。
1)完全重建策略:當(dāng)新增文檔到達(dá)一定數(shù)量,將新增文檔和原先的老文檔整合滥酥,然后利用靜態(tài)索引創(chuàng)建方法對所有文檔重建索引更舞,新索引建立完成后老索引會被遺棄。此法代價(jià)高恨狈,但是主流商業(yè)搜索引擎一般是采用此方式來維護(hù)索引的更新疏哗。
2)再合并策略:當(dāng)新增文檔進(jìn)入系統(tǒng),解析文檔禾怠,之后更新內(nèi)存中維護(hù)的臨時(shí)索引返奉,文檔中出現(xiàn)的每個單詞,在其倒排表列表末尾追加倒排表列表項(xiàng)吗氏;一旦臨時(shí)索引將指定內(nèi)存消耗光芽偏,即進(jìn)行一次索引合并,這里需要倒排文件里的倒排列表存放順序已經(jīng)按照索引單詞字典順序由低到高排序弦讽,這樣直接順序掃描合并即可污尉。其缺點(diǎn)是:因?yàn)橐尚碌牡古潘饕募詫纤饕械暮芏鄦卧~往产,盡管其在倒排列表并未發(fā)生任何變化被碗,也需要將其從老索引中取出來并寫入新索引中,這樣對磁盤消耗是沒必要的仿村。
3)原地更新策略:試圖改進(jìn)再合并策略锐朴,在原地合并倒排表,這需要提前分配一定的空間給未來插入蔼囊,如果提前分配的空間不夠了需要遷移焚志。實(shí)際顯示,其索引更新的效率比再合并策略要低畏鼓。
4)混合策略:出發(fā)點(diǎn)是能夠結(jié)合不同索引更新策略的長處酱酬,將不同索引更新策略混合,以形成更高效的方法云矫。
四膳沽、Solr
http://www.importnew.com/12707.html
搜索總體上劃分為兩個過程索引和搜索。
1.索引(Indexing)
Sorl/Lucene采用的是方向索引方式让禀,即從關(guān)鍵詞到文檔的映射過程贵少。
通過構(gòu)建關(guān)鍵詞和文檔之間的關(guān)系,在查詢關(guān)鍵詞的過程中能夠快速定位文檔位置堆缘。
索引創(chuàng)建步驟:
1.1索引文檔詞條化(文檔Document-詞匯單元Token)
把原始待索引文檔內(nèi)容交給分詞組件(Tokenizer),分詞組件通過Tokenize過程將文檔分解為詞匯單元(Token)普碎。
其中Tokenize過程包含這些操作:
1.將文檔分成單詞
2.去除文檔中的標(biāo)點(diǎn)符號
3.去除停詞(Stop word)(停詞吼肥,即語言之中的助詞,謂語等沒有實(shí)際含義的詞。例:英語中的“a”缀皱,“the”斗这,中文中的“啊”,“唉”啤斗,“之”表箭,“乎”,“者”钮莲,“也”等)
1.2語言分析再處理(詞匯單元Token-詞Term)
此過程是語言處理組件(Linguistic Processor)對詞匯單元Token的再處理工作免钻,通常是根據(jù)不同的語種來進(jìn)行相應(yīng)的特性處理,如英語語種會進(jìn)行的操作:變?yōu)樾懀↙owercase)崔拥,單詞縮為詞根形式(stemming)极舔,單詞轉(zhuǎn)變?yōu)樵~根形式(Lemmatization)等。
詞匯單元Token經(jīng)過此過程處理后的到詞(Term)
1.3倒排索引構(gòu)建索引庫
此過程會由索引組件(Indexer)將上一步的詞Term與文檔Document之間建立索引關(guān)系链瓦,從而形成索引庫拆魏。在這個過程中索引組件會對所有的詞進(jìn)行創(chuàng)建詞典,排序慈俯,和合并相同詞等操作渤刃,從而保證可檢索詞的唯一性。
索引庫中包含了一下幾列:詞(Term)贴膘,文檔頻率(Document Frequency)卖子,文檔中則擁有文檔ID(Document ID),頻率(Frequency)步鉴。其中:
詞(Term)揪胃,即為構(gòu)建索引庫后要檢索的關(guān)鍵詞。而它對應(yīng)的文檔頻率則表明這個詞在多少篇文檔中出現(xiàn)了氛琢。
文檔中的文檔ID用來和詞鏈接喊递,從而能根據(jù)詞索引到文檔,而頻率則說明了阳似,所搜索的詞在該文檔中出現(xiàn)的次數(shù)骚勘。
2.搜索(Search)
搜索是面向用戶接口的主要操作,對檢索的處理是搜索技術(shù)是否能夠達(dá)到預(yù)期效果的重要一步撮奏。
技術(shù)原理核心-空間向量模型
https://zh.wikipedia.org/wiki/%E5%90%91%E9%87%8F%E7%A9%BA%E9%96%93%E6%A8%A1%E5%9E%8B
我們在構(gòu)建索引時(shí)俏讹,將文檔切分為Term,那么當(dāng)我們要根據(jù)關(guān)鍵詞或者語句進(jìn)行檢索時(shí)畜吊,怎么通過語句來尋找Term泽疆,再通過Term來找到對應(yīng)的文檔呢?
反過來想玲献,根據(jù)面向文檔的思想殉疼,其實(shí)用戶界面輸入的關(guān)鍵詞也是一篇文檔梯浪。那么當(dāng)我們使用構(gòu)建索引的操作對關(guān)鍵詞進(jìn)行分詞構(gòu)建索引之后,通過這些索引去搜索匹配索引數(shù)據(jù)庫中的索引瓢娜,就可以找到相對應(yīng)的結(jié)果了挂洛。
而匹配搜索之后我們需要根據(jù)關(guān)鍵詞和各文檔之間的相關(guān)性進(jìn)行排序,這時(shí)候之前對關(guān)鍵詞構(gòu)建的索引又派上了用場眠砾。這里我們就可以使用空間向量模型算法來評價(jià)文檔結(jié)果集中的文檔的索引和關(guān)鍵詞索引之間的相關(guān)性了虏劲。
這個過程,其實(shí)就是尋找在兩篇文檔中褒颈,哪些詞對文檔之間關(guān)系的更重要柒巫,哪些最重要,主要文檔中的詞在待匹配文檔中出現(xiàn)頻率的高低的過程哈肖,這個判斷關(guān)鍵詞的Term對文檔的Term的重要性的過程稱為計(jì)算詞的權(quán)重(Term Weight)的過程吻育。
計(jì)算詞的權(quán)重有兩個參數(shù):一是詞(Term),二是文檔(Document)淤井。詞的權(quán)重表示此詞在文檔中的重要程度布疼,越重要的詞有越大的權(quán)重,因?yàn)閕在計(jì)算文檔之間的相關(guān)性中將發(fā)揮更大的作用币狠。
向量空間模型算法就可以用來判斷詞之間的關(guān)系游两,從而量化得到文檔之間的相關(guān)性。
1.計(jì)算權(quán)重(Term Weight)的過程
影響一個詞(Term)在一篇文檔中的重要性主要有兩個因素:
1)Term Frequency (tf):即此Term在此文檔中出現(xiàn)了多少次漩绵。tf越大說明越重要贱案。
2)Document Frequency
(df):即有多少文檔包含次Term。df越大說明越不重要止吐。
當(dāng)一個Term在某篇文檔中出現(xiàn)的次數(shù)越多宝踪,即tf越大,說明文檔的主要工作都是在介紹或者重點(diǎn)引用這個概念碍扔,那么他們之間的相關(guān)性也就越高瘩燥,權(quán)重越大。而當(dāng)很多的文檔都包含這一個Term時(shí)不同,這個Term對文檔的區(qū)分性就越差厉膀,即通過df指標(biāo)非常大的Term更不能區(qū)分出文檔之間的相關(guān)性,所以表現(xiàn)為權(quán)重越不重要二拐。
上公式即為計(jì)算權(quán)重的一個簡單典型服鹅,實(shí)際情況可能會有不同,但基本比相同百新。
2.判斷Term之間的關(guān)系從而得到文檔相關(guān)性的過程企软,也即向量空間模型(VSM)的算法
我們把文檔看做一系列Term,通過和關(guān)鍵詞文檔的Term的計(jì)算饭望,每一個詞都獲得了一個權(quán)重澜倦,通過空間向量模型算法聚蝶,根據(jù)這些權(quán)重,來為不同詞與文檔的相關(guān)性計(jì)算打分藻治。
我們把文檔中的詞的全助攻看做一個向量:
Document = {term1, term2, …… ,term N}
Document Vector = {weight1, weight2, ……,weight N}
也同樣把關(guān)鍵詞看做一個文檔,用向量來表示它們:
Query = {term1, term 2, …… , term N}
Query Vector = {weight1, weight2, …… ,weight N}
把所有搜索出來的文檔向量以及查詢向量放到一個N維空間中巷挥,每個Term是一個維度桩卵。向量空間的維度數(shù)取二者的Term集合的并集。
當(dāng)兩個向量之間的夾角倍宾,即余弦值越小雏节,我們就人為他們的相關(guān)性越大,所計(jì)算得到的相關(guān)性得分也就越高高职。相關(guān)性的分值計(jì)算公式如下:通過將關(guān)鍵詞文檔與檢索結(jié)果集中的各文檔的打分分值钩乍,進(jìn)行降序排序,就得到了這個關(guān)鍵詞檢索后的具有相關(guān)性排序的結(jié)果列表怔锌。2.1對查詢內(nèi)容進(jìn)行詞法分析寥粹、語法分析、語言處理
詞法分析埃元,即區(qū)分查詢內(nèi)容中的單詞與關(guān)鍵字涝涤。關(guān)鍵字例如:“and”,“not”等岛杀。
語法分析阔拳,通過語法分析將查詢單詞與關(guān)鍵字區(qū)分開來之后,根據(jù)定義好的語法規(guī)則类嗤,形成語法樹糊肠。
語言處理,類似于索引階段的語言分析處理部分遗锣,將包含數(shù)量和時(shí)態(tài)等屬性的單詞轉(zhuǎn)變?yōu)樗脑驮~货裹。例:“bananas”的原型詞為“banana”,“gone”或“went”的原型詞為“go”黄伊。
2.2搜索索引泪酱,得到符合語法樹的文檔集合
將經(jīng)過詞法分析、語法分析还最、語言處理過后的語法樹墓阀,在構(gòu)建好的索引庫中進(jìn)行隨機(jī)查詢,初步得到所有符合語法樹的文檔集合拓轻。
2.3根據(jù)查詢語句與文檔的相關(guān)性斯撮,對結(jié)果進(jìn)行排序
相關(guān)性處理詳見“技術(shù)原理核心-控件向量模型”一節(jié)。
實(shí)際應(yīng)用中扶叉,相關(guān)性的計(jì)算因素不只有文檔分詞權(quán)重勿锅,在商業(yè)化運(yùn)營中帕膜,如百度就發(fā)展出了相當(dāng)豐富的如競價(jià)排名的更多的相關(guān)性計(jì)算因素。
相關(guān)性的技術(shù)原理是空間向量模型溢十,其本身也具有一些局限性:
1.不適用于較長的文檔垮刹,因?yàn)樗南嗨浦挡焕硐耄ㄟ^小的內(nèi)積和過高的維數(shù))。
2.檢索詞組必須與文檔中出現(xiàn)的詞組精確匹配张弛;詞語子字串可能會導(dǎo)致“假陽性”匹配荒典。
3.語義敏感度不佳;具有相同的語境但使用不同的詞組的文檔不能被關(guān)聯(lián)起來吞鸭,導(dǎo)致“假陰性匹配”寺董。
4.詞組在文檔中出現(xiàn)的順序在向量形式中無法表示出來。
5.假定詞組在統(tǒng)計(jì)上是獨(dú)立的刻剥。
6.權(quán)重是直觀上獲得的而不夠正式遮咖。
因此,在相關(guān)性排序時(shí)造虏,可以利用其它的數(shù)學(xué)技術(shù)如奇異值分解或詞匯數(shù)據(jù)庫的方式對算法局限進(jìn)行彌補(bǔ)御吞。
五、ElasticSearch
1.相關(guān)概念
1.1集群-節(jié)點(diǎn)
單個節(jié)點(diǎn)可以作為一個運(yùn)行中的Elasticsearch的實(shí)例酗电。而一個集群是一組擁有相同cluster.name的節(jié)點(diǎn)魄藕,他們能一起工作并共享數(shù)據(jù),還提供容錯與可伸縮性撵术。(當(dāng)然背率,一個單獨(dú)的節(jié)點(diǎn)也可以組成一個集群)
多節(jié)點(diǎn)組成的集群擁有冗余能力,它可以在一個或幾個節(jié)點(diǎn)出現(xiàn)故障時(shí)保證服務(wù)的整體可用性嫩与。
1.2面向文檔(DO)
在應(yīng)用程序中對象很少只是一個簡單的鍵和值的列表寝姿。通常,它們擁有更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)划滋,可能包括日期饵筑、地理信息、其他對象或者數(shù)組等处坪。
也許有一天你想把這些對象存儲在數(shù)據(jù)庫中根资。使用關(guān)系型數(shù)據(jù)庫的行和列存儲,這相當(dāng)于是把一個表現(xiàn)力豐富的對象擠壓到一個非常大的電子表格中:你必須將這個對象扁平化來適應(yīng)表結(jié)構(gòu)--通常一個字段對應(yīng)一列而且又不得不在每次查詢時(shí)重新構(gòu)造對象同窘。
Elasticsearch是面向文檔的玄帕,意味著它存儲整個對象或文檔。Elasticsearch不僅存儲文檔想邦,而且索引每個文檔的內(nèi)容使之可以被檢索裤纹。在Elasticsearch中,你對文檔進(jìn)行索引丧没、檢索鹰椒、排序和過濾锡移,而不是對行列數(shù)據(jù)。這是一種完全不同的思考數(shù)據(jù)的方式漆际,也是Elasticsearch能支持復(fù)雜全文檢索的原因淆珊。
1.3索引的概念
名詞關(guān)系:
集群-索引-類型-文檔-屬性:
一個Elasticsearch集群可以包含多個索引,相應(yīng)的每個索引可以包含多個類型奸汇。這些不同的類型存儲著多個文檔套蒂,每個文檔又有多個屬性。
索引(名詞):如前所述茫蛹,一個索引類似于傳統(tǒng)關(guān)系數(shù)據(jù)庫中的一個數(shù)據(jù)庫,是一個存儲關(guān)系型文檔的地方烁挟。
索引(動詞):索引一個文檔就是存儲一個文檔到一個索引(名詞)中以便它可以被檢索和查詢到婴洼。這非常類似于SQL語句中的INSERT關(guān)鍵詞,除了文檔已存在時(shí)新文檔會替換舊文檔情況之外撼嗓。
倒排索引:關(guān)系型數(shù)據(jù)庫通過增加一個索引比如一個B樹(B-tree)索引到指定的列上柬采,以便提升數(shù)據(jù)檢索速度。Elasticsearch和Lucene使用了一個叫做倒排索引的結(jié)構(gòu)來達(dá)到相同的目的且警。
默認(rèn)的粉捻,一個文檔中的每一個屬性都是被索引的(有一個倒排索引)和可搜索的。一個沒有倒排索引的屬性是不能被搜索到的斑芜。
1.4分片(Shard)和副本(Replica)
ES的“分片(shard)”機(jī)制可將一個索引內(nèi)部的數(shù)據(jù)分布地存儲于多個節(jié)點(diǎn)肩刃,它通過將一個索引切分為多個底層物理的Lucene索引完成索引數(shù)據(jù)的分割存儲功能,這每一個物理的Lucene索引稱為一個分片(shard)杏头。
每個分片其內(nèi)部都是一個全功能且獨(dú)立的索引盈包,因此可由集群中的任何主機(jī)存儲。創(chuàng)建索引時(shí)醇王,用戶可指定其分片的數(shù)量呢燥,默認(rèn)數(shù)量為5個。
Shard有兩種類型:primary和replica寓娩,即主shard及副本shard叛氨。
Primary shard用于文檔存儲,每個新的索引會自動創(chuàng)建5個Primary
shard棘伴,當(dāng)然此數(shù)量可在索引創(chuàng)建之前通過配置自行定義寞埠,不過,一旦創(chuàng)建完成排嫌,其Primary shard的數(shù)量將不可更改畸裳。
Replica shard是Primary Shard的副本,用于冗余數(shù)據(jù)及提高搜索性能淳地。
特點(diǎn):
1.每個Primary shard默認(rèn)配置了一個Replica
shard怖糊,但也可以配置多個帅容,且其數(shù)量可動態(tài)更改。ES會根據(jù)需要自動增加或減少這些Replica shard的數(shù)量伍伤。
2. ES集群可由多個節(jié)點(diǎn)組成并徘,各Shard分布式地存儲于這些節(jié)點(diǎn)上。
3. ES可自動在節(jié)點(diǎn)間按需要移動shard扰魂,例如增加節(jié)點(diǎn)或節(jié)點(diǎn)故障時(shí)麦乞。簡而言之,分片實(shí)現(xiàn)了集群的分布式存儲劝评,而副本實(shí)現(xiàn)了其分布式處理及冗余功能姐直。
2.原理示意圖
著名的開源程序Lucene是索引組件,它提供了搜索程序的核心索引和搜索模塊蒋畜,例如圖中的“Index”及下面的部分声畏;而ElasticSearch則更像一款搜索組件,它利用Lucene進(jìn)行文檔索引姻成,并向用戶提供搜索組件插龄,例如“Index”上面的部分。二者結(jié)合起來組成了一個完整的搜索引擎科展。
3.深入知識討論
3.1ES的精確值(Exact Values)和全文(full-text)類型
ES的數(shù)據(jù)可被廣義的分為兩種類型:“types:exact”和“full-text”均牢。
精確值(Exact values)就是指數(shù)據(jù)未曾加工過的原始值,而Full-text則用于引用文本中的數(shù)據(jù)才睹。
在查詢中徘跪,精確值是很容易進(jìn)行搜索的,但full-text則需要判斷文檔在“多大程度上”匹配查詢請求砂竖,換句話講真椿,即需要評估文檔與給定查詢的相關(guān)度(relevant)。
所謂的full-text查詢通常是指在給定的文本域內(nèi)部搜索指定的關(guān)鍵字乎澄,但搜索操作需要真正理解查詢者的目的突硝。為了完成此類full-text域的搜索,ES必須首先分析文本并將其構(gòu)建成為倒排索引(inverted index)置济,倒排索引由各文檔中出現(xiàn)的單詞列表組成解恰,列表中的各單詞不能重復(fù)且需要指向其所在的各文檔。
3.2倒排索引
倒排索引的原理在第三部分2小節(jié)已經(jīng)介紹浙于,這里主要介紹ES下的構(gòu)建分詞過程护盈。
3.2.1分析
如上一小節(jié)所講,倒排索引構(gòu)建完成之后的索引要保證能夠完成full-text的搜索工作羞酗,那么在構(gòu)建索引過程中進(jìn)行對應(yīng)的分詞(Tokenization)操作就是必要的過程腐宋。這個過程會將文檔中域的值切分為獨(dú)立的單詞(Term或Token)。
知道了搜索所使用的空間向量模型原理后,我們知道胸竞,要在搜索結(jié)果完成后進(jìn)行相應(yīng)的匹配欺嗤,那么在構(gòu)建索引和搜索時(shí)構(gòu)建索引的過程中,使用的分詞語法規(guī)則必須是統(tǒng)一的卫枝,一致的煎饼。在ES中,這個過程叫做正規(guī)化(Normalization)校赤。通過將數(shù)據(jù)統(tǒng)一為一個標(biāo)準(zhǔn)格式吆玖,從而方便搜索匹配以及結(jié)果相關(guān)性的衡量。
這里的分詞(Tokenization)以及正規(guī)化(Normalization)也稱為分析(Analysis)马篮。
分析過程有兩個步驟的操作組成沾乘,都由指定的分析器(Analyzers)完成:
1)首先,將文本切分為Term以適合構(gòu)建倒排索引浑测;
2)其次意鲸,將各Term正規(guī)化為標(biāo)準(zhǔn)格式以提升其“可搜索度”。
3.2.2分析器
一個分析器通常由三個組件構(gòu)成:字符過濾器(Character filters)尽爆、分詞器(Tokenizer)和分詞過濾器(Token filters)組成。
字符過濾器(Character
filters):在文本被切割之前進(jìn)行清理操作读慎,例如移除HTML標(biāo)簽漱贱,將&替換為字符等;
分詞器(Tokenizer):將文本切分為獨(dú)立的詞項(xiàng)夭委;簡單的分詞器通常是根據(jù)空白及標(biāo)點(diǎn)符號進(jìn)行切分幅狮;
分詞過濾器(Token
filters):轉(zhuǎn)換字符(如將大寫轉(zhuǎn)為小寫)潦嘶、移除詞項(xiàng)(如移除a碳胳、an拢操、of及the等)或者添加詞項(xiàng)(例如鸭丛,添加同義詞)炎码;
Elasticsearch內(nèi)置了許多字符過濾器揭斧、分詞器和分詞過濾器刚夺,用戶可按需將它們組合成“自定義”的分析器钥屈。
固然屹蚊,創(chuàng)建倒排索引時(shí)需要用到分析器厕氨,但傳遞搜索字符串時(shí)也可能需要分析器,甚至還要用到與索引創(chuàng)建時(shí)相同的分析器才能保證單詞匹配的精確度汹粤。
執(zhí)行full-text域搜索時(shí)命斧,需要用到分析器,但執(zhí)行精確值搜索時(shí)嘱兼,查詢過程不會分析查詢字符串而是直接進(jìn)行精確值匹配国葬。
3.3ES的數(shù)據(jù)查詢
查詢執(zhí)行過程通常要分成兩個階段,分散階段及合并階段。分散階段是向所查詢的索引中的所有shard發(fā)起執(zhí)行查詢的過程汇四;合并階段是將各shard返回的結(jié)果合并接奈、排序并響應(yīng)給客戶端的過程。
向ElasticSearch發(fā)起查詢操作有兩種方式:一是通過RESTful request API傳遞查詢參數(shù)船殉,也稱“query-string”鲫趁;另一個是通過發(fā)送REST request body,也稱作JSON格式利虫。而REST形式的請求保證了ES可以做到跨平臺和跨語言挨厚。
ES的查詢語句稱為Query DSL,它分為兩種:查詢DSL(query DSL)和過濾DSL(filter
DSL)糠惫。
兩種DSL的區(qū)別:
1)就使用場景來說疫剃,當(dāng)執(zhí)行full-text查詢或查詢結(jié)果依賴于相關(guān)度分值時(shí)應(yīng)該使用查詢DSL,當(dāng)執(zhí)行精確值(extac-value)查詢或查詢結(jié)果僅有“yes”或“no”兩種結(jié)果時(shí)應(yīng)該使用過濾DSL硼讽。
2)Filter
DSL計(jì)算及過濾速度較快巢价,且適于緩存,因此可有效提升后續(xù)查詢請求的執(zhí)行速度固阁。而query DSL不僅要查找匹配的文檔壤躲,還需要計(jì)算每個文件的相關(guān)度分值,因此為更重量級的查詢备燃,其查詢結(jié)果不會被緩存碉克。不過,由于倒排索引方式的緣故并齐,一個僅返回少量文檔的簡單query或許比一個跨數(shù)百萬文檔的filter執(zhí)行起來并不顯得更慢漏麦。
3)Queries用于查詢上下文,而filters用于過濾上下文况褪,不過撕贞,Elasticsearch的API也支持此二者合并運(yùn)行。組合查詢可用于合并查詢子句测垛,組合過濾用于合并過濾子句捏膨,然而,Elasticsearch的使用習(xí)慣中食侮,也常會把filter用于query上進(jìn)行過濾脊奋。不過,很少有機(jī)會需要把query用于filter上的疙描。
4.主要特性:
1.實(shí)時(shí)文檔存儲诚隙,文檔對象的每個field都建立了索引,都能被檢索
2.構(gòu)建適應(yīng)于不同規(guī)模的應(yīng)用的體系結(jié)構(gòu)起胰,在此之上實(shí)現(xiàn)分布式搜索久又。
3.為其他平臺系統(tǒng)提供了具有rest風(fēng)格的原生java api巫延。也有hadoop的依賴包
4.簡單可用性強(qiáng),不需要對搜索原理有深入的理解地消。平臺有免費(fèi)模式炉峰。
具有可伸縮性,靈活的構(gòu)建和易用性脉执。提供一個易用性的平臺疼阔,進(jìn)行規(guī)模擴(kuò)展時(shí)無需考慮核心功能與用戶自定義選項(xiàng)間妥協(xié)。
5.應(yīng)用
使用廠商:Dell半夷、ebay婆廊、Fackbook、netflix等巫橄。
應(yīng)用場景:熱點(diǎn)圖淘邻,交通情況地理信息圖等需要實(shí)時(shí)數(shù)據(jù)搜索和顯示的場景,數(shù)據(jù)更新頻繁的場景等湘换。
1)2013年初宾舅,GitHub拋棄了Solr,采取ElasticSearch來做PB級的搜索彩倚〕镂遥“GitHub使用ElasticSearch搜索20TB的數(shù)據(jù),包括13億文件和1300億行代碼”帆离。
2)維基百科:啟動以elasticsearch為基礎(chǔ)的核心搜索架構(gòu)崎溃。
3)SoundCloud:“SoundCloud使用ElasticSearch為1.8億用戶提供即時(shí)而精準(zhǔn)的音樂搜索服務(wù)”。
4)百度:百度目前廣泛使用ElasticSearch作為文本數(shù)據(jù)分析盯质,采集百度所有服務(wù)器上的各類指標(biāo)數(shù)據(jù)及用戶自定義數(shù)據(jù),通過對各種數(shù)據(jù)進(jìn)行多維分析展示概而,輔助定位分析實(shí)例異澈粝铮或業(yè)務(wù)層面異常。目前覆蓋百度內(nèi)部20多個業(yè)務(wù)線(包括casio赎瑰、云分析王悍、網(wǎng)盟、預(yù)測餐曼、文庫压储、直達(dá)號、錢包源譬、風(fēng)控等)集惋,單集群最大100臺機(jī)器,200個ES節(jié)點(diǎn)踩娘,每天導(dǎo)入30TB+數(shù)據(jù)刮刑。
另外,新浪,阿里雷绢,有贊等著名公司也開始了ES方面的技術(shù)研發(fā)和實(shí)踐泛烙。
六、Solr和ElasticSearch的不同
1.Solr利用Zookeeper進(jìn)行分布式管理翘紊;而Elasticsearch自身帶有分布式協(xié)調(diào)管理功能;
2.Solr支持更多格式的數(shù)據(jù)json蔽氨,XML等;而Elasticsearch僅支持json文件格式帆疟;
3.Solr官方提供的功能更多鹉究;而Elasticsearch本身更注重于核心功能,高級功能多由第三方插件提供鸯匹;
4.Solr在傳統(tǒng)的搜索應(yīng)用中表現(xiàn)好于Elasticsearch坊饶,但在處理實(shí)時(shí)搜索應(yīng)用時(shí)效率明顯低于Elasticsearch。
5.Solr是傳統(tǒng)搜索應(yīng)用的有力解決方案殴蓬,但Elasticsearch更適用于新興的實(shí)時(shí)搜索應(yīng)用匿级。
Ps:走過的路,每一步都算數(shù)染厅,沉淀我所學(xué)習(xí)痘绎,累積我所見聞,分享我所體驗(yàn);