




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、利用 SOLR 搭建企業(yè)搜索之一(運(yùn)行 solr)在網(wǎng)絡(luò)上找了很多的關(guān)于 solr 的資料,發(fā)現(xiàn)非常的不全面,即使就是是如此!的 wiki,也基于現(xiàn)階段正在研究的 solr 應(yīng) 用,陸續(xù)的會(huì)一些經(jīng)驗(yàn)!今天的是: 怎么跑起來!1 首先好 solr,我用的是 solr1.3,地址:windows 版本http:/apache-m . ache-solr-1.3.0.ziplinux 版本http:/apache-m . ache-solr-1.3.0.tgz2準(zhǔn)備運(yùn)行容器,我用的是 tomcat6.0.20.如果是玩的話,也可以不用準(zhǔn)備專門的容易,你只需解壓好 solr 的包,找到 exle 文件
2、夾,然后運(yùn)行 start.jar。具體指令:java -jar start.jar 做應(yīng)用的時(shí)候,不建議采用該方式。該方式包含了jetty!3有關(guān) tomcat 的使用,不是本文的重點(diǎn),如 果你有問題,請參見 tomcat 的使用。解壓好 tomcat,將 solr 包下面的dist 文件夾中的apache-solr-1.3.0.war 拷貝到 tomcat 的webapps,并且改名為 solr.war。4新建一個(gè) solr-tomcat 文件夾,我是把這個(gè)文件夾建立在 C 盤根目錄,你可以采用同樣方式,也可以不這樣,放哪由你決定。建立好該文件夾以后,在把它下面在 建立一個(gè) solr文件夾,
3、把 solr 包里面的exle/solr 文件夾下面的所有文件放入到 solr 里面。5最后一步 配置 solr.home,可以有三種方式。1)基于當(dāng)前路徑的方式這種情況需要在 c:/solr- tomcat/目錄下去啟動(dòng) tomcat,Solr 查找./solr,因此在啟動(dòng)時(shí)候需要切換到 c:/solr-tomcat/2) 基于環(huán)境變量windows 在環(huán)境變量中建立 solr.home,值為 c:/solr-tomcatlinux 在當(dāng)前用戶的環(huán)境變量中(.bash_profile)或在 catalina.sh 中添加如下環(huán)境變量export JAVA_OPTS=$JAVA_OPTS -D
4、solr.solr.home=/opt/solr-tomcat/solr3)基于 JNDI在 tomcat 的 conf 文件夾建立 Catalina 文件夾,然后在 Catalina 文件夾中在建立localhost 文件夾,在該文件夾下面建立 solr.xml,其中內(nèi)容:Xml 代碼docBase=c:/tomcat/webapps/solr.wardebug=0問題描述:個(gè)人發(fā)現(xiàn)的一個(gè)問題,就是如果配置好 JNDI 的話,然后在 tomcat 的 bin 文件夾下面啟動(dòng) tomcat 的話,會(huì)在 tomcat 的 bin 下面建立 solr 文件夾,這個(gè)文件夾中主要存放的索引文件。本來這
5、些東西應(yīng)該放入 c:/solr- tomcat/solr。如果你不想出現(xiàn)這種情況的話,請使用基于當(dāng)前路徑的方式。6打開瀏覽器,請看看能否該服務(wù)。如果能夠,跑起來了。利用 SOLR 搭建企業(yè)搜索之二(中文分詞)這篇文章,主的是 怎么在 solr 中加入中文分詞,參考了一些文章,但是還是花了不少時(shí)間才搞出的??赡苁谴髠b們太牛了,所以很多細(xì)節(jié)東西都沒有寫出來!但是要的是很多 文章都是抄來抄去的!入正題:在上面的一個(gè)文章中,已經(jīng)使 solr 跑起來了,在上面的基礎(chǔ)上,加入中文分詞。我 用的是 paoding 分詞器!1請下好paoding 分詞器,地址:httpqieqie/p/paoding/dow
6、nloads/list , 在這里要非常感謝paoding 作者:在使用 paoding 的時(shí)候要注意:paoding 的 dic 位置,也就是字典的位 置,有兩種辦法解決:1) 在系統(tǒng)環(huán)境變量中加入 PAODING_DIC_HOME 這個(gè)變量,值為 paoding 壓縮包下面的 dic 的解壓位置。2)paoding-ysis.jar 里面有個(gè)perties 文件,指定 dic 也可,但是要重新編譯這 個(gè) jar 包,我采用的后面一種辦法,只要每次固定好 dic 位置,部署還不是很不方便,設(shè)置環(huán)境變量我比較2建立文件Java 代碼package com.yeedoo.slor.tokeniz
7、er;importimportjava.io.Reader;java.util.Map;import import import importimportnet.paoding. net.paoding. net.paoding. .paoding.ysis. ysis. ysis.ysis.yzaodingTokenizer;yzer.TokenCollector;yzer.impl.MaxWordLengthTokenCollector; yzer.impl.MostWordsTokenCollector;ysis.knife.PaodingMaker;importimport.apach
8、e.lucene.ysis.TokenStream;.apache.solr.ysis.BaseTokenizerFactory;publicclassChiTokenizerFactory extends BaseTokenizerFactory /* 最多切分 默認(rèn)模式*/public sic final String MOST_WORDS_MODE =most-words;/* 按最大切分*/public sicfinal String MAX_WORD_LENGTH_MODE = max-word-length;privateString mode = null;public void
9、 setMode(String mode) if (mode = null | MOST_WORDS_MODE.equalsIgnoreCase(mode) |default.equalsIgnoreCase(mode) this.mode = MOST_WORDS_MODE; else ifthis.mode(MAX_WORD_LENGTH_MODE.equalsIgnoreCase(mode) = MAX_WORD_LENGTH_MODE; elsethrownewIllegalArgumentException(不合法的分析器Mode 參數(shù)設(shè)置:+mode);Overridepublic
10、 voidinit(Map args) super.init(args); setMode(args.get(mode).toString();public TokenStream create(Reader input) return newPaodingTokenizer(input, PaodingMaker.make(),createTokenCollector();private TokenCollector createTokenCollector() if(MOST_WORDS_MODE.equals(mode)return newMostWordsTokenCollector(
11、);if (MAX_WORD_LENGTH_MODE.equals(mode)return new MaxWordLengthTokenCollector();throw new Error(neverhappened);利用 SOLR 搭建企業(yè)搜索之三(配置文件)運(yùn)行 solr 是個(gè)很簡單的事,如何讓 solr 高效運(yùn)行你的項(xiàng)目,這個(gè)就不容易了。要考慮的太多。這里很重要一個(gè)就是對(duì) solr 的配置要了解。懂得配 置文件每個(gè)配置項(xiàng)的含義,這樣操作起來就會(huì)如魚得水!在 solr 里面主要的就是 solr 的主目錄下面的 schema.xml,solrConfig.xml,如果你看過前兩篇文章的話
12、,你應(yīng)該知道 solr 的主目錄處于什么位置(c:/solr- tomcat/solr/conf/)。在這個(gè)文章中,首先來說說這個(gè) schema.xml。schema.xml,這個(gè)相當(dāng)于數(shù)據(jù)表配置文件,它定義了加入索引的數(shù)據(jù)的數(shù)據(jù)類型的。主要包括 types、fields 和其他的一些缺省設(shè)置。1 首 先 需 要 在 types 結(jié) 點(diǎn) 內(nèi) 定 義 一 個(gè) FieldType 子 結(jié) 點(diǎn) , 包 括name,class,itionIncrementGap 等等一些參 數(shù),name 就是這個(gè)FieldType 的名稱,class指向.apache.solr.ysis 包里面對(duì)應(yīng)的 class 名
13、稱,用來定義 這個(gè)類型的行為。在FieldType 定義的時(shí)候最重要的就是定義這個(gè)類型的數(shù)據(jù)在建立索引和進(jìn)行查詢的時(shí)候要使用的分析器yzer,包括分詞和 過濾。在例子中 text 這個(gè) FieldType 在定義的時(shí)候,在index 的yzer 中使用 solr.WhitespaceTokenizerFactory 這個(gè)分詞包,就是空格分詞,然后使用solr.StopFilterFactory,solr.WordDelimiterFilterFactory,solr.LowerCaseFilterFactory,solr.EnglishPorterFilterFactorysolr.Remov
14、eDuplicatesTokenFilterFactory 這幾個(gè)過濾器。在向索引庫中添加 text 類型的索引的時(shí)候,Solr 會(huì)首先用空格進(jìn)行分詞,然后把分詞結(jié)果依次使用指定的過濾器進(jìn)行過濾,最后剩下的結(jié)果 才會(huì)加入到索引庫中以備查詢。Solr 的ysis沒有帶支持中文的包, 在第二篇文章中詳細(xì)講了怎樣添加 paoding 中文分詞器,/blog/424474參見2接下來的工作就是在 fields 結(jié)點(diǎn)內(nèi)定義具體的字段(類似數(shù)據(jù)庫中的字段),就是filed,filed 定義包括 name,type(為之前定義 過的各種 FieldType),indexed(是否被索引),stored(是否
15、被),multiValued(是否有多個(gè)值)等等。例:Xml 代碼 fieldfieldfieldfieldfieldname=summary type=text indexed=true stored=true /name=author type=string indexed=true stored=true /name=date type=date indexed=false stored=true/name=content type=text indexed=truestored=false /name=keywords type=keyword_textindexed=truestor
16、ed=false multiValued=true / field 的定義相當(dāng)重要,有幾個(gè)技巧需 注意一下,對(duì)可能存在多值的字段盡量設(shè)置multiValued 屬性為true,避免建索引是拋出錯(cuò)誤;如果不需要相應(yīng)字,盡量將stored屬 性設(shè)為 false。備注:multiValued 兩個(gè)作用:一個(gè)是存放數(shù)組,另一個(gè)是用于 copyField3建議建立了一個(gè)拷貝字段,將所有的全文字段檢索:到一個(gè)字段中,以便進(jìn)行的Xml 代碼并在拷貝字段結(jié)點(diǎn)處完成拷貝設(shè)置:Xml 代碼 4除此之外,還可以定義動(dòng)態(tài)字段,所謂動(dòng)態(tài)字段就是不用指定具 體的名稱,只要定義字段名稱的規(guī)則,例如定義一個(gè) dynamicF
17、ield,name 為*_i,定義它的 type 為 text,那么在使用這個(gè)字段的時(shí)候,任何以_i 結(jié)尾的字段都被認(rèn)為是符合這個(gè)定義的,例 如:name_i,gender_i,school_i 等。利用 SOLR 搭建企業(yè)搜索之四(MultiCore)Solr Multicore 是 solr 1.3 的新特性。其目的一個(gè) solr 實(shí)例,可以有多個(gè)搜索應(yīng)用。下面著手來將 solr 給出的一個(gè)exle 跑出來,在利用 SOLR 搭建企業(yè)搜索之一(運(yùn)行 solr)這篇文章里面已經(jīng)講了怎樣來運(yùn)行 solr,這篇文章是基于利用 SOLR 搭建 企 業(yè) 搜 索之 一 ( 運(yùn) 行 solr ), 有
18、不 明 白 的 請 參 見/blog/4243831 找到 solr包中的 exle 文件夾,在它的下面有個(gè) multicore 文件夾,將這個(gè)文件夾下面的所有東西 copy 到 c:/solr-tomcat/solr 下面。注意:有一個(gè) solr.xml(這只是默認(rèn)文件,當(dāng)然也可以指定別的文件),如:Xml 代碼core name=core1instanceDir=core1 /這個(gè)文件是告訴 solr 應(yīng)該加載哪些 core,cores 里有 core0,core1。core0(可以類比以前的 solr.home)/conf 目錄下有 schema.xml 與 solrconfig.xml
19、,可以 把實(shí)際應(yīng)用的過來?,F(xiàn)示例就用的了。2啟動(dòng) tomcat,應(yīng)用,就可以看到有 Admin core0 和 Admin core13采用上面的默認(rèn)solr.xml,索引文件將存放在同一個(gè)目錄下面,在這里將存放在C:/solr- tomcat/solr/data,如果你想更改目錄,或者兩個(gè)應(yīng)用存放在不同的目錄,請參見下面的 xml。Xml 代碼propertyname=dataDirvalue=/dore0/給 core 添加子元素 property,property 的兩個(gè)屬性就不說了,一看就能明白! - The cores name as defined in solr.xmlsolr.
20、core.instanceDir - The cores instance directory (i.e. the directory under whicht cores conf/ and data/ directory are located)solr.core.dataDir - The cores data directory (i.e. the directory under whichindex directory are located)t coressolr.core.configName - The name of the cores config file (solrco
21、nfig.xml by default)solr.core.schemaName - The name of the cores schema file (schema.xml bydefault)4solr.xml 具體含義:1)solrThe tag accepts two attributes:persistent - By default, should runtime core manipulation be saved in solr.xml sotit is available after a restart.sharedLib - Path to a directory con
22、taining .jar filest are added to the classpath ofevery core. The path is relative to solr.home (where solr.xml sits)2)coresThe tag accepts two attribute:adminPath - Relative path to acs the CoreAdminHandler for dynamic coremanipulation.Forexle,adminPath=/admin/coresconfiguresacsvia. If this attribut
23、e is not specified, dynamicmanipulation is unavailable.3)coreThe tag accepts two attributes:name - The registered core name. This will be how the core is acsed.instanceDir - The solr.home directory for a given core.dataDir - The data directory for a given core. The default is /data . Itcan take an a
24、bsolute path or a relative path w.r.t instanceDir .Solr1.44)propertyThe tag accepts two attributes:name - The name of the propertyvalue - The value of the property由于 E 文過于 簡單,所以就不翻譯了!利用 SOLR 搭建企業(yè)搜索之五(solrj)相信很多人,在準(zhǔn)備提交數(shù)據(jù)讓 solr 建立索引的那刻,很納悶,盡管看了不少網(wǎng)上的一些文章,但是依然還是有不少不理解的地方。比如提交一個(gè) xml,采用t 方式,盡管有些文章說了可以采用 h
25、ttpcnt。但是我那了。但是對(duì)于一個(gè)剛?cè)腴T solr 的初個(gè)時(shí)候,還不是很理解,當(dāng)然現(xiàn)在看來其實(shí)也沒學(xué)者,講講關(guān)于 solr1.3 的 solrj( sorlr J 目前使用二進(jìn)制的格式作為默認(rèn)的格式。對(duì)于 solr1.2 的用戶通過顯示的設(shè)置才能使用 XML 格式。)!先上一個(gè)例子:Java 代碼public publicDatessicicfinal String SOLR_URL = void commit() new Date();date =SolrServer solr = null;try solr = newCommonsHttpSolrServer(SOLR_URL); c
26、atch (MalformedURLException e1)e1.prfor (StackTrace();i = 0; i 1 notmended.3實(shí)現(xiàn) SolrServer 接口的另一個(gè) 類:EmbeddedSorrServer,它不需要http 連接。4在構(gòu)造 的時(shí)候,可以一個(gè)一個(gè)添加到 solrServer,也可以構(gòu)建一個(gè)包含 的Collection,將 Collection 添加到 solrServer,然后 commit。5也可以構(gòu)造一個(gè)跟 匹配的 JavaBean 進(jìn)行提交使用 java 注釋創(chuàng)建 java bean。Field ,可以被用在域上,或者是 setter 方法上。
27、如果一個(gè)域的名稱跟 bean 的名稱是不一樣的,那么在 java 注釋中填寫別名,具體的,可以參照下面的域 categoriesJava 代碼CommonsHttpSolrServer 使用 HTTPCnt 和 solr 服務(wù)器進(jìn)行通信 t.solrj.beans.Field;public class Item FieldString id;Field(cat)StringFieldcategories;List features;java 注釋也可以使用在 setter 方法上,如 下面的例子:Java 代碼 Field(cat)public voidsetCategory(String c
28、)this.categories = c;這里應(yīng)該要有一個(gè)相對(duì)的,get 方法(沒有加 java 注釋的)來屬性Java 代碼 Item item =new Item(); item.id = one; item.categories = new String aaa, bbb, ccc ;添加給 solrJava 代碼 server.addBean(item);將多個(gè)bean 提交給 solrJava 代碼 List beans; /add Item objects to the list server.addBeans(beans);注意: 你可以重復(fù)使用 SolrServer,這樣可以提
29、高性能。6Java 代碼publicsic void update() SolrServer solrServer = null; try solrServer = new CommonsHttpSolrServer(SOLR_URL); catch(MalformedURLException e) e.prStackTrace();UpdateRequest updateRequest = new UpdateRequest();SolrInputsid.addField(id,sid = new SolrInput100000);();開發(fā)大全);sid.addField(name, st
30、ruts+hibernate+springsid.addField(summary, 三種框架的綜合應(yīng)用);sid.addField(author, );sid.addField(date, new Date(); sid.addField(content,高級(jí)應(yīng)用類書籍); sid.addField(keywords, SSH); updateRequest.setAction(Update updateRequest.add(sid);try MIT, false,false);UpdateResponse updateResponse =updateRs(solrServer);Syst
31、em.out.prln(updateResponse.getSus(); catch(SolrServerException e) e.prStackTrace(); catch(IOException e) e.prStackTrace();提交一個(gè),采用更新方式,注意:Java 代碼 updateRequest.setAction(UpdateMIT,false, false);7Java 代碼 public sic voidquery() SolrServer solr = null;try solr = newCommonsHttpSolrServer(SOLR_URL); catch
32、 (MalformedURLExceptione)e.prStackTrace();return;/pRH?q=epod&spellcheck=on&spellcheck.build=trueModifiableSolrParams params =params.set(qt, new ModifiableSolrParams();pRH);params.set(q, 編程); params.set(spellcheck, on); params.set(spellcheck.build, QueryResponse response = null;try true);response =so
33、lr.query(params); catch (SolrServerException e) e.prreturn;StackTrace();System.out.prln(response = + response);這是一個(gè)查詢方法。關(guān)鍵 字:“ 編程”。關(guān)于查詢的關(guān)鍵字, 請參見 slor wiki, 或等待博客更新,在后面會(huì)有篇文章詳細(xì)講這個(gè)問題!8給 solr 的索引文件手動(dòng)進(jìn)行優(yōu)化,solr.optimize();9solrJ 提供了一組 API,來幫助創(chuàng)建查詢,下面是一個(gè) faceted query 的例子。 SolrServerserver = getSolrServer()
34、; SolrQuerysolrQuery = newSolrQuery().setQuery(ipod).setFacet(true).setFacetMinCount(1).setFacetLimit(8). addFacetField(category).addFacetField(inStock); QueryResponsersp = server.query(solrQuery);所有的 setter/add 方法都是返回它自己本身的實(shí)例,所以就像你所看到的一樣,上面的用法是鏈?zhǔn)降摹@?SOLR 搭建企業(yè)搜索之六(solr 查詢參數(shù)說明)在做 solr 查詢的時(shí)候,solr 提供了
35、很多參數(shù)來擴(kuò)展它自身的強(qiáng)大功能!以下是使用頻率最高的一些參 數(shù)!具體請看:1.常用q - 查詢字符串,必須的。查詢語句(類似 SQL) 相關(guān)詳細(xì)的操作還需lucene 的 query語法fl - 指定返回那些字段內(nèi)容,用逗號(hào)或空格分隔多個(gè)。start - 返回第一條在完整找到結(jié)果中的偏移位置,0 開始,一般分頁用。rows - 指定返回結(jié)果最多有多少條,配合 start 來實(shí)現(xiàn)分頁。sort - 排序,格式:sort=+,+ 。 示例:(score desc, price asc)表示先 “score” 降序, 再 “price” 升序,默認(rèn)是相關(guān)性降序。wt - (writer type)指
36、定輸出格式,可以有 xml, json,s, 后面 solr 1.3 增加的,要用通知,因?yàn)槟J(rèn)沒有打開。fl 表示索引顯示那些 field(*表示所有 field, score 是 solr 的一個(gè)匹配熱度)q.op 表示 q 中 查詢語句的 各條件的邏輯操作 AND(與) OR(或)hl 是否hl.fl fieldhl.snippets 不太清楚(反正是設(shè)置 3 就可以了)hl.simple.pre前面的格式hl.simple.t后面的格式facet 是否啟動(dòng)統(tǒng)計(jì)facet.field統(tǒng)計(jì) field20081001 到 20091031 之間 的。ec487758577506d6002文
37、檔:m .2.不常用q.op - 覆蓋 schema.xml 的defaultOperato(r 有空格時(shí)用AND還是用OR操作邏輯),一般默認(rèn)指定df - 默認(rèn)的查詢字段,一般默認(rèn)指定qt - (query type)指定那個(gè)類型來處理查詢請求,一般不用指定,默認(rèn)是 standard。3.其它indent - 返回的結(jié)果是否縮進(jìn), 默認(rèn)關(guān)閉, 用 indent=true|on 開啟, 一般調(diào)試json,s,ruby 輸出才有必要用這個(gè)參數(shù)。ver - 查詢語法的版本,建議不使用它,由服務(wù)器指定默認(rèn)值。利用 SOLR 搭建企業(yè)搜索之七(solr 使用問題集)下所有在 solr 中使用的毛病。而
38、且我某日,突發(fā)奇想,想寫這么一個(gè)博客,希望fq - (filter query)過慮查詢,作用:在 q 查詢符合結(jié)果中同時(shí)是 fq 查詢符合的,例如:q=mm&fq=date_time:20081001 TO 20091031 ,找關(guān)鍵字 mm,并且 date_time 是希望廣大的看友們也能 一起來說說步!平時(shí)遇到的各種錯(cuò)誤,這樣大家才能一起更好的進(jìn)話不多說,進(jìn)入正題1solr 做索引Lock obtaimed out: SingleInstanceLock: wriock有個(gè)頻繁做索引的 應(yīng)用,它同時(shí)也對(duì)外提供搜索服務(wù)。大部分是 solr 1.3 的默認(rèn)配置。solr 做索引,有時(shí)候報(bào):X
39、ml 代碼2009-7-13嚴(yán)重:9:48:06omon.SolrExceptionlog.apache.lucene.store.LockObtainFailedException:Lockobtaimedout:SingleInstanceLock:wriockat atatat.apache.lucene.store.Lock.obtain(Lock.java:85).apache.lucene.index.IndexWriter.init(IndexWriter.java:1140).apache.lucene.index.IndexWriter. (IndexWriter.java:
40、938).apache.solr.update.SolrIndexWriter.(SolrIndexWriter.java:116).是寫鎖取不到。但重啟 solr 又可以正常做,主要是運(yùn)行時(shí)間長了就報(bào)這個(gè)錯(cuò)了。還是看下配置吧。看到 solr 1.3 默認(rèn)的配置是:Xml 代碼 use.indextryingsingle 默認(rèn)鎖是 single ,只讀的。solr 1.2 是 simple,把它改回去了,運(yùn)行了幾天,沒事。2lucene & solr optimize 索引后結(jié)果與有點(diǎn)關(guān)系昨日做索引的程序重構(gòu)下,測試 optimize 索引(在原有數(shù)據(jù)基礎(chǔ)上提交索引)時(shí),在開發(fā)的機(jī)器(wind
41、ows)里總是會(huì)有兩段索引,要再 optimize 才只是一個(gè)索引段,當(dāng)然不是設(shè)置 maxSegments=2。反復(fù)運(yùn)行還是如此,為了說明是否寫的程序有問題,就用 solr 自帶的 t.sh (或 t.jar)提交 optimize。結(jié)果還是有兩段,再提交一次 optimize 才是一個(gè)段。這問題舊的程序運(yùn)行得很正常,看了下它也沒有提交 兩次優(yōu)化。然后把新的程序也放到服務(wù)器(linux)上運(yùn)行,結(jié)果是只有一個(gè)段。恩,可以認(rèn)為是與文件系統(tǒng)有關(guān),optimize 的時(shí)候是先新生成一段,然后再刪除舊的索引,windows 可能是這樣在運(yùn)行期間與文件關(guān)聯(lián)著刪除不了舊的。linux 可能是不用(不打開)
42、文件就可以刪除。現(xiàn)只能這樣簡單解釋。3換 solr 里的 lucene 包solr 1.3 發(fā)布的時(shí)候,lucene 2.4 還沒有正式發(fā)布,其的 lucene 是開發(fā)版,現(xiàn)在 lucene2.4 早已發(fā)布,那就換上新的 lucene 吧。solr 1.3 http:/apache-m . ache-solr-1.3.0.zip 和 lucene 2.4http:/apache-m . va/lucene-2.4.0.zip 到目錄如e:/search/,把 e:/search/apache-solr-1.3/lib 目錄下的 lucene 相關(guān)的*.jar 刪除:lucene-yzers-2
43、.4-dev.jarlucene-core-2.4-dev.jarlucene-highlighter-2.4-dev.jarlucene-memory-2.4-dev.jarlucene-queries-2.4-dev.jarlucene-snowball-2.4-dev.jarlucene-spellchecker-2.4-dev.jar從 e:/search/lucene-2.4/(或 contrib/)目錄下找到對(duì)應(yīng)的放到 solr-1.3/lib 下然后構(gòu)建 solr,到 e:/search/apache-solr-1.3 目錄,ant dist-war4solr q 查詢?nèi)蒎e(cuò)性當(dāng)
44、solr 接收沒 q 參數(shù)(或 q 參數(shù)值為空)請求時(shí),會(huì)報(bào)錯(cuò)。報(bào)錯(cuò)十分討厭,對(duì)開發(fā)調(diào)試時(shí)才比較有用,但實(shí)際運(yùn)行環(huán)境報(bào)錯(cuò)就不太好了,java 異??赡苡?點(diǎn)性能消耗,那干脆就返回正常的結(jié)果好了(只是結(jié)果里沒有找到的數(shù)據(jù))。solr 1.3 可以寫個(gè)組件去做。判斷到空的時(shí)候,加一個(gè) q 參數(shù),其值為在索引里沒有的數(shù)據(jù)。這樣就可以返回沒有數(shù)據(jù)的結(jié)果。其實(shí)這樣實(shí)現(xiàn)還是比較 麻煩??梢栽?solrconfig.xml 的reques參數(shù)。如 q=abcdefghijk。配置如下:ndler 里加一個(gè)默認(rèn)Xml 代碼 abcdefghijk 這樣的話查詢?nèi)蒎e(cuò)性比較好, 查詢請求沒有帶 q 參數(shù)也可,q
45、參數(shù)值為空也可。tomcat不會(huì)報(bào)錯(cuò),還可以返回結(jié)果。利用 SOLR 搭建企業(yè)搜索 SOLR-236_collapsing.patch 補(bǔ)丁之八( solr 實(shí)現(xiàn)去掉重復(fù)的搜索結(jié)果,打 Bory.Chanhttp/2009/04/a . plicate-result.html打上 SOLR-236_collapsing.patch 補(bǔ)丁,實(shí)現(xiàn) solr 搜索結(jié)果折疊、除去重復(fù)的搜索結(jié)搜索結(jié)果的“站內(nèi)的其它相關(guān)信息 ”。solr collapsing patch 是果,可以實(shí)現(xiàn)類似用 hash 某個(gè)字段來實(shí)現(xiàn)折疊重復(fù)結(jié)果的。下面我演示下應(yīng)用這個(gè)補(bǔ)丁并搜索試用下。其實(shí) solr 上已經(jīng)有了這功能的
46、實(shí)現(xiàn): solr 1.3 collapse patch , 請看: ,我 這 里. 36_collapsing.patch 。是 了 新 的 :好后就需要打上補(bǔ)丁了,先準(zhǔn)備一份源碼在 D:/apache-solr- 1.3.0 目錄下。沒有可以去:http: /archive.apache./dist/lucene/solr/1.3.0/apache-solr-1.3.0.zip。把 SOLR-236_collapsing.patch 文件放在D:/apache-solr-1.3.0 目錄下, 打補(bǔ)丁有我知道的有兩種:用 linux 工具 patch(windows 下有 cygwin);用
47、ant 的 patch。windows cygwin 的 patch:Html 代碼D:/apache-solr-1.3.0patch-p0SOLR-236_collapsing.patchpatching patching patching patching patching patchingpatchingfile file file file file filefilesrc/test/ src/java/ src/java/ src/java/ src/java/ src/java/osrc/java/apache/solr/search/TestDocSet.java/apache/
48、solr/search/CollapseFilter.java/apache/solr/search/DocSet.java/apache/solr/search/NegatedDocSet.java/apache/solr/search/SolrIndexSearcher.javamon/params/CollapseParams.java/apachponent.javaant patch,把下面的內(nèi)容保存為 patch-build.xml 放到 D:/apache-solr-1.3.0 目錄下:Xml 代碼?xmlname=solr-patchdefault=apply-patchbas
49、edir=.name=apply-patchdescription=Applyapatchfile.Set/ant 打補(bǔ)?。篐tml 代碼 D:/apache-solr-1.3.0ant-Dpatch.file=SOLR-236_collapsing.patchpatch-build.xml-fBuildfile:patch-build.xmlapply-patch:patch patch patch patch patchpatchpatching patching patching patchingpatchingfile file file filefilesrc/test/ src/j
50、ava/ src/java/ src/java/src/java/apache/solr/search/TestDocSet.java/apache/solr/search/CollapseFilter.java/apache/solr/search/DocSet.java/apache/solr/search/NegatedDocSet.java/apache/solr/search/SolrIndexSearcher.javapatchingfilesrc/java/omon/params/CollapseParams.javapatchpatchingfilesrc/java/apach
51、ponent.javaBUILDSUCSFULTotaltime:0seconds源碼打上了補(bǔ)丁,然后用ant 構(gòu)建源碼:D:/apache-solr-1.3.0ant dist在 D:/apache-solr-1.3.0/dist 目錄下可以找到編譯好的 solr 了。然后把 solr 放到tomcat中去運(yùn)行它,把下面的內(nèi)容保存在TOMCAT_HOME/conf/Catalina/localhost/solr.xml 文件中:Xml 代碼EnvironmentdocBase=D:/apache-solr-1.3.0/dist/apache-solr-1.3.0.warname=solr/h
52、ometype=java.lang.Stringvalue=D:/apache-solr-1.3.0/exle/solroverride=true/修改 D:/apache-solr-1.3.0/excollapse。le/solr/conf/solrconfig.xml 使 solr 可以支持 ponent定義搜索組件,在附近:name=collapseclass=.apach定義一個(gè) handler 使用上面的搜索組件:Xml 代碼explicitcollapsedebug安裝啟動(dòng) tomcat,現(xiàn)在提交一些數(shù)據(jù)給它,用的示例數(shù)據(jù)就可以了。運(yùn)行:HtmlD:/apache-solr-1.3
53、.0/exmit=yes-jarle/ext.jarledocsjava*.xml代碼-Durl= SimpleSimpletTool:tTool:ver1.2WARNING:encodingsMakesureyourXMLarenotcurrentlysupportedsareencodedinUTF-8,otherSimple Simple Simple Simple Simple Simple Simple Simple Simple Simple Simple Simple SimpleSimpletTool: tTool: tTool: tTool: tTool: tTool: tT
54、ool: tTool: tTool: tTool: tTool: tTool: tTool:tTool:Ting Ting Ting Ting Ting Ting Ting Ting Ting Ting Ting TingTingfilesto.file filefile filefile filefile filefile file filefilehd.xmlipod_other.xmlipod_mem.xml.xmlmonitor.xml monitor2.xml mp500.xml sd500.xml solr.xmlspellchecker.xmlutf8-exle.xmlvidca
55、rd.xmlCOMMITtingSolrindexchanges.有結(jié)果了? 有了。然后開始查詢試試看。查詢:*%3A*&indent=on&qt=collapse&collapse=true&collapse.field=popularity&collapse.threshold=1結(jié)果:Xml 代碼lstlststrstrstrstrstrstrname=sus0name=QTime0name=collapse.fieldpopularity name=flid name=collapse.threshold1 name=indenton name=q*:*collapsename=col
56、lapsetruestrlstpopularityname=docname=SP2514N4name=F8V7067-APL-KIT1name=MA147LL/A1name=TWINX2048-3200PRO1name=VS1GB400C33name=1104111310& gt;HashDocSet(6) Time(ms):0/0/0/0SP2514Nstrname=idF8V7067-APL-KITMA147LL/Astrname=idTWINX2048-3200PROVS1GB400C31可以看到collapse_counts相關(guān)的輸出:popularity4lst name=64111
57、310strname=debugHashDocSet(6) Time(ms):0/0/0/0上面的 count 下的內(nèi)容(它的順序是 resu結(jié)果還有 4 個(gè),與 popularity=1 相同的結(jié)果還有戶的界面里提示“相同的其它內(nèi)容不有N 個(gè)”。oc 的順序),表示 popularity=6 相同的1 個(gè),依此類推。這樣就可以顯示給用使用的參數(shù)有:#啟用 collapse 組件collapse=true#用那個(gè) 字段來 hash 去除重量內(nèi)容collapse.field=popularity#要結(jié)果中可以最多出 現(xiàn)幾個(gè)相同的文檔collapse.threshold=1當(dāng)然還有其它參數(shù),請 看
58、:omon.params.CollapseParams 類。利用 SOLR 搭建企業(yè)搜索之九(solr 的查詢語法)solr 的一些查詢語法1. 首先假設(shè)數(shù)據(jù)里fields 有:name, address 預(yù)設(shè)的搜尋是name 這個(gè)字段, 如果要搜尋的數(shù)據(jù)剛好就是 name 這個(gè)字段,就不需要指定搜尋字段名稱.2. 查詢規(guī)則:如欲查詢特定字段(非預(yù)設(shè)字段),請?jiān)诓樵冊~前加上該字段名稱加 “:” (不包含”號(hào))符號(hào),例如: address:園:88xx1市海淀區(qū)上地1. q 代表 query input2. ver代表 solr 版本(建議不要變動(dòng)此變量)3. start 代表顯示結(jié)果從哪一筆結(jié)
59、果資料開始,預(yù)設(shè)為 0 代表第一筆, rows 是說要顯示幾筆數(shù)據(jù),預(yù)設(shè)為 10 筆(因?yàn)橛袝r(shí)查詢結(jié)果 可能有幾百筆,但不需要顯示所有結(jié)果,所以預(yù)設(shè)是從第一筆開始到第十筆)所以若要顯示第 10 到 30 筆就改為:http: /localhost:8080/solr/select/?indent=on&ver=2.2&q=address:市海淀區(qū)上地園+:88xx1&ver=2.2&start=10&rows= 20&indent=on(indent 代表輸出的 xml 要不要縮行.預(yù)設(shè)為開啟 on)3. 另外,要限定輸出結(jié)果的內(nèi)容可用 “fl=” 加上你要的字段名稱,如以下這個(gè)范例:http
60、: /localhost:8080/solr/select/?indent=on&ver度&start=0&rows=10&fl=name,address,=2.2&q=text:+OR+text:億在 fl= 之后加上了name,adress,所以結(jié)果會(huì)如下:8888億度市海淀區(qū)上地1園億度15. 查詢 name 或 address:直接輸入查詢詞, 如: 億度送出的內(nèi)容即為:name:億度 AND address:海淀6. 若要搜尋聯(lián)集結(jié)果,請?jiān)谠~與詞間空格或加上大寫 “OR” (不包含”號(hào)).例如: text:海淀 OR text:億度text:海淀 OR 億度或海淀 億度或name:億
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園環(huán)境創(chuàng)設(shè)家長參與2025年度合作協(xié)議
- 二零二五年度劇院包場合同-電影院租賃年度文化合作協(xié)議
- 2025年度跨境電商平臺(tái)國際人才招聘與派遣合同
- 二零二五年度茶山租賃及茶葉種植與農(nóng)業(yè)觀光旅游開發(fā)合同
- 二零二五年度商業(yè)街房地產(chǎn)招商代理執(zhí)行協(xié)議
- 2025年度金融科技股權(quán)分紅與風(fēng)險(xiǎn)防范協(xié)議
- 二零二五年度健身房浴室共享租賃合同范本
- 二零二五年度物業(yè)公司員工職業(yè)發(fā)展規(guī)劃合同
- 二零二五年度雇主免責(zé)協(xié)議書:網(wǎng)絡(luò)安全防護(hù)責(zé)任免除合同
- 2025年度煙草店店鋪轉(zhuǎn)讓與品牌形象統(tǒng)一化及區(qū)域市場拓展合同
- 《教育強(qiáng)國建設(shè)規(guī)劃綱要(2024-2035年)》解讀講座
- 《義務(wù)教育語文課程標(biāo)準(zhǔn)》2022年修訂版原版
- GB 30254-2024高壓三相籠型異步電動(dòng)機(jī)能效限定值及能效等級(jí)
- 天耀中華合唱簡譜大劇院版
- (全)電梯安全風(fēng)險(xiǎn)管控清單
- GB/T 24353-2022風(fēng)險(xiǎn)管理指南
- 新人教版六年級(jí)下冊科學(xué)全冊教學(xué)設(shè)計(jì)教案
- 《成本會(huì)計(jì)學(xué)》習(xí)題集及答案
- 熒光綠送貨單樣本excel模板
- 科技館解說詞
- 二年級(jí)下冊萬以內(nèi)數(shù)的認(rèn)識(shí)復(fù)習(xí)公開課(課堂PPT)
評(píng)論
0/150
提交評(píng)論