SlorRedis話術(shù)_第1頁
SlorRedis話術(shù)_第2頁
SlorRedis話術(shù)_第3頁
SlorRedis話術(shù)_第4頁
SlorRedis話術(shù)_第5頁
已閱讀5頁,還剩58頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Solr:是一種開放源碼的、基于 LuceneJava的搜索服務器,易于加入到 Web 應用程序中。Solr 提供了層面搜索(就是統(tǒng)計)、命中醒目顯示并且支持多種輸出格式(包括XML/XSLT 和JSON等格式)。它易于安裝和配置,而且附帶了一個基于HTTP 的管理界面??梢允褂?Solr 的表現(xiàn)優(yōu)異的基本搜索功能,也可以對它進行擴展從而滿足企業(yè)的需要。Solr的特性: 高級的全文搜索功能 專為高通量的網(wǎng)絡(luò)流量進行的優(yōu)化 基于開放接口(XML和HTTP)的標準 綜合的HTML管理界面 可伸縮性能夠有效地復制到另外一個Solr搜索服務器 使用XML配置達到靈活性和適配性 可擴展的插件體系solr

2、集群的優(yōu)點(1)大數(shù)據(jù)量下更高的性能 (2)更好擴展性 (3)更高的可靠性 (4)更簡單易用Solr和Lucene的本質(zhì)區(qū)別有以下三點:搜索服務器,企業(yè)級和管理。Lucene本質(zhì)上是搜索庫,不是獨立的應用程序,而Solr是。Lucene專注于搜索底層的建設(shè),而Solr專注于企業(yè)應用。Lucene不負責支撐搜索服務所必須的管理,而Solr負責。所以說,一句話概括 Solr: Solr是Lucene面向企業(yè)搜索應用的擴展。solr索引篇建立索引在solrj中創(chuàng)建索引的一般步驟: 1)創(chuàng)建一個SolrServer對象,SolrServer用于管理索引 2)創(chuàng)建SolrInputDocument對象,

3、即文檔對象,并且向文檔對象添加字段 3)利用SolrServer對象的add方法添加SolrInputDocument對象,創(chuàng)建索引刪除索引 刪除索引可以通過兩種方式操作,一種是通過文檔ID進行刪除,別一種是通過查詢到的結(jié)果進行刪除.通過ID刪除方式代碼:server.deleteById(id);/或是使用批量刪除server.deleteById(ids);通過查詢刪除方式代碼:server.deleteByQuery(*.*);/這樣就刪除了所有文檔索引/”*.*”就查詢所有內(nèi)容的,介紹查詢時會詳細說明.優(yōu)化索引 優(yōu)化Lucene 的索引文件以改進搜索性能。索引完成后執(zhí)行一下優(yōu)化通常比較

4、好。如果更新比較頻繁,則應該在使用率較低的時候安排優(yōu)化。一個索引無需優(yōu)化也可以正常地運行。優(yōu)化是一個耗時較多的過程。 server.optimize();/不要頻繁的調(diào)用.盡量在無人使用時調(diào)用.Solr存的什么數(shù)據(jù)類型?文本類型textfieldSolr高亮顯示 我們經(jīng)常使用搜索引擎,比如在baidu 搜索 java ,會出現(xiàn)如下結(jié)果,結(jié)果中與關(guān)鍵字匹配的地方是紅色顯示與其他內(nèi)容區(qū)別開來。solr 默認已經(jīng)配置了highlight 組件(詳見 SOLR_HOME/conf/sorlconfig.xml)。通常我出只需要這樣請求http:/localhost:8983/solr/ collect

5、ion1 /select? q=%E4%B8%AD%E5%9B%BD&start=0&rows=1&fl=content+path+&wt=xml&indent=true&hl=true&hl.fl=content 可以看到與比一般的請求多了兩個參數(shù) hl=true 和 hl.fl= content 。hl=true 是開啟高亮,hl.fl= content 是告訴solr 對 name 字段進行高亮(如果你想對多個字段進行高亮,可以繼續(xù)添加字段,字段間用逗號隔開,如 hl.fl=name,name2,name3)。 高亮內(nèi)容與關(guān)鍵匹配的地方,默認將會被 和 包圍。還可以使用hl.simple

