1、Lucene和Solr和Elasticsearch的差別
- Lucene
Lucene是apache下的一個子項目,是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。官網位址:https://lucene.apache.org/
- Solr
Solr是一個高性能,采用Java5開發,基于Lucene的全文搜尋伺服器。同時對其進行了擴充,提供了比Lucene更為豐富的查詢語言,同時實作了可配置、可擴充并對查詢性能進行了優化,并且提供了一個完善的功能管理界面,是一款非常優秀的全文搜尋引擎。官網位址:http://lucene.apache.org/solr/
- Elasticsearch
Elasticsearch跟Solr一樣,也是一個基于Lucene的搜尋伺服器,它提供了一個分布式多使用者能力的全文搜尋引擎,基于RESTful web接口。官網位址:https://www.elastic.co/products/elasticsearch
1、Elasticsearch的優缺點:
- 優點:
1.Elasticsearch是分布式的。不需要其他元件,分發是實時的,被叫做"Push replication"。
2.Elasticsearch 完全支援 Apache Lucene 的接近實時的搜尋。
3.處理多租戶(multitenancy)不需要特殊配置,而Solr則需要更多的進階設定。
4.Elasticsearch 采用 Gateway 的概念,使得完備份更加簡單。
5.各節點組成對等的網絡結構,某些節點出現故障時會自動配置設定其他節點代替其進行工作。
- 缺點:
1.隻有一名開發者(目前Elasticsearch GitHub組織已經不隻如此,已經有了相當活躍的維護者)
2.還不夠自動(不适合目前新的Index Warmup API)
2、Solr的優缺點:
- 優點
1.Solr有一個更大、更成熟的使用者、開發和貢獻者社群。
2.支援添加多種格式的索引,如:HTML、PDF、微軟 Office 系列軟體格式以及 JSON、XML、CSV 等純文字格式。
3.Solr比較成熟、穩定。
4.不考慮建索引的同時進行搜尋,速度更快。
- 缺點
1.建立索引時,搜尋效率下降,實時索引搜尋效率不高。
3、Elasticsearch 與 Solr 的比較:
1.二者安裝都很簡單;
2.Solr 利用 Zookeeper 進行分布式管理,而 Elasticsearch 自身帶有分布式協調管理功能;
3.Solr 支援更多格式的資料,而 Elasticsearch 僅支援json檔案格式;
4.Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,進階功能多有第三方插件提供;
5.Solr 在傳統的搜尋應用中表現好于 Elasticsearch,但在處理實時搜尋應用時效率明顯低于 Elasticsearch。
6.Solr 是傳統搜尋應用的有力解決方案,但 Elasticsearch 更适用于新興的實時搜尋應用。
使用案例:
1.維基百科使用Elasticsearch來進行全文搜做并高亮顯示關鍵詞,以及提供search-as-you-type、did-you-mean等搜尋建議功能。
2.英國衛報使用Elasticsearch來處理訪客日志,以便能将公衆對不同文章的反應實時地回報給各位編輯。
3.StackOverflow将全文搜尋與地理位置和相關資訊進行結合,以提供more-like-this相關問題的展現。
4.GitHub使用Elasticsearch來檢索超過1300億行代碼。
5.每天,Goldman Sachs使用它來處理5TB資料的索引,還有很多投行使用它來分析股票市場的變動。
2、相關面試題
solr如何實作搜尋的?
反向索引,先抽取文檔中詞,并建立詞與文檔id的映射關系,然後查詢的時候會根據詞去查詢文檔id,并查詢出文檔
Solr過濾器
Solr的過濾器對接收到的标記流(TokenStream )做額外的處理
過濾查詢,在查詢時設定
Solr原理
Solr是基于Lucene開發的全文檢索伺服器,而Lucene就是一套實作了全文檢索的api,其本質就是一個全文檢索的過程。全文檢索就是把原始文檔根據一定的規則拆分成若幹個關鍵詞,然後根據關鍵詞建立索引,當查詢時先查詢索引找到對應的關鍵詞,并根據關鍵詞找到對應的文檔,也就是查詢結果,最終把查詢結果展示給使用者的過程
- Solr基于什麼
基于lucene搜尋庫的一個搜尋引擎架構,lucene是一個開放源碼的全文檢索引擎工具包
- solr怎麼設定搜尋結果排名靠前
設定文檔中域的boost值,值越高相關性越高,排名就靠前
- IK分詞器原理
本質上是詞典分詞,在記憶體中初始化一個詞典,然後在分詞過程中逐個讀取字元,和字典中的字元相比對,把文檔中的所有詞語拆分出來的過程
- solr的索引查詢為什麼比資料庫要快
Solr使用的是Lucene API實作的全文檢索。全文檢索本質上是查詢的索引。而資料庫中并不是所有的字段都建立的索引,更何況如果使用like查詢時很大的可能是不使用索引,是以使用solr查詢時要比查資料庫快
- solr索引庫個别資料索引丢失怎麼辦
首先Solr是不會丢失個别資料的。如果索引庫中缺少資料,那就向索引庫中添加
- Lucene索引優化
直接使用Lucene實作全文檢索已經是過時的方案,推薦使用solr。Solr已經提供了完整的全文檢索解決方案
- 多張表的資料導入solr(解決id沖突)
在schema.xml中添加uuid,然後solrconfig那邊修改update的部分,改為使用uuid生成
- solr如何分詞,新增詞和禁用詞如何解決
schema.xml檔案中配置一個IK分詞器,然後域指定分詞器為IK
新增詞添加到詞典配置檔案中ext.dic,禁用詞添加到禁用詞典配置檔案中stopword.dic,然後在schema.xml檔案中配置禁用詞典:
- solr多條件組合查詢
建立多個查詢對象,指定他們的組合關系,Occur.MUST(必須滿足and),Occur.SHOULD(應該滿足or),Occur.MUST_NOT(必須不滿足not)
- elasticsearch 了解多少,說說你們公司 es 的叢集架構,索引資料大小,分片有多少,以及一些調優手段。elasticsearch 的反向索引是什麼。
ElasticSearch(簡稱ES)是一個分布式、Restful的搜尋及分析伺服器,設計用于分布式計算;能夠達到實時搜尋,穩定,可靠,快速。和Apache Solr一樣,它也是基于Lucence的索引伺服器,而ElasticSearch對比Solr的優點在于:
輕量級:安裝啟動友善,下載下傳檔案之後一條指令就可以啟動。
Schema free:可以向伺服器送出任意結構的JSON對象,Solr中使用schema.xml指定了索引結構。
多索引檔案支援:使用不同的index參數就能建立另一個索引檔案,Solr中需要另行配置。
分布式:Solr Cloud的配置比較複雜。
反向索引是實作"單詞-文檔矩陣"的一種具體存儲形式,通過反向索引,可以根據單詞快速擷取包含這個單詞的文檔清單。反向索引主要由兩個部分組成:"單詞詞典"和"倒排檔案"。
- elasticsearch 索引資料多了怎麼辦,如何調優,部署。
使用bulk API
初次索引的時候,把 replica 設定為 0
增大 threadpool.index.queue_size
增大 indices.memory.indexbuffersize
增大 index.translog.flushthresholdops
增大 index.translog.sync_interval
增大 index.engine.robin.refresh_interval
http://www.jianshu.com/p/5eeeeb4375d4
- lucence 内部結構是什麼
索引(Index):在Lucene中一個索引是放在一個檔案夾中的。如上圖,同一檔案夾中的所有的檔案構成一個Lucene索引。
段(Segment):一個索引可以包含多個段,段與段之間是獨立的,添加新文檔可以生成新的段,不同的段可以合并。
segments.gen和segments_X是段的中繼資料檔案,也即它們儲存了段的屬性資訊。
文檔(Document):文檔是我們建索引的基本機關,不同的文檔是儲存在不同的段中的,一個段可以包含多篇文檔。
新添加的文檔是單獨儲存在一個新生成的段中,随着段的合并,不同的文檔合并到同一個段中。
- 域(Field):
一篇文檔包含不同類型的資訊,可以分開索引,比如标題,時間,正文,作者等,都可以儲存在不同的域裡。不同域的索引方式可以不同,在真正解析域的存儲的時候,我們會詳細解讀。
- 詞(Term):
詞是索引的最小機關,是經過詞法分析和語言處理後的字元串。
solr和lucene的差別
Solr和Lucene的本質差別有以下三點:搜尋伺服器,企業級和管理。Lucene本質上是搜尋庫,不是獨立的應用程式,而Solr是。Lucene專注于搜尋底層的建設,而Solr專注于企業應用。Lucene不負責支撐搜尋服務所必須的管理,而Solr負責。是以說,一句話概括Solr: Solr是Lucene面向企業搜尋應用的擴充
Lucene: 是一個索引與搜尋類庫,而不是完整的程式。
Solr:是一個高性能,采用Java5開發,基于Lucene的一個獨立的企業級搜尋應用伺服器,它對外提供類似于Web-service的API接口。
solr 實作全文檢索
索引流程:用戶端---》solr 伺服器(發送post請求,xml文檔包含filed,solr實作對索引的維護)
搜尋流程:用戶端---》solr 伺服器(發送get 請求,伺服器傳回一個xml 文檔)
solr和lucene之間的差別
lucene全文檢索的工具包,jar包
solr全文檢索伺服器,單獨運作的servlet容器
作者:Ms_lang