*面對基於全球用戶消費和產生的大數據,爲了對用戶請求及時響應,咱們對非關係型數據存儲和處理技術愈來愈關注。稱爲No SQL (Not only SQL )。對不一樣類型的數據有單獨的存儲和處理引擎。也就是說,NoSQL是對解決一類具體問題具體數據類型的優化。架構師組合多NoSQL和關係數據庫。一種類型適應全部數據的時代已通過去了!java
*Apache Solr就是一種具體的NOSQL技術。Solr就是針對檢索大規模文本並返回相關性排序的企業搜索引擎。基本特性web
*Scalable:可部署於多服務器的集羣算法
*Ready to deploy:提供完善的程序,能夠馬上部署使用數據庫
*Optimized for search:快速搜索複雜query的能力express
*Large volumes of documents:apache
*Text-centric:對天然語言的檢索內容優化編程
*Results sorted by relevance:文檔與query的相關性排序json
1.1 Why do I need a search engine?緩存
1.1.1 Managing text-centric data安全
現代應用架構的特色是存儲和處理引擎與你的數據相匹配。正如算法問題要選擇合適的數據結構,Solr基於以下四個特色優化:
1.Text-centric
2.Read-dominant
3.Document-oriented
4.Flexible schema
上述四條揭示了solr不是一種通用的數據存儲和處理技術,而是關係數據庫和NOSQL數據庫基於搜索問題的補充!
1.1.2 Common search-engine use cases
優秀的搜索引擎的門檻bar?是高的
應該把用戶體驗放在一個高的優先級
*BASIC KEYWORD SEARCH
是用戶的最基本需求,必須提供最好的用戶體驗!
■快速返回
■拼寫檢查
■自動關鍵詞推薦,尤爲對於移動應用
■query同義詞識別
■與query同義的文檔必須匹配
■語法處理:是匹配全部詞仍是任一個詞
■中止詞處理:a,an,the等
■若是對首頁結果不滿意,user能夠看到更多的結果
*RANKED RETRIEVAL
SQL返回要麼匹配結果,Solr返回基於相關性排序的結果
*BEYOND KEYWORD SEARCH
用戶對搜索需求不明確,Solr提供例如分類技術facet search幫助用戶
*DON 'T USE A SEARCH ENGINE TO ...
Solr提供搜索分頁技術,如過要求不分頁但返回文檔巨大,則會很是慢!(query結果很快,但生成結果很慢!)
對索引結構的深度分析(除非你有很大的內存)?
不提供文檔相關性的query
不提共文檔級別的安全性,若是需求,則須要外部的程序
1.2What is Solr?
Solr不是網頁搜索引擎如google,baidu
Solr與SEO沒有任何關係
1.2.1Information retrieval engine
基於apache lucene
Information retrieval (IR) is finding material (usually documents) of an
unstructured nature (usually text) that satisfies an information need from
within large collections (usually stored on computers).
solr使用lucene的索引和搜索庫
lucene倒排索引保存文檔id和索引出現頻率
1.2.2Flexible schema management
Lucene只提供核心庫,若是要使用lucene,還須要大量的java編程。
solr提供了方便的配置程序,只須要配置幾個xml就能夠運行搜索程序。
1.2.3Java web application
solr的分佈式架構圖
solr提供基於http,xml,json等協議的服務,同時也提供各類流行編程語言的API。(主要使用Java的API——SolrJ)
1.2.4Multiple indexes in one server
但服務器可運行多個core
1.2.5可擴展性:插件系統能夠方便的定製需求
1.2.6Scalable
單機系統有侷限
solr提供緩存管理
query吞吐量和索引文檔數量
吞吐量:經過複製索引,可讓多服務器處理query(實踐中,處理能力不是線性增加的,例如3臺服務器的處理能力多是2.5)
文檔數量:將索引分紅"shards"
Solr能夠部署到雲平臺的虛擬硬件上,但搜索是對內存和IO敏感的,若是對搜索性能有較高的要,則須要高端的硬件。
1.2.7容錯
確保集羣中部分服務器出錯,solr還能正常運行
1.3 Why Solr?
1.3.1 Solr for the software architect
穩定性,分佈式,容錯性都表現出色!
SolrCloud使用Zookeeper管理分佈式系統
1.3.2Solr for the system administrator
solr內置了Jetty,
支持HTTP,JMX等等
提供一個web管理界面
1.3.3Solr for the CEO
many companies are still running on Solr
you can have it up and running in minutes
Solr has a large support community,You also have access to the source code
Solr doesn’t require much initial investment to get started.
1.4Features overview
1.4.1User-experience features:用戶體驗特性
*Pagination and sorting:分頁和排序:更快的顯示,相關性排序
*FACETING:層面搜索(分類):提煉搜索結果
*AUTOSUGGEST:拼寫推薦
*SPELL - CHECKER:拼寫檢查
*highlight
*地圖搜索
1.4.2 Data-modeling features
*RESULT GROUPING / FIELD COLLAPSING:基於文檔的共同特徵分組(不一樣於facet是基於field分組)
例如類似內容的email將會分到一組
*FLEXIBLE QUERY SUPPORT:
Conditional logic using AND , OR , and NOT
Wildcard matching
Range queries for dates and numbers
Phrase queries with slop to allow for some distance between terms?
Fuzzy string matching:模糊匹配
Regular expression matching
Function queries
*Join
With Solr joins, you can return child documents of parents that match your search criteria. One example in which Solr joins are useful is returning all retweets of a Twitter message into a single response.
*DOCUMENT CLUSTERING
怎麼又來了個聚類%>_<%用於刪除重複的query結果,只顯示一個結果
*IMPORTING RICH DOCUMENT FORMATS SUCH AS PDF AND WORD
使用Apache Tika提取二進制文件
*IMPORTING DATA FROM RELATIONAL DATABASES
Data Import Handler
MULTILINGUAL SUPPORT:多語言支持