6、.pre 和 hl.simple.post參數(shù)設(shè)置前后標簽.分組統(tǒng)計 我這里實現(xiàn)分組統(tǒng)計的方法是使用了Solr的Facet組件, Facet組件是Solr默認集成的一個組件.Facet簡介 Facet是solr的高級搜索功能之一,可以給用戶提供更友好的搜索體驗.在搜索關(guān)鍵字的同時,能夠按照Facet的字段進行分組并統(tǒng)計Facet字段1. 適宜被Facet的字段 一般代表了實體的某種公共屬性,如商品的分類,商品的制造廠家,書籍的出版商等等.2. Facet字段的要求 Facet的字段必須被索引.一般來說該字段無需分詞,無需存儲. 無需分詞是因為該字段的值代表了一個整體概念,如電腦的品牌”聯(lián)想”代

7、表了一個整 體概念,如果拆成”聯(lián)”,”想”兩個字都不具有實際意義.另外該字段的值無需進行大小 寫轉(zhuǎn)換等處理,保持其原貌即可. 無需存儲是因為一般而言用戶所關(guān)心的并不是該字段的具體值,而是作為對查詢結(jié)果進 行分組的一種手段,用戶一般會沿著這個分組進一步深入搜索.3. 特殊情況 對于一般查詢而言,分詞和存儲都是必要的.比如CPU類型”Intel 酷睿2雙核 P7570”, 拆分成”Intel”,”酷睿”,”P7570”這樣一些關(guān)鍵字并分別索引,可能提供更好的搜索 體驗.但是如果將CPU作為Facet字段,最好不進行分詞.這樣就造成了矛盾,解決方法為, 將CPU字段設(shè)置為不分詞不存儲,然后建立另外一

8、個字段為它的COPY,對這個COPY的 字段進行分詞和存儲.Facet組件 Solr的默認requestHandler已經(jīng)包含了Facet組件(solr.FacetComponent).如果自定義requestHandler或者對默認的requestHandler自定義組件列表,那么需要將Facet加入到組件列表中去.Facet查詢 進行Facet查詢需要在請求參數(shù)中加入facet=on或者facet=true只有這樣Facet組件才起作用.solr集群怎么搭建的solrcloud是基于solr和Zookeeper的分布式搜索方案,先安裝好Java和Zookeeper集群(我是在local下創(chuàng)

9、了個solrcloud的目錄,然后把這個Zookeeper解壓放進來并改名 ,也是為了咱們這個方便操作,然后對Zookeeper進行配置,每個Zookeeper目錄下建個data目錄,data下建立myid文件存儲該機器的標識碼,再然后把每個Zookeeper的conf目錄下zoo_sample.cfg復制改名zoo.cfg,修改里邊的一些配置,主要是data目錄,客戶端連接端口還有雞群中節(jié)點信息:比如ip地址啦、投票和選舉端口啦,接著就可以啟動了),然后去按照需求裝幾個tomcat實例,并修改其端口號,解壓solr,把solr.war拿到tomcat下,example下的日志有關(guān)的jar包也

10、拿進去,啟動解壓。創(chuàng)建多個solrhome來存放solr服務器所有配置文件,把solrhome上傳到Zookeeper上邊,接著修改solr.xml,主要是ip和端口號,接著就可以修改tomcat里bin下的catalina.sh文件加入DzkHost指定zookeeper服務器地址,最后啟動就行了。分片的話是在地址欄用命令做的。Solr為什么要分片 減少單機請求數(shù),降低單機負載,提高總負載減少單機的存儲空間,提高總存空間。solr索引優(yōu)化(一)服務端框架優(yōu)化: 加大shard也就是分片的數(shù)目,理論上shard越多,寫入速度越快設(shè)置較大的索引flush觸發(fā)條件,ramBufferSizeMB

11、或者 maxBufferedDocs 寫索引時,關(guān)閉副本,因為同步索引會大大降低寫入速度 監(jiān)控GC,調(diào)整JVM參數(shù) 如果Full GC頻繁,加大JVM堆內(nèi)存, 如果用 GC頻繁,加大新生代的比例,如果使用的是CMS垃圾收集器,必要時,可以關(guān)閉survive區(qū),避免survive區(qū)和Eden區(qū)來回拷貝 盡量使用穩(wěn)定的新版本如JDK和框架本身 內(nèi)存大的,可以嘗試G1垃圾收集器 (二) 客戶端優(yōu)化 (1)如果公司有大數(shù)據(jù)部門,可以使用Hadoop或者Spark分布式集群構(gòu)建索引 (2)如果公司沒有大數(shù)據(jù)產(chǎn)品,可以使用多線程或者多進程并行構(gòu)建索引 (3)使用批量提交 (4)減少commit次數(shù),讓服務

12、端控制flush索引,索引完成之后,可手動commit一次。介紹solrCloud SolrCloud是基于Solr和Zookeeper的分布式搜索方案,是正在開發(fā)中的Solr4.0的核心組件之一,它的主要思想是使用Zookeeper作為集群的配置信息中心。它有幾個特色功能,集中式的配置信息、自動容錯 、近實時搜索 、查詢時自動負載均衡?;究梢杂蒙厦孢@幅圖來概述,這是一個擁有4個Solr節(jié)點的集群,索引分布在兩個Shard里面,每個Shard包含兩個Solr節(jié)點,一個是Leader節(jié)點,一個是Replica節(jié)點,此外集群中有一個負責維護集群狀態(tài)信息的Overseer節(jié)點,它是一個總控制器。集

13、群的所有狀態(tài)信息都放在Zookeeper集群中統(tǒng)一維護。從圖中還可以看到,任何一個節(jié)點都可以接收索引更新的請求,然后再將這個請求轉(zhuǎn)發(fā)到文檔所應該屬于的那個Shard的Leader節(jié)點,Leader節(jié)點更新結(jié)束完成,最后將版本號和文檔轉(zhuǎn)發(fā)給同屬于一個Shard的replicas節(jié)點。這里就不多說SolrCloud了,等研究明白后再單寫一個文檔。Solr加入中文分詞器 中文分詞在solr里面是沒有默認開啟的,需要我們自己配置一個中文分詞器。目前可用的分詞器有smartcn,IK,Jeasy,庖丁。其實主要是兩種,一種是基于中科院ICTCLAS的隱式馬爾科夫HMM算法的中文分詞器,如smartcn,

14、ictclas4j,優(yōu)點是分詞準確度高,缺點是不能使用用戶自定義詞庫;另一種是基于最大匹配的分詞器,如IK ,Jeasy,庖丁,優(yōu)點是可以自定義詞庫,增加新詞,缺點是分出來的垃圾詞較多。各有優(yōu)缺點看應用場合自己衡量選擇吧。 下面給出兩種分詞器的安裝方法,任選其一即可,推薦第一種,因為smartcn就在solr發(fā)行包的contrib/analysis-extras/lucene-libs/下,就是lucene-analyzers-smartcn-4.2.0.jar,首選在solrconfig.xml中加一句引用analysis-extras的配置,這樣我們自己加入的分詞器才會引到的solr中.s

15、martcn 分詞器的安裝 首選將發(fā)行包的contrib/analysis-extras/lucene-libs/ lucene-analyzers-smartcn-4.2.0.jar復制到solrcontribanalysis-extraslib下,在solr本地應用文件夾下,打開/solr/conf/scheme.xml,編輯text字段類型如下,添加以下代碼到scheme.xml中的相應位置,就是找到fieldType定義的那一段,在下面多添加這一段就好啦 如果需要檢索某個字段,還需要在scheme.xml下面的field中,添加指定的字段,用text_ smartcn作為type的名字

16、,來完成中文分詞。如 text要實現(xiàn)中文檢索的話,就要做如下的配置:IK 分詞器的安裝首選要去下載IKAnalyzer的發(fā)行包.下載地址:http:/ik-下載后解壓出來文件中的三個復制到solrcontribanalysis-extraslib目錄中.IKAnalyzer2012FF_u1.jar 分詞器jar包IKAnalyzer.cfg.xml 分詞器配置文件Stopword.dic 分詞器停詞字典,可自定義添加內(nèi)容復制后就可以像smartcn一樣的進行配置scheme.xml了. 現(xiàn)在來驗證下是否添加成功,首先使用StartSolrJetty來啟動solr服務,啟動過程中如果配置出錯,

17、一般有兩個原因:一是配置的分詞器jar找不到,也就是你沒有復制jar包到solrcontribanalysis-extraslib目前下;二是分詞器版本不對導致的分詞器接口API不一樣出的錯,要是這個錯的話就在檢查分詞器的相關(guān)文檔,看一下支持的版本是否一樣. 如果在啟動過程中沒有報錯的話說明配置成功了.我們可以進入到http:/localhost:8983/solr地址進行測試一下剛加入的中文分詞器.在首頁的Core Selector中選擇你配置的Croe后點擊下面的Analysis,在Analyse Fieldname / FieldType里選擇你剛才設(shè)置的字段名稱或是分詞器類型,在Fie

18、ld Value(index)中輸入:中國人,點擊右面的分詞就行了.Solr代碼篇工具類1、 創(chuàng)建solrserver對象:try solr = new CommonsHttpSolrServer(http:/localhost:8983/solr); solr.setConnectionTimeout(100); solr.setDefaultMaxConnectionsPerHost(100); solr.setMaxTotalConnections(100); catch (Exception e) System.out.println(請檢查tomcat服務器或端口是否開啟!); e.

19、printStackTrace(); 2、 添加索引Collection docs = new ArrayList(); for (int i = 0; i list.size(); i+) Item item = list.get(i); /設(shè)置每個字段不得為空,可以在提交索引前進行檢查 if (CheckItem(item) SolrInputDocument doc = new SolrInputDocument(); /在這里請注意date的格式,要進行適當?shù)霓D(zhuǎn)化,上文已提到 doc.addField(id, item.getId(); docs.add(doc); try solr.

20、add(docs); /對索引進行優(yōu)化 solr.optimize(); mit(); catch (Exception e) e.printStackTrace(); 3、 使用bean對象添加索引 創(chuàng)建一個對應于solr索引的類別: public class Item Field private String id; public void setId(String id) this.id = id; public String getId() return id; public Item() 使用數(shù)據(jù)創(chuàng)建bean對象列表, try solr.addBeans(beansList); ca

21、tch (Exception e) e.printStackTrace(); finally try solr.optimize(); mit(); catch (Exception e) e.printStackTrace(); 索引提交完畢。 4、 刪除索引 據(jù)查詢結(jié)果刪除: try /刪除所有的索引 solr.deleteByQuery(*:*); mit(); catch (Exception e) e.printStackTrace(); 根據(jù)索引號刪除索引: try solr.deleteById(ids); mit(); catch (Exception e) e.printSt

22、ackTrace(); 5、 查詢 SolrJ提供的查詢功能比較強大,可以進行結(jié)果中查詢、范圍查詢、排序等。 下面是筆者封裝的一個查詢函數(shù): public static QueryResponse Search(String field, String key, int start, int count, String sortfield, Boolean flag, Boolean hightlight) /檢測輸入是否合法 if (null = field | null = key | field.length != key.length) return null; if (null =

23、sortfield | null = flag | sortfield.length != flag.length) return null; SolrQuery query = null; try /初始化查詢對象 query = new SolrQuery(field0 + : + key0); for (int i = 0; i field.length; i+) query.addFilterQuery(fieldi + : + keyi); /設(shè)置起始位置與返回結(jié)果數(shù) query.setStart(start); query.setRows(count); /設(shè)置排序 for(int

24、 i=0; isortfield.length; i+) if (flagi) query.addSortField(sortfieldi, SolrQuery.ORDER.asc); else query.addSortField(sortfieldi, SolrQuery.ORDER.desc); /設(shè)置高亮 if (null != hightlight) query.setHighlight(true); / 開啟高亮組件 query.addHighlightField(title);/ 高亮字段 query.setHighlightSimplePre();/ 標記 query.setH

25、ighlightSimplePost(); query.setHighlightSnippets(1);/結(jié)果分片數(shù),默認為1 query.setHighlightFragsize(1000);/每個分片的最大長度,默認為100 catch (Exception e) e.printStackTrace(); QueryResponse rsp = null; try rsp = solr.query(query); catch (Exception e) e.printStackTrace(); return null; /返回查詢結(jié)果 return rsp; 補充一下范圍查詢的格式:sta

26、r t TO end,start與end是相應數(shù)據(jù)格式的值的字符串形式,“TO” 一定要保持大寫! 6、 讀取查詢結(jié)果 DocList讀取返回結(jié)果: SolrDocumentList solrList = rsp.getResults(); Beans讀取返回結(jié)果: List tmpLists = rsp.getBeans(Item.class); 讀取高亮顯示結(jié)果: rsp = Search(field, key, 0, 10, sortfield, flag, true); if(null = rsp) return; MapString, MapString, List hightlig

27、ht = rsp.getHighlighting(); /Item即為上面定義的bean類 List tmpLists = rsp.getBeans(Item.class); for (int i = 0; i tmpLists.size(); i+) /hightlight的鍵為Item的id,值唯一,我們設(shè)置的高亮字段為title String hlString = hightlight.get(tmpLists.get(i).getId().get(title).toString(); if (null != hlString) System.out.println(hlString);

28、 7、 Facet的一個應用:自動補全 /prefix為前綴,min為最大返回結(jié)果數(shù) public static String autoComplete(String prefix, int min) String words = null; StringBuffer sb = new StringBuffer(); SolrQuery query = new SolrQuery(*.*); QueryResponse rsp= new QueryResponse(); /Facet為solr中的層次分類查詢 try query.setFacet(true); query.setQuery(*

29、:*); query.setFacetPrefix(prefix); query.addFacetField(title); rsp = solr.query(query); catch (Exception e) / TODO: handle exception e.printStackTrace(); return null; if(null != rsp) FacetField ff = rsp.getFacetField(title); List countList = ff.getValues(); if(null = countList) return null; for(int

30、i=0; icountList.size(); i+) String tmp = countList.get(i).toString().split( ); /排除單個字 if(tmp0.length() 本地(進行加工和處理)- 建立索引庫(信息集合,一組文件的集合)2 搜索的時候從本地的(索引庫)信息集合中搜索3 文本在建立索引和搜索時,都會先進行分詞(使用分詞器)4 索引的結(jié)構(gòu): 索引表(存放具體的詞匯,哪些詞匯再那些文檔里存儲,索引里存儲的就是分詞器分詞之后的結(jié)果) 存放數(shù)據(jù)(文檔信息集合)5 用戶搜索時:首先經(jīng)過分詞器進行分詞,然后去索引表里查找對應的詞匯(利用倒排序索引),再找到對

31、應的文檔集合6 索引庫位置(Directory)7 信息集合里的每一條數(shù)據(jù)都是一個document(存儲所有信息,他是一個Filed屬性的集合)8 store 是否進行存儲(可以不存儲,也可以存儲)9 index 是否進行存儲(可以不索引,也可以索引,索引的話分為 分詞后索引,或者直接索引)/* solr安裝與使用 */Solr下載地址:/dist/lucene/solr/安裝Solr與Tomcat集成:Linux環(huán)境CentOS6.4、Tomcat7.0、Solr4.10.3安裝步驟:解壓Solr:tar -zxvf solr-4.10.3.t

32、gz.tar進入目錄:cd solr-4.10.3/example/webapps/拷貝其下war文件到tomcat的webapps中:cp solr.war /usr/local/apache-tomcat-7.0.29/webapps/解壓Solr:mkdir solr & unzip solr.war -d solr & rm -rf solr.war修改解壓好的solr文件夾,修改其文件:vim solr/WEB-INF/web.xml,查找到env-entry內(nèi)容,解開注釋文本。并修改solr/home的地址:/usr/local/solr-4.10.3/example/solr。保

33、存并退出即可??截愊嚓P(guān)jar包到tomcat下:cd /usr/local/solr-4.10.3/example/lib/ext & cp * /usr/local/apache-tomcat-7.0.29/lib/啟動tomcat即可:/usr/local/apache-tomcat-7.0.29/bin/startup.sh查看日志:tail -500 /usr/local/apache-tomcat-7.0.29/logs/catalina.out通過瀏覽器訪問:http:/地址:8080/solr,看到solr主頁即可。/* 中文分詞器安裝 */無論是Solr還是lucene,都對中

34、文分詞不支持,所以我們一般索引中文的話需要使用IK中文分詞器。下載:IK Analyzer 2012FF_hf1.zip 進行解壓:安裝:把IKAnalyzer2012FF_u1.jar拷貝到tomcat的solr應用服務下:cd /usr/local/software & cp IKAnalyzer2012FF_u1.jar /usr/local/apache-tomcat-7.0.29/webapps/solr/WEB-INF/lib/創(chuàng)建文件夾:/usr/local/apache-tomcat-7.0.29/webapps/solr/WEB-INF/classes把IKAnalyzer.

35、cfg.xml和stopword.dic拷貝到新創(chuàng)建的classes目錄下即可。修改solr core的schema文件,默認是位置:vim /usr/local/solr-4.10.3/example/solr/collection1/conf/schema.xml添加如下配置: solr全量更新第一步:創(chuàng)建數(shù)據(jù)庫solr,然后建立一張表 test,插入幾條數(shù)據(jù)即可(見docs下的solr.sql文件,創(chuàng)建solr數(shù)據(jù)庫、表、倒入數(shù)據(jù))第二步:/usr/local/solr-4.10.3/example/solr/collection1/conf/solrconfig.xml對這個文件進行編輯:命令:vim /usr/local/solr-4.10.3/example/solr/collection1/conf/s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論