锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产国拍亚洲精品mv在线观看 ,亚洲视频在线观看网址,亚洲综合精品网站http://www.tkk7.com/tangzurui/category/34670.htmlzh-cnMon, 29 Dec 2008 15:50:26 GMTMon, 29 Dec 2008 15:50:26 GMT60lucene鏌ヨ涓涓畝鍗曠殑渚嬪瓙http://www.tkk7.com/tangzurui/archive/2008/12/12/245969.html姊撴灚姊撴灚Fri, 12 Dec 2008 07:48:00 GMThttp://www.tkk7.com/tangzurui/archive/2008/12/12/245969.htmlhttp://www.tkk7.com/tangzurui/comments/245969.htmlhttp://www.tkk7.com/tangzurui/archive/2008/12/12/245969.html#Feedback2http://www.tkk7.com/tangzurui/comments/commentRss/245969.htmlhttp://www.tkk7.com/tangzurui/services/trackbacks/245969.html闃呰鍏ㄦ枃

姊撴灚 2008-12-12 15:48 鍙戣〃璇勮
]]>
Lucene鎼滅儲寮曟搸API鐨勪富瑕佺被浠嬬粛http://www.tkk7.com/tangzurui/archive/2008/10/07/232867.html姊撴灚姊撴灚Tue, 07 Oct 2008 03:16:00 GMThttp://www.tkk7.com/tangzurui/archive/2008/10/07/232867.htmlhttp://www.tkk7.com/tangzurui/comments/232867.htmlhttp://www.tkk7.com/tangzurui/archive/2008/10/07/232867.html#Feedback0http://www.tkk7.com/tangzurui/comments/commentRss/232867.htmlhttp://www.tkk7.com/tangzurui/services/trackbacks/232867.html涓:IndexSearcher鏄悳绱㈢殑鍏ュ彛錛屼粬鐨剆earch鏂規硶鎻愪緵浜嗘悳绱㈠姛鑳?/strong>
Query鏈夊緢澶氬瓙綾伙紝 鍚勭涓嶅悓鐨勫瓙綾諱唬琛ㄤ簡涓嶅悓鐨勬煡璇㈡潯浠?涓嬫枃璇﹁堪
QueryParser鏄竴涓潪甯擱氱敤鐨勫府鍔╃被錛屼粬鐨勪綔鐢ㄦ槸鎶婄敤鎴瘋緭鍏ョ殑鏂囨湰杞崲涓哄唴緗殑Query瀵硅薄錛堝ぇ澶氭暟web鎼滅儲寮曟搸閮芥彁渚涗竴涓煡璇㈣緭鍏ユ鏉ヨ鐢ㄦ埛杈撳叆鏌ヨ鏉′歡錛夈俀ueryParser鍐呯疆鎻愪緵浜嗗緢澶氳娉曟潵浣夸嬌鐢ㄥ彲浠ヨ緭鍏ュ悇縐嶉珮綰ф潯浠剁殑Query銆傛瘮濡? "Hello AND world"浼氳瑙f瀽涓轟竴涓狝ND鍏崇郴鐨凚ooleanQuery錛屼粬鍖呭惈涓や釜TermQuery(Hell鍜寃orld)銆傝繖浜涜娉曡櫧鐒跺己澶э紝浣嗛兘閽堝鑻辨枃璁捐錛屽鎴戜滑闇瑕佷腑鏂囨悳绱㈡潵璇撮兘涓嶉渶瑕佷簡瑙eお澶氱殑Query綾誨瀷錛屼竴鑸嚑涓畝鍗曠殑灝卞鐢ㄤ簡銆俀ueryParser鐨勪嬌鐢ㄥ涓?br />QueryParser.parse(String query, String field, Analyzer analyzer) throws ParseException
鍏朵腑錛歲uery鏄敤鎴瘋緭鍏ョ殑鍐呭,field鏄悳绱㈤粯璁ょ殑field錛堝叾浠杅ield闇瑕佹樉寮忔寚瀹氾級錛宎nalyzer鏄敤鏉ュ皢鐢ㄦ埛杈撳叆鐨勫唴瀹逛篃浣滃垎鏋愬鐞嗭紙鍒嗚瘝錛夛紝涓鑸儏鍐典笅榪欓噷鐨刟naylyzer鏄痠ndex鐨勬椂鍊欓噰鐢ㄧ殑鍚屼竴analyzer銆?br />鍙﹀鎴戜滑涔熷彲浠ヨ嚜宸辨瀯閫犱竴涓猀ueryParser: new QueryParser(String field, Analyzer a)(鍚箟鍚屼笂),榪欐牱鍋氱殑濂藉鏄彲浠ヨ嚜宸卞畾涔夎皟鏁翠竴浜涘弬鏁?
鎼滅儲緇撴灉鐨勫鐞?Hits瀵硅薄
Hits瀵硅薄鏄悳绱㈢粨鏋滅殑闆嗗悎 涓昏鏈変笅闈㈠嚑涓柟娉?
length() ,榪欎釜鏂規硶璁板綍鏈夊灝戞潯緇撴灉榪斿洖(lazy loading)
doc(n) 榪斿洖絎琻涓褰?
id(in) 榪斿洖絎琻涓褰曠殑Document ID
score(n) 絎琻涓褰曠殑鐩稿叧搴?縐垎)
鐢變簬鎼滅儲鐨勭粨鏋滀竴鑸瘮杈冨ぇ錛屼粠鎬ц兘涓婅冭檻錛孒its瀵硅薄騫朵笉浼氱湡姝f妸鎵鏈夌殑緇撴灉鍏ㄩ儴鍙栧洖錛岄粯璁ゆ儏鍐典笅鏄繚鐣欏墠100涓褰?瀵逛簬涓鑸殑鎼滅儲寮曟搸,100涓褰曡凍澶熶簡).
鍒嗛〉鐨勫鐞?br />100鏉¤褰曡繕鏄お澶氾紝鎴戜滑澶氬崐浼氭瘡欏墊樉紺?0鏉¤褰曪紝鐒跺悗鍒嗕負鑻ュ共欏墊樉紺猴紝瀵逛簬鍒嗛〉錛屼竴鑸湁涓や釜鍔炴硶
鍦╯ession涓繚鐣檌ndexreader瀵硅薄鍜宧it瀵硅薄錛岀炕欏電殑鏃跺欐彁鍙栧唴瀹?
涓嶄嬌鐢╯ession錛屾瘡嬈¢兘綆鍗曞鐞嗕負閲嶆柊鏌ヨ
lucene鎺ㄨ崘鍏堜嬌鐢ㄧ浜屼釜鍔炴硶錛屽嵆姣忔閮介噸鏂版煡璇紝榪欐牱鍋氱殑濂藉鏄畝鍗曟柟渚匡紝涓嶉渶瑕佽冭檻session鐨勯棶棰橈紝lucene鐨勬煡璇㈡晥鐜囦篃鑳戒繚璇佹瘡嬈℃煡璇㈡椂闂翠笉闀匡紝闄ら潪鐪熸鏈変簡鎬ц兘闂錛屽惁鍒欎笉鐢ㄨ冭檻絎竴涓姙娉曘?br />緙撳瓨錛歊AMDirectory鐨勭敤娉?br />RAMDirectory瀵硅薄寰堝ソ鐢紝閫氳繃瀹冿紝鎴戜滑鍙互鎶婁竴涓櫘閫氱殑index瀹屽叏璇誨彇鍒板唴瀛樹腑,鐢ㄦ硶濡備笅錛?br />RAMDirectory ramDir = new RAMDirectory(dir);
榪欐牱鐨剅amdir鏁堢巼鑷劧姣旂湡姝g殑鏂囦歡緋葷粺蹇緢澶?br />Lucene鐨剆coring綆楁硶
lucence鏌ヨ鐨勭邯褰曢粯璁ゆ寜鐓х浉鍏沖害鎺掑簭錛岃繖涓浉鍏沖害灝辨槸score,scoring鐨勭畻娉曟槸姣旇緝澶嶆潅鐨?瀵逛簬鎴戜滑鍋氬簲鐢ㄧ殑浜轟技涔庢病鏈変粈涔堝府鍔╋紝錛堝厛璇翠竴涓婽erm: 鎴戠殑鐞嗚В鏄疶erm涓轟竴涓嫭绔嬬殑鏌ヨ璇?鐢ㄦ埛杈撳叆鐨勭殑鏌ヨ閫氳繃鍚勭鍒嗚瘝錛屽ぇ灝忓啓澶勭悊(姝h鍖?,娑堥櫎stopwords絳夛級浠ュ悗錛屼細宸睺erm涓哄熀鏈崟浣嶏級錛屽嚑涓叧閿弬鏁扮◢寰暀鎰忎竴涓嬪嵆鍙?br />Term鍦ㄦ枃绔犱腑鍑虹幇鐨勯鐜囬噺
鍖呭惈鍚屼竴涓猅erm鐨勬枃绔犵殑棰戠巼
field涓殑boosting鍙傛暟
term鐨勯暱搴?
term鍦ㄦ枃绔犱腑鐨勬暟閲?br />涓鑸潵璇?榪欎簺鍙傛暟鎴戜滑閮戒笉鍙兘鍘昏皟鏁? 濡傛灉浣犳兂浜嗚В鏇村,IndexSearcher榪樻彁渚涗簡涓涓猠xplain鏂規硶, 閫氳繃浼犲叆涓涓猀uery鍜宒ocument ID,浣犲彲浠ュ緱鍒頒竴涓狤xplaination瀵硅薄,浠栨槸瀵瑰唴閮ㄧ畻娉曚俊鎭殑綆鍗曞皝瑁?toString()涓涓嬪氨鍙互鐪嬪埌璇︾粏鐨勮鏄?
浜?鍒涘緩Query:鍚勭query浠嬬粛
鏈鏅氱殑TermQuery
TermQuery鏈鏅? 鐢═erm t=new Term("contents","cap"); new TermQuery(t)灝卞彲浠ユ瀯閫?br />TermQuery鎶婃煡璇㈡潯浠惰涓轟竴涓猭ey, 瑕佹眰鍜屾煡璇㈠唴瀹瑰畬鍏ㄥ尮閰?姣斿Field.Keyword綾誨瀷灝卞彲浠ヤ嬌鐢═ermQuery
RangeQuery
RangeQuery琛ㄧず涓涓寖鍥寸殑鎼滅儲鏉′歡,RangeQuery query = new RangeQuery(begin, end, included);
鏈鍚庝竴涓猙oolean鍊艱〃紺烘槸鍚﹀寘鍚竟鐣屾潯浠舵湰韜? 鐢ㄥ瓧絎﹁〃紺轟負"[begin TO end]" 鎴栬?{begin TO end}"
PrefixQuery
欏懼悕鎬濅箟,灝辨槸琛ㄧず浠ユ煇鏌愬紑澶寸殑鏌ヨ, 瀛楃琛ㄧず涓?something*"
BooleanQuery
榪欎釜鏄竴涓粍鍚堢殑Query,浣犲彲浠ユ妸鍚勭Query娣誨姞榪涘幓騫舵爣鏄庝粬浠殑閫昏緫鍏崇郴,娣誨姞鏉′歡鐢?br />public void add(Query query, boolean required, boolean prohibited)
鏂規硶, 鍚庝袱涓猙oolean鍙橀噺鏄爣紺篈ND or NOT涓夌鍏崇郴 瀛楃琛ㄧず涓? AND or NOT" 鎴?"+ -" ,涓涓狟ooleanQuery涓彲浠ユ坊鍔犲涓猀uery, 濡傛灉瓚呰繃setMaxClauseCount(int)鐨勫?榛樿1024涓?鐨勮瘽,浼氭姏鍑篢ooManyClauses閿欒.
PhraseQuery
琛ㄧず涓嶄弗鏍艱鍙ョ殑鏌ヨ,姣斿"red pig"瑕佸尮閰?red fat pig","red fat big pig"絳?PhraseQuery鎵浠ユ彁渚涗簡涓涓猻etSlop()鍙傛暟,鍦ㄦ煡璇腑,lucene浼氬皾璇曡皟鏁村崟璇嶇殑璺濈鍜屼綅緗?榪欎釜鍙傛暟琛ㄧず鍙互鎺ュ彈璋冩暣嬈℃暟闄愬埗,濡傛灉瀹為檯鐨勫唴瀹瑰彲浠ュ湪榪欎箞澶氭鍐呰皟鏁翠負瀹屽叏鍖歸厤,閭d箞灝辮瑙嗕負鍖歸厤.鍦ㄩ粯璁ゆ儏鍐典笅slop鐨勫兼槸0, 鎵浠ラ粯璁ゆ槸涓嶆敮鎸侀潪涓ユ牸鍖歸厤鐨? 閫氳繃璁劇疆slop鍙傛暟(姣斿"red pig"鍖歸厤"red fat pig"灝遍渶瑕?涓猻lop鏉ユ妸pig鍚庣Щ鍔?浣?,鎴戜滑鍙互璁﹍ucene鏉ユā緋婃煡璇? 鍊煎緱娉ㄦ剰鐨勬槸,PhraseQuery涓嶄繚璇佸墠鍚庡崟璇嶇殑嬈″簭,鍦ㄤ笂闈㈢殑渚嬪瓙涓?"pig red"闇瑕?涓猻lop,涔熷氨鏄鏋渟lop濡傛灉澶т簬絳変簬2,閭d箞"pig red"涔熶細琚涓烘槸鍖歸厤鐨?
WildcardQuery
浣跨敤?鍜?鏉ヨ〃紺轟竴涓垨澶氫釜瀛楁瘝姣斿wil*鍙互鍖歸厤 wild ,wila ,wilxaaaa...,鍊煎緱娉ㄦ剰鐨勬槸,鍦╳ildcard涓?鍙鏄尮閰嶄笂鐨勭邯褰?浠栦滑鐨勭浉鍏沖害閮芥槸涓鏍風殑,姣斿wilxaaaa鍜寃ild鐨勫浜巜il*鐨勭浉鍏沖害灝辨槸涓鏍風殑.
FuzzyQuery
榪欎釜Query瀵逛腑鏂囨病鏈変粈涔堢敤澶?浠栬兘妯$硦鍖歸厤鑻辨枃鍗曡瘝(鍓嶉潰鐨勯兘鏄瘝緇?,姣斿fuzzy鍜寃uzzy浠栦滑鍙互鐪嬫垚綾諱技, 瀵逛簬鑻辨枃鐨勫悇縐嶆椂鎬佸彉鍖栧拰澶嶆暟褰㈠紡,榪欎釜FuzzyQuery榪樼畻鏈夌敤,鍖歸厤緇撴灉鐨勭浉鍏沖害鏄笉涓鏍風殑.瀛楃琛ㄧず涓?"fuzzy~"
涓?QueryParser浣跨敤
瀵逛簬鎼滅儲寮曟搸, 寰堝鎯呭喌涓嬬敤鎴峰彧闇瑕佷竴涓緭鍏ユ灝辮杈撳叆鎵鏈夌殑鏌ヨ鏉′歡(姣斿google), 榪欐椂,QueryParser灝辨淳涓婄敤鍦轟簡,浠栫殑浣滅敤灝辨槸鎶婂悇縐嶇敤鎴瘋緭鍏ヨ漿涓篞uery鎴栬匭uery緇? 浠栨妸涓婇潰鎻愬埌鐨凲uery鐨勫瓧絎﹁〃紺?Query.toString)杞寲涓哄疄闄呯殑Query瀵硅薄,姣斿"wuzzy~"灝變細杞崲涓篎uzzyQuery, 涓嶈繃QueryParser鐢ㄥ埌浜咥nalyzer,鎵浠ueryParser parse榪囧悗鐨凲uery鍐峵oString鏈繀鍜屽師鏉ョ殑涓鏍?Query棰濆鐨勮娉曟湁:
鍒嗙粍:Groupping
姣斿"(a AND b) or C",灝辨槸鎷彿鍒嗙粍,寰堝鏄撶悊瑙?br />FieldSelectiong
QueryParser鐨勬煡璇㈡潯浠舵槸瀵歸粯璁ょ殑Field榪涜鐨? 瀹冨湪QueryParser瑙f瀽鐨勬椂鍊欑紪鐮佹寚瀹? 濡傛灉鐢ㄦ埛闇瑕佸湪鏌ヨ鏉′歡涓夌敤鍙﹀鐨凢ield, 鍙互浣跨敤濡備笅璇硶: fieldname:fielda, 濡傛灉鏄涓垎緇?鍙互鐢╢ieldname:(fielda fieldb fieldc)琛ㄧず.
*鍙烽棶棰?br />QueryParse榛樿涓嶅厑璁?鍙峰嚭鐜板湪寮濮嬮儴鍒嗭紝榪欐牱鍋氱殑鐩殑涓昏鏄負浜嗛槻姝㈢敤鎴瘋杈撳叆*鏉ュご瀵艱嚧涓ラ噸鐨勬ц兘闂錛堜細鎶婃墍鏈夎褰曡鍑猴級
boosting
閫氳繃hello^2.0 鍙互瀵筯ello榪欎釜term榪涜boosting錛?鎴戞兂涓嶅埌浠涔堢敤鎴蜂細榪欐牱涔坆t)
QueryParser鏄竴涓噯澶囧ソ鐨?绔嬪嵆鍙互宸ヤ綔鐨勫府鍔╃被,涓嶈繃浠栬繕鏄彁渚涗簡寰堝鍙傛暟渚涚▼搴忓憳璋冩暣錛岄鍏?鎴戜滑闇瑕佽嚜宸辨瀯閫犱竴涓柊鐨凲ueryParser,鐒跺悗瀵逛粬鐨勫悇縐嶅弬鏁版潵瀹氬埗鍖?


姊撴灚 2008-10-07 11:16 鍙戣〃璇勮
]]>
lucene鍏蜂綋鐨勬煡璇㈣鍙?/title><link>http://www.tkk7.com/tangzurui/archive/2008/09/22/230357.html</link><dc:creator>姊撴灚</dc:creator><author>姊撴灚</author><pubDate>Mon, 22 Sep 2008 02:17:00 GMT</pubDate><guid>http://www.tkk7.com/tangzurui/archive/2008/09/22/230357.html</guid><wfw:comment>http://www.tkk7.com/tangzurui/comments/230357.html</wfw:comment><comments>http://www.tkk7.com/tangzurui/archive/2008/09/22/230357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/tangzurui/comments/commentRss/230357.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/tangzurui/services/trackbacks/230357.html</trackback:ping><description><![CDATA[ <p>鏈枃涓昏緇撳悎嫻嬭瘯妗堜緥浠嬬粛浜哃ucene涓嬬殑鍚勭鏌ヨ璇彞浠ュ強瀹冧滑鐨勭畝鍖栨柟娉?<br />閫氳繃鏈枃浣犲皢浜嗚ВLucene鐨勫熀鏈煡璇㈣鍙?騫跺彲浠ュ涔犳墍鏈夌殑嫻嬭瘯浠g爜宸插姞寮轟簡瑙?<br /><br /></p> <p> <strong> <strong>鍏蜂綋鐨勬煡璇㈣鍙?/strong> <strong> <br /> </strong> </strong> </p> <p>鍦ㄤ簡瑙d簡SQL鍚? 浣犳槸鍚︽兂浜嗚В涓涓嬫煡璇㈣娉曟爲?鍦ㄨ繖閲岀畝瑕佷粙緇嶄竴浜涜兘琚獿ucene鐩存帴浣跨敤鐨勬煡璇㈣鍙?</p> <p> <strong> <strong>1.聽聽聽聽聽聽聽聽 </strong> <strong>TermQuery</strong> </strong> <strong> <br /> </strong>鏌ヨ鏌愪釜鐗瑰畾鐨勮瘝,鍦ㄦ枃绔犲紑濮嬬殑渚嬪瓙涓凡鏈変粙緇?甯哥敤浜庢煡璇㈠叧閿瓧.</p> <p>聽聽聽聽聽聽聽<span id="jvjthrx" class="code"><strong><font face="Courier New" color="#3366ff">聽聽聽聽聽 [Test]<br /></font></strong></span><span id="bpffbdn" class="code"><strong><font face="Courier New" color="#3366ff">聽聽聽聽聽聽聽聽 public void Keyword()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 IndexSearcher searcher = new IndexSearcher(directory);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Term t = new Term("isbn", "1930110995");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Query query = new TermQuery(t);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br /></font></strong></span><span id="fhlptlp" class="code"><strong><font face="Courier New" color="#3366ff">聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(1, hits.Length(), "JUnit in Action");<br />聽聽聽聽聽聽聽聽 }<br /></font></strong></span></p> <p align="left">娉ㄦ剰Lucene涓殑鍏抽敭瀛?鏄渶瑕佺敤鎴峰幓淇濊瘉鍞竴鎬х殑.</p> <p> <strong>聽TermQuery鍜孮ueryParse<br /></strong> </p> <p>鍙鍦≦ueryParse鐨凱arse鏂規硶涓彧鏈変竴涓獁ord,灝變細鑷姩杞崲鎴怲ermQuery.</p> <p> <strong> <strong> <strong>2.聽聽聽聽聽聽聽聽 </strong> <strong>RangeQuery<br /></strong> </strong> </strong>鐢ㄤ簬鏌ヨ鑼冨洿,閫氬父鐢ㄤ簬鏃墮棿,榪樻槸鏉ョ湅渚嬪瓙:</p> <p> <span id="fzlfljf" class="code"> <font face="Courier New" color="#3366ff"> <strong>namespace dotLucene.inAction.BasicSearch<br />{<br />聽聽聽聽 public class RangeQueryTest : LiaTestCase<br />聽聽聽聽 {<br />聽聽聽聽聽聽聽聽 private Term begin, end; </strong> </font> </span> </p> <p> <span id="hrbxbzx" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 [SetUp]<br />聽聽聽聽聽聽聽聽 protected override void Init()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 begin = new Term("pubmonth", "200004");</strong> </font> </span> </p> <p> <span id="blnznpf" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽聽聽聽聽聽 end = new Term("pubmonth", "200206");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 base.Init();<br />聽聽聽聽聽聽聽聽 }<br /></strong> </font> </span> </p> <p> <span id="pbbdpnl" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 [Test]<br />聽聽聽聽聽聽聽聽 public void Inclusive()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 RangeQuery query = new RangeQuery(begin, end, true);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 IndexSearcher searcher = new IndexSearcher(directory);<br /></strong> </font> </span> </p> <p> <span id="nppblbr" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(1, hits.Length());<br />聽聽聽聽聽聽聽聽 } </strong> </font> </span> </p> <p> <span id="jvnzjhb" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 [Test]<br />聽聽聽聽聽聽聽聽 public void Exclusive()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 RangeQuery query = new RangeQuery(begin, end, false);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 IndexSearcher searcher = new IndexSearcher(directory);<br /></strong> </font> </span> </p> <p> <span id="xhtnlnt" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(0, hits.Length());<br />聽聽聽聽聽聽聽聽 }</strong> </font> </span> </p> <p> <span id="zhbdpdb" class="code"> <strong> <font face="Courier New" color="#3366ff">聽聽聽聽 }<br />}<br /></font> </strong> </span> </p> <p align="left">RangeQuery鐨勭涓変釜鍙傛暟鐢ㄤ簬琛ㄧず鏄惁鍖呭惈璇ヨ搗姝㈡棩鏈?</p> <p> <strong>RangeQuery</strong> <strong>鍜?/strong> <strong>QueryParse</strong> </p> <p>聽聽聽聽聽聽聽聽<span id="dnpjljj" class="code"><font face="Courier New" color="#3366ff"><strong>聽聽聽聽聽 [Test]<br />聽聽聽聽聽聽聽聽 public void TestQueryParser()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Query query = QueryParser.Parse("pubmonth:[200004 TO 200206]", "subject", new SimpleAnalyzer());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.IsTrue(query is RangeQuery);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 IndexSearcher searcher = new IndexSearcher(directory);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br /></strong></font></span></p> <p> <span id="rbbvpfd" class="code"> <strong> <font face="Courier New" color="#3366ff">聽聽聽聽聽聽聽聽聽聽聽聽聽 query = QueryParser.Parse("{200004 TO 200206}", "pubmonth", new SimpleAnalyzer());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(0, hits.Length(), "JDwA in 200206");<br />聽聽聽聽聽聽聽聽 } </font> </strong> </span> </p> <p align="left">Lucene鐢╗] 鍜寋}鍒嗗埆琛ㄧず鍖呭惈鍜屼笉鍖呭惈.</p> <p> <strong>3.聽聽聽</strong> <strong>PrefixQuery</strong> </p> <p align="left">鐢ㄤ簬鎼滅儲鏄惁鍖呭惈鏌愪釜鐗瑰畾鍓嶇紑,甯哥敤浜嶤atalog鐨勬绱?</p> <p>聽聽聽聽<span id="blvhjpx" class="code"><font face="Courier New" color="#3366ff"><strong>聽聽聽聽聽聽聽[Test]<br />聽聽聽聽聽聽聽聽 public聽 void聽 TestPrefixQuery()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 PrefixQuery query = new PrefixQuery(new Term("category", "/Computers"));<br /></strong></font></span></p> <p> <span id="lxhjvdr" class="code"> <strong> <font face="Courier New" color="#3366ff">聽聽聽聽聽聽聽聽聽聽聽聽 聽IndexSearcher searcher = new IndexSearcher(directory);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(2, hits.Length());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 query = new PrefixQuery(new Term("category", "/Computers/JUnit"));<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(1, hits.Length(), "JUnit in Action");<br />聽聽聽聽聽聽聽聽 }<br /></font> </strong> </span> </p> <p> <strong>PrefixQuery鍜孮ueryParse</strong> </p> <p>聽聽聽聽聽聽聽聽聽聽聽 聽 <span id="rtnhzpx" class="code"><font face="Courier New" color="#3366ff"><strong>[Test]<br />聽聽聽聽聽聽聽聽 public void TestQueryParser()<br />聽聽聽聽聽聽聽聽 {</strong></font></span></p> <p> <span id="bnhjjjp" class="code"> <strong> <font face="Courier New" color="#3366ff">聽聽聽聽聽聽聽聽聽聽聽聽聽 QueryParser qp = new QueryParser("category", new SimpleAnalyzer());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 qp.SetLowercaseWildcardTerms(false);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Query query =qp.Parse("/Computers*");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Console.Out.WriteLine("query = {0}", query.ToString());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 IndexSearcher searcher = new IndexSearcher(directory);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(2, hits.Length());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 query =qp.Parse("/Computers/JUnit*");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(1, hits.Length(), "JUnit in Action");<br />聽聽聽聽聽聽聽聽 }<br /></font> </strong> </span> </p> <p align="left">榪欓噷闇瑕佹敞鎰忕殑鏄垜浠嬌鐢ㄤ簡QueryParser瀵硅薄,鑰屼笉鏄疩ueryParser綾? 鍘熷洜鍦ㄤ簬浣跨敤瀵硅薄鍙互瀵筈ueryParser鐨勪竴浜涢粯璁ゅ睘鎬ц繘琛屼慨鏀?姣斿鍦ㄤ笂闈㈢殑渚嬪瓙涓垜浠殑category鏄ぇ鍐欑殑,鑰孮ueryParser榛樿浼氭妸鎵鏈夌殑鍚?鐨勬煡璇㈠瓧絎︿覆鍙樻垚灝忓啓/computer*. 榪欐牱鎴戜滑灝變細鏌ヤ笉鍒板師鏂囦腑鐨?Computers* ,鎵浠ユ垜浠渶瑕侀氳繃璁劇疆QueryParser鐨勯粯璁ゅ睘鎬ф潵鏀瑰彉榪欎竴榛樿閫夐」.鍗硄p.SetLowercaseWildcardTerms(false)鎵鍋氱殑宸ヤ綔. </p> <p> <strong>4.聽聽聽聽</strong> <strong>BooleanQuery<br /></strong> </p> <p align="left">鐢ㄤ簬嫻嬭瘯婊¤凍澶氫釜鏉′歡.</p> <p align="left">涓嬮潰涓や釜渚嬪瓙鐢ㄤ簬鍒嗗埆嫻嬭瘯浜嗘弧瓚充笌鏉′歡鍜屾垨鏉′歡鐨勬儏鍐?</p> <p> <span id="pzjvfdl" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 [Test]<br />聽聽聽聽聽聽聽聽 public void And()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 TermQuery searchingBooks =<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 new TermQuery(new Term("subject", "junit"));<br /></strong> </font> </span> </p> <p> <span id="rjfxrzn" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽聽聽聽聽聽 RangeQuery currentBooks =<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 new RangeQuery(new Term("pubmonth", "200301"),<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽 new Term("pubmonth", "200312"),<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽 true);<br /></strong> </font> </span> <span id="brdnpfl" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽聽聽聽聽聽 BooleanQuery currentSearchingBooks = new BooleanQuery();<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 currentSearchingBooks.Add(searchingBooks, true, false);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 currentSearchingBooks.Add(currentBooks, true, false);<br /></strong> </font> </span> <span id="zjlnrfd" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽聽聽聽聽聽 IndexSearcher searcher = new IndexSearcher(directory);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(currentSearchingBooks);</strong> </font> </span> </p> <p> <span id="xxblvnb" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽聽聽聽聽聽 AssertHitsIncludeTitle(hits, "JUnit in Action");<br />聽聽聽聽聽聽聽聽 }<br /></strong> </font> </span> <span id="tfxhbjz" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 [Test]<br />聽聽聽聽聽聽聽聽 public void Or()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 TermQuery methodologyBooks = new TermQuery(<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 new Term("category",<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽 "/Computers/JUnit"));<br /></strong> </font> </span> <span id="nhblxtj" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽聽聽聽聽聽 TermQuery easternPhilosophyBooks = new TermQuery(<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 new Term("category",<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽 "/Computers/Ant"));<br /></strong> </font> </span> <span id="zrtfpfn" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽聽聽聽聽聽 BooleanQuery enlightenmentBooks = new BooleanQuery();<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 enlightenmentBooks.Add(methodologyBooks, false, false);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 enlightenmentBooks.Add(easternPhilosophyBooks, false, false);<br /></strong> </font> </span> <span id="zdxzrpf" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽聽聽聽聽聽 IndexSearcher searcher = new IndexSearcher(directory);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(enlightenmentBooks);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Console.Out.WriteLine("or = " + enlightenmentBooks);<br /></strong> </font> </span> <span id="llhjtrx" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽聽聽聽聽聽 AssertHitsIncludeTitle(hits, "Java Development with Ant");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 AssertHitsIncludeTitle(hits, "JUnit in Action");</strong> </font> </span> </p> <p> <span id="pxzbftt" class="code"> <strong> <font face="Courier New" color="#3366ff">聽聽聽聽聽聽聽聽 }</font> </strong> </span> </p> <p>浠涔堟椂鍊欐槸涓庝粈涔堟椂鍊欏張鏄垨? 鍏抽敭鍦ㄤ簬BooleanQuery瀵硅薄鐨凙dd鏂規硶鐨勫弬鏁?</p> <p>鍙傛暟涓鏄緟娣誨姞鐨勬煡璇㈡潯浠?</p> <p>鍙傛暟浜孯equired琛ㄧず榪欎釜鏉′歡蹇呴』婊¤凍鍚? True琛ㄧず蹇呴』婊¤凍, False琛ㄧず鍙互涓嶆弧瓚寵鏉′歡.</p> <p>鍙傛暟涓塒rohibited琛ㄧず榪欎釜鏉′歡蹇呴』鎷掔粷鍚? True琛ㄧず榪欎箞婊¤凍榪欎釜鏉′歡鐨勭粨鏋滆鎺掗櫎, False琛ㄧず鍙互婊¤凍璇ユ潯浠?</p> <p>榪欐牱浼氭湁涓夌緇勫悎鎯呭喌,濡備笅琛ㄦ墍紺?</p> <p> <img src="http://www.alphatom.com/images/stories/img_pictures/Lucene6.1.Jpeg" onload="imgResize(this)" border="0" script_onload="imgResize(this)" /> </p> <p> <strong>BooleanQuery</strong> <strong>鍜?/strong> <strong>QueryParse</strong> </p> <p> <strong> <font color="#3366ff"> <font face="Courier New"> <span id="zrnpzxv" class="code">聽聽聽聽聽聽聽聽 [Test]<br />聽聽聽聽聽聽聽聽 public void TestQueryParser()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Query query = QueryParser.Parse("pubmonth:[200301 TO 200312] AND junit", "subject", new SimpleAnalyzer());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 IndexSearcher searcher = new IndexSearcher(directory);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(1, hits.Length());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 query = QueryParser.Parse("/Computers/JUnit OR /Computers/Ant", "category", new WhitespaceAnalyzer());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(2, hits.Length());<br />聽聽聽聽聽聽聽聽 }</span> <br /> </font> </font> </strong> </p> <p>娉ㄦ剰AND鍜孫R鐨勫ぇ灝?濡傛灉鎯寵錛′笌闈濨 灝辯敤 A AND 鈥揃 琛ㄧず, +A 鈥揃涔熷彲浠?</p> <p>榛樿鐨勬儏鍐典笅QueryParser浼氭妸絀烘牸璁や負鏄垨鍏崇郴,灝辮薄google涓鏍?浣嗘槸浣犲彲浠ラ氳繃QueryParser瀵硅薄淇敼榪欎竴灞炴?</p> <p> <span id="rbdprxd" class="code"> <font face="Courier New" color="#3366ff"> <strong>[Test]<br />聽聽聽聽聽聽聽聽 public void TestQueryParserDefaultAND()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 QueryParser qp = new QueryParser("subject", new SimpleAnalyzer());<br />聽聽聽聽聽聽聽聽聽聽聽 聽聽qp.SetOperator(QueryParser.DEFAULT_OPERATOR_AND );<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Query query = qp.Parse("pubmonth:[200301 TO 200312] junit");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 IndexSearcher searcher = new IndexSearcher(directory);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(1, hits.Length());</strong> </font> </span> </p> <p> <strong> <font color="#3366ff"> <font face="Courier New"> <span id="llnhjxv" class="code">聽聽聽聽聽聽聽聽 }</span> <br /> </font> </font>5.聽聽聽聽聽聽聽聽 PhraseQuery<br /></strong>鏌ヨ鐭,榪欓噷闈富瑕佹湁涓涓猻lop鐨勬蹇? 涔熷氨鏄悇涓瘝涔嬮棿鐨勪綅縐誨亸宸? 榪欎釜鍊間細褰卞搷鍒扮粨鏋滅殑璇勫垎.濡傛灉slop涓?,褰撶劧鏈鍖歸厤.鐪嬬湅涓嬮潰鐨勪緥瀛愬氨姣旇緝瀹規槗鏄庣櫧浜?鏈夊叧slop鐨勮綆楃敤鎴峰氨涓嶉渶瑕佺悊瑙d簡,涓嶈繃slop澶ぇ鐨勬椂鍊欏鏌ヨ鏁堢巼鏄湁褰卞搷鐨?鎵浠ュ湪瀹為檯浣跨敤涓鎶婅鍊艱灝忎竴鐐?<strong>聽</strong>PhraseQuery瀵逛簬鐭鐨勯『搴忔槸涓嶇鐨?榪欑偣鍦ㄦ煡璇㈡椂闄や簡鎻愰珮鍛戒腑鐜囧,涔熶細瀵規ц兘浜х敓寰堝ぇ鐨勫獎鍝? 鍒╃敤SpanNearQuery鍙互瀵圭煭璇殑欏哄簭榪涜鎺у埗,鎻愰珮鎬ц兘.<br />聽聽聽聽聽 聽 <span id="hrtnpnb" class="code"><font face="Courier New" color="#3366ff"><strong>[SetUp]<br />聽聽聽聽 protected void Init()<br />聽聽聽聽 {<br />聽聽聽聽聽聽聽聽 // set up sample document<br />聽聽聽聽聽聽聽聽 RAMDirectory directory = new RAMDirectory();<br />聽聽聽聽聽聽聽聽 IndexWriter writer = new IndexWriter(directory,<br />聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 new WhitespaceAnalyzer(), true);<br />聽聽聽聽聽聽聽聽 Document doc = new Document();<br />聽聽聽聽聽聽聽聽 doc.Add(Field.Text("field",<br />聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 "the quick brown fox jumped over the lazy dog"));<br />聽聽聽聽聽聽聽聽 writer.AddDocument(doc);<br />聽聽聽聽聽聽聽聽 writer.Close();</strong></font></span></p> <p> <span id="ltxxjrn" class="code"> <strong> <font face="Courier New" color="#3366ff">聽聽聽聽聽聽聽聽 searcher = new IndexSearcher(directory);<br />聽聽聽聽 }<br /></font> </strong> </span>聽聽聽聽<span id="tblnpfv" class="code"><font face="Courier New" color="#3366ff"><strong>聽聽private bool matched(String[] phrase, int slop)<br />聽聽聽聽 {<br />聽聽聽聽聽聽聽聽 PhraseQuery query = new PhraseQuery();<br />聽聽聽聽聽聽聽聽 query.SetSlop(slop);<br /></strong></font></span></p> <p> <span id="dlfhrhf" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 for (int i = 0; i < phrase.Length; i++)<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 query.Add(new Term("field", phrase[i]));<br />聽聽聽聽聽聽聽聽 }<br /></strong> </font> </span> </p> <p> <span id="zhjvfnj" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽 return hits.Length() > 0;<br />聽聽聽聽 }</strong> </font> </span> </p> <p> <span id="zhtvxdd" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽 [Test]<br />聽聽聽聽 public void SlopComparison()<br />聽聽聽聽 {<br />聽聽聽聽聽聽聽聽 String[] phrase = new String[]{"quick", "fox"};<br /></strong> </font> </span> </p> <p> <span id="jrdprpn" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 Assert.IsFalse(matched(phrase, 0), "exact phrase not found");</strong> </font> </span> </p> <p> <span id="pnnrtbp" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 Assert.IsTrue(matched(phrase, 1), "close enough");<br />聽聽聽聽 }<br /></strong> </font> </span> </p> <p> <span id="hnblpdl" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽[Test]<br />聽聽聽聽 public void Reverse()<br />聽聽聽聽 {<br />聽聽聽聽聽聽聽聽 String[] phrase = new String[] {"fox", "quick"};</strong> </font> </span> </p> <p> <span id="nvxrlrh" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 Assert.IsFalse(matched(phrase, 2), "exact phrase not found");</strong> </font> </span> </p> <p> <span id="dtxhjjp" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 Assert.IsTrue(matched(phrase, 3), "close enough");<br />聽聽聽聽 }</strong> </font> </span> </p> <p> <span id="dlvfjxv" class="code"> <strong> <font face="Courier New" color="#3366ff">聽聽聽聽 [Test]<br />聽聽聽聽 public void Multiple()-<br />聽聽聽聽 {<br />聽聽聽聽聽聽聽聽 Assert.IsFalse(matched(new String[] {"quick", "jumped", "lazy"}, 3), "not close enough");<br />聽聽聽聽聽聽聽聽 Assert.IsTrue(matched(new String[] {"quick", "jumped", "lazy"}, 4), "just enough");<br />聽聽聽聽聽聽聽聽 Assert.IsFalse(matched(new String[] {"lazy", "jumped", "quick"}, 7), "almost but not quite");<br />聽聽聽聽聽聽聽聽 Assert.IsTrue(matched(new String[] {"lazy", "jumped", "quick"}, 8), "bingo");<br />聽聽聽聽 }</font> </strong> </span> </p> <p align="left"> <strong>PhraseQuery鍜孮ueryParse</strong> </p> <p align="left">鍒╃敤QueryParse榪涜鐭鏌ヨ鐨勬椂鍊欒鍏堣瀹歴lop鐨勫?鏈変袱縐嶆柟寮忓涓嬫墍紺?/p> <p> <span id="lldxhpd" class="code"> <font face="Courier New" color="#3366ff"> <strong>[Test]<br />聽聽聽聽 public void TestQueryParser()<br />聽聽聽聽 {<br />聽聽聽聽聽聽聽聽 Query q1 = QueryParser.Parse(""quick fox"",<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 "field", new SimpleAnalyzer());<br />聽聽聽聽聽聽聽聽 Hits hits1 = searcher.Search(q1);<br />聽聽聽聽聽聽聽聽 Assert.AreEqual(hits1.Length(), 0);<br /></strong> </font> </span> </p> <p> <span id="rpjtxnt" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 Query q2 = QueryParser.Parse(""quick fox"~1",聽聽聽聽聽聽聽聽聽 //絎竴縐嶆柟寮?br />聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 "field", new SimpleAnalyzer());<br />聽聽聽聽聽聽聽聽 Hits hits2 = searcher.Search(q2);<br />聽聽聽聽聽聽聽聽 Assert.AreEqual(hits2.Length(), 1);</strong> </font> </span> </p> <p> <span id="lrbnpdb" class="code"> <strong> <font face="Courier New" color="#3366ff">聽聽聽聽聽聽聽聽 QueryParser qp = new QueryParser("field", new SimpleAnalyzer());<br />聽聽聽聽聽聽聽聽 qp.SetPhraseSlop(1);聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //絎簩縐嶆柟寮?br />聽聽聽聽聽聽聽聽 Query q3=qp.Parse(""quick fox"");<br />聽聽聽聽聽聽聽聽 Assert.AreEqual(""quick fox"~1", q3.ToString("field"),"sloppy, implicitly");<br />聽聽聽聽聽聽聽聽 Hits hits3 = searcher.Search(q2);<br />聽聽聽聽聽聽聽聽 Assert.AreEqual(hits3.Length(), 1);<br />聽聽聽聽 }<br /></font> </strong> </span> </p> <p> <strong>6.聽聽聽聽聽聽聽聽 WildcardQuery<br /></strong>閫氶厤絎︽悳绱?闇瑕佹敞鎰忕殑鏄痗hild, mildew鐨勫垎鍊兼槸涓鏍風殑. <br /><strong><font color="#3366ff"><font face="Courier New"><span id="tbbfxfd" class="code">聽聽聽聽聽聽聽聽 [Test]<br />聽聽聽聽聽聽聽聽 public void Wildcard()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 IndexSingleFieldDocs(new Field[]<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Field.Text("contents", "wild"),<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Field.Text("contents", "child"),<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Field.Text("contents", "mild"),<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Field.Text("contents", "mildew")<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 });<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 IndexSearcher searcher = new IndexSearcher(directory);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Query query = new WildcardQuery(<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 new Term("contents", "?ild*"));<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(3, hits.Length(), "child no match");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(hits.Score(0), hits.Score(1), 0.0, "score the same");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(hits.Score(1), hits.Score(2), 0.0, "score the same");<br />聽聽聽聽聽聽聽聽 }</span><br /></font></font>WildcardQuery鍜孮ueryParse<br /></strong>闇瑕佹敞鎰忕殑鏄嚭浜庢ц兘鐨勮冭檻浣跨敤QueryParse鐨勬椂鍊?涓嶅厑璁稿湪寮澶村氨浣跨敤灝變嬌鐢ㄩ氶厤絎?<br />鍚屾牱澶勪簬鎬ц兘鑰冭檻浼氬皢鍙湪鏈熬鍚湁*鐨勬煡璇㈣瘝杞崲涓篜refixQuery.<br /><font color="#3366ff"><strong><font face="Courier New"><span id="rjdnpxt" class="code">聽聽聽聽聽聽聽聽 [Test, ExpectedException(typeof (ParseException))]<br />聽聽聽聽聽聽聽聽 public void TestQueryParserException()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Query query = QueryParser.Parse("?ild*", "contents", new WhitespaceAnalyzer());<br /></span><span id="fdphjjh" class="code">聽聽聽聽聽聽聽聽 }</span></font></strong></font></p> <p> <span id="ntdhbxf" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 [Test]<br />聽聽聽聽聽聽聽聽 public void TestQueryParserTailAsterrisk()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Query query = QueryParser.Parse("mild*", "contents", new WhitespaceAnalyzer());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.IsTrue(query is PrefixQuery);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.IsFalse(query is WildcardQuery);</strong> </font> </span> </p> <p> <span id="tnphtrp" class="code"> <font face="Courier New" color="#3366ff"> <strong>聽聽聽聽聽聽聽聽 }</strong> </font> </span> </p> <p> <strong> <span id="ltfrlhp" class="code"> <font face="Courier New" color="#3366ff">聽聽聽聽聽聽聽聽 [Test]<br />聽聽聽聽聽聽聽聽 public void TestQueryParser()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Query query = QueryParser.Parse("mi?d*", "contents", new WhitespaceAnalyzer());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual(2, hits.Length());<br />聽聽聽聽聽聽聽聽 }<br /></font> </span>7.聽聽聽聽聽聽聽聽 FuzzyQuery<br /></strong>妯$硦鏌ヨ, 闇瑕佹敞鎰忕殑鏄袱涓尮閰嶉」鐨勫垎鍊兼槸涓嶅悓鐨?榪欑偣鍜學ildcardQuery鏄笉鍚岀殑</p> <p> <span id="zxttvdj" class="code"> <strong> <font face="Courier New" color="#3366ff">聽聽聽聽聽聽聽聽 [Test]<br />聽聽聽聽聽聽聽聽 public void Fuzzy()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Query query = new FuzzyQuery(new Term("contents", "wuzza"));<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual( 2, hits.Length(),"both close enough");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.IsTrue(hits.Score(0) != hits.Score(1),"wuzzy closer than fuzzy");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual("wuzzy", hits.Doc(0).Get("contents"),"wuzza bear");<br />聽聽聽聽聽聽聽聽 }</font> </strong> </span> </p> <span id="nlpjtbr" class="code"> <p> <br /> <strong>FuzzyQuery鍜孮ueryParse</strong> </p> </span> <p>娉ㄦ剰鍜孭hraseQuery涓〃紺簊lop鐨勫尯鍒?鍓嶈厏鍚庤璺熸暟瀛?</p> <p> <span id="rxjtljh" class="code"> <strong> <font face="Courier New" color="#3366ff">聽聽聽聽聽聽聽聽 [Test]<br />聽聽聽聽聽聽聽聽 public void TestQueryParser()<br />聽聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Query query =QueryParser.Parse("wuzza~","contents",new SimpleAnalyzer());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Hits hits = searcher.Search(query);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽 Assert.AreEqual( 2, hits.Length(),"both close enough");<br />聽聽聽聽聽聽聽聽 }<br /></font> </strong> </span> </p> <img src ="http://www.tkk7.com/tangzurui/aggbug/230357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/tangzurui/" target="_blank">姊撴灚</a> 2008-09-22 10:17 <a href="http://www.tkk7.com/tangzurui/archive/2008/09/22/230357.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>絎?1 閮ㄥ垎: 鍒濊瘑 Lucenehttp://www.tkk7.com/tangzurui/archive/2008/09/17/229380.html姊撴灚姊撴灚Wed, 17 Sep 2008 04:10:00 GMThttp://www.tkk7.com/tangzurui/archive/2008/09/17/229380.htmlhttp://www.tkk7.com/tangzurui/comments/229380.htmlhttp://www.tkk7.com/tangzurui/archive/2008/09/17/229380.html#Feedback0http://www.tkk7.com/tangzurui/comments/commentRss/229380.htmlhttp://www.tkk7.com/tangzurui/services/trackbacks/229380.html鏈枃棣栧厛浠嬬粛浜哃ucene鐨勪竴浜涘熀鏈蹇碉紝鐒跺悗寮鍙戜簡涓涓簲鐢ㄧ▼搴忔紨紺轟簡鍒╃敤Lucene寤虹珛绱㈠紩騫跺湪璇ョ儲寮曚笂榪涜鎼滅儲鐨勮繃紼嬨?/blockquote>

Lucene 綆浠?/span>

Lucene 鏄竴涓熀浜?Java 鐨勫叏鏂囦俊鎭绱㈠伐鍏峰寘錛屽畠涓嶆槸涓涓畬鏁寸殑鎼滅儲搴旂敤紼嬪簭錛岃屾槸涓轟綘鐨勫簲鐢ㄧ▼搴忔彁渚涚儲寮曞拰鎼滅儲鍔熻兘銆侺ucene 鐩墠鏄?Apache Jakarta 瀹舵棌涓殑涓涓紑婧愰」鐩備篃鏄洰鍓嶆渶涓烘祦琛岀殑鍩轟簬 Java 寮婧愬叏鏂囨绱㈠伐鍏峰寘銆?/p>

鐩墠宸茬粡鏈夊緢澶氬簲鐢ㄧ▼搴忕殑鎼滅儲鍔熻兘鏄熀浜?Lucene 鐨勶紝姣斿 Eclipse 鐨勫府鍔╃郴緇熺殑鎼滅儲鍔熻兘銆侺ucene 鑳藉涓烘枃鏈被鍨嬬殑鏁版嵁寤虹珛绱㈠紩錛屾墍浠ヤ綘鍙鑳芥妸浣犺绱㈠紩鐨勬暟鎹牸寮忚漿鍖栫殑鏂囨湰鐨勶紝Lucene 灝辮兘瀵逛綘鐨勬枃妗h繘琛岀儲寮曞拰鎼滅儲銆傛瘮濡備綘瑕佸涓浜?HTML 鏂囨。錛孭DF 鏂囨。榪涜绱㈠紩鐨勮瘽浣犲氨棣栧厛闇瑕佹妸 HTML 鏂囨。鍜?PDF 鏂囨。杞寲鎴愭枃鏈牸寮忕殑錛岀劧鍚庡皢杞寲鍚庣殑鍐呭浜ょ粰 Lucene 榪涜绱㈠紩錛岀劧鍚庢妸鍒涘緩濂界殑绱㈠紩鏂囦歡淇濆瓨鍒扮鐩樻垨鑰呭唴瀛樹腑錛屾渶鍚庢牴鎹敤鎴瘋緭鍏ョ殑鏌ヨ鏉′歡鍦ㄧ儲寮曟枃浠朵笂榪涜鏌ヨ銆備笉鎸囧畾瑕佺儲寮曠殑鏂囨。鐨勬牸寮忎篃浣?Lucene 鑳藉鍑犱箮閫傜敤浜庢墍鏈夌殑鎼滅儲搴旂敤紼嬪簭銆?/p>

鍥?1 琛ㄧず浜嗘悳绱㈠簲鐢ㄧ▼搴忓拰 Lucene 涔嬮棿鐨勫叧緋伙紝涔熷弽鏄犱簡鍒╃敤 Lucene 鏋勫緩鎼滅儲搴旂敤紼嬪簭鐨勬祦紼嬶細


鍥?. 鎼滅儲搴旂敤紼嬪簭鍜?Lucene 涔嬮棿鐨勫叧緋?/b>
鍥?. 鎼滅儲搴旂敤紼嬪簭鍜?Lucene 涔嬮棿鐨勫叧緋? src=



绱㈠紩鍜屾悳绱?/span>

绱㈠紩鏄幇浠f悳绱㈠紩鎿庣殑鏍稿績錛屽緩绔嬬儲寮曠殑榪囩▼灝辨槸鎶婃簮鏁版嵁澶勭悊鎴愰潪甯告柟渚挎煡璇㈢殑绱㈠紩鏂囦歡鐨勮繃紼嬨備負浠涔堢儲寮曡繖涔堥噸瑕佸憿錛岃瘯鎯充綘鐜板湪瑕佸湪澶ч噺鐨勬枃妗d腑鎼滅儲鍚湁鏌愪釜鍏抽敭璇嶇殑鏂囨。錛岄偅涔堝鏋滀笉寤虹珛绱㈠紩鐨勮瘽浣犲氨闇瑕佹妸榪欎簺鏂囨。欏哄簭鐨勮鍏ュ唴瀛橈紝鐒跺悗媯鏌ヨ繖涓枃绔犱腑鏄笉鏄惈鏈夎鏌ユ壘鐨勫叧閿瘝錛岃繖鏍風殑璇濆氨浼氳楄垂闈炲父澶氱殑鏃墮棿錛屾兂鎯蟲悳绱㈠紩鎿庡彲鏄湪姣綰х殑鏃墮棿鍐呮煡鎵懼嚭瑕佹悳绱㈢殑緇撴灉鐨勩傝繖灝辨槸鐢變簬寤虹珛浜嗙儲寮曠殑鍘熷洜錛屼綘鍙互鎶婄儲寮曟兂璞℃垚榪欐牱涓縐嶆暟鎹粨鏋勶紝浠栬兘澶熶嬌浣犲揩閫熺殑闅忔満璁塊棶瀛樺偍鍦ㄧ儲寮曚腑鐨勫叧閿瘝錛岃繘鑰屾壘鍒拌鍏抽敭璇嶆墍鍏寵仈鐨勬枃妗c侺ucene 閲囩敤鐨勬槸涓縐嶇О涓哄弽鍚戠儲寮曪紙inverted index錛夌殑鏈哄埗銆傚弽鍚戠儲寮曞氨鏄鎴戜滑緇存姢浜嗕竴涓瘝/鐭琛紝瀵逛簬榪欎釜琛ㄤ腑鐨勬瘡涓瘝/鐭錛岄兘鏈変竴涓摼琛ㄦ弿榪頒簡鏈夊摢浜涙枃妗e寘鍚簡榪欎釜璇?鐭銆傝繖鏍峰湪鐢ㄦ埛杈撳叆鏌ヨ鏉′歡鐨勬椂鍊欙紝灝辮兘闈炲父蹇殑寰楀埌鎼滅儲緇撴灉銆傛垜浠皢鍦ㄦ湰緋誨垪鏂囩珷鐨勭浜岄儴鍒嗚緇嗕粙緇?Lucene 鐨勭儲寮曟満鍒訛紝鐢變簬 Lucene 鎻愪緵浜嗙畝鍗曟槗鐢ㄧ殑 API錛屾墍浠ュ嵆浣胯鑰呭垰寮濮嬪鍏ㄦ枃鏈繘琛岀儲寮曠殑鏈哄埗騫朵笉澶簡瑙o紝涔熷彲浠ラ潪甯稿鏄撶殑浣跨敤 Lucene 瀵逛綘鐨勬枃妗e疄鐜扮儲寮曘?/p>

瀵規枃妗e緩绔嬪ソ绱㈠紩鍚庯紝灝卞彲浠ュ湪榪欎簺绱㈠紩涓婇潰榪涜鎼滅儲浜嗐傛悳绱㈠紩鎿庨鍏堜細瀵規悳绱㈢殑鍏抽敭璇嶈繘琛岃В鏋愶紝鐒跺悗鍐嶅湪寤虹珛濂界殑绱㈠紩涓婇潰榪涜鏌ユ壘錛屾渶緇堣繑鍥炲拰鐢ㄦ埛杈撳叆鐨勫叧閿瘝鐩稿叧鑱旂殑鏂囨。銆?/p>

Lucene 杞歡鍖呭垎鏋?/span>

Lucene 杞歡鍖呯殑鍙戝竷褰㈠紡鏄竴涓?JAR 鏂囦歡錛屼笅闈㈡垜浠垎鏋愪竴涓嬭繖涓?JAR 鏂囦歡閲岄潰鐨勪富瑕佺殑 JAVA 鍖咃紝浣胯鑰呭涔嬫湁涓垵姝ョ殑浜嗚В銆?/p>

Package: org.apache.lucene.document

榪欎釜鍖呮彁渚涗簡涓浜涗負灝佽瑕佺儲寮曠殑鏂囨。鎵闇瑕佺殑綾伙紝姣斿 Document, Field銆傝繖鏍鳳紝姣忎竴涓枃妗f渶緇堣灝佽鎴愪簡涓涓?Document 瀵硅薄銆?/p>

Package: org.apache.lucene.analysis

榪欎釜鍖呬富瑕佸姛鑳芥槸瀵規枃妗h繘琛屽垎璇嶏紝鍥犱負鏂囨。鍦ㄥ緩绔嬬儲寮曚箣鍓嶅繀欏昏榪涜鍒嗚瘝錛屾墍浠ヨ繖涓寘鐨勪綔鐢ㄥ彲浠ョ湅鎴愭槸涓哄緩绔嬬儲寮曞仛鍑嗗宸ヤ綔銆?/p>

Package: org.apache.lucene.index

榪欎釜鍖呮彁渚涗簡涓浜涚被鏉ュ崗鍔╁垱寤虹儲寮曚互鍙婂鍒涘緩濂界殑绱㈠紩榪涜鏇存柊銆傝繖閲岄潰鏈変袱涓熀紜鐨勭被錛欼ndexWriter 鍜?IndexReader錛屽叾涓?IndexWriter 鏄敤鏉ュ垱寤虹儲寮曞茍娣誨姞鏂囨。鍒扮儲寮曚腑鐨勶紝IndexReader 鏄敤鏉ュ垹闄ょ儲寮曚腑鐨勬枃妗g殑銆?/p>

Package: org.apache.lucene.search

榪欎釜鍖呮彁渚涗簡瀵瑰湪寤虹珛濂界殑绱㈠紩涓婅繘琛屾悳绱㈡墍闇瑕佺殑綾匯傛瘮濡?IndexSearcher 鍜?Hits, IndexSearcher 瀹氫箟浜嗗湪鎸囧畾鐨勭儲寮曚笂榪涜鎼滅儲鐨勬柟娉曪紝Hits 鐢ㄦ潵淇濆瓨鎼滅儲寰楀埌鐨勭粨鏋溿?/p>

涓涓畝鍗曠殑鎼滅儲搴旂敤紼嬪簭

鍋囪鎴戜滑鐨勭數鑴戠殑鐩綍涓惈鏈夊緢澶氭枃鏈枃妗o紝鎴戜滑闇瑕佹煡鎵懼摢浜涙枃妗e惈鏈夋煇涓叧閿瘝銆備負浜嗗疄鐜拌繖縐嶅姛鑳斤紝鎴戜滑棣栧厛鍒╃敤 Lucene 瀵硅繖涓洰褰曚腑鐨勬枃妗e緩绔嬬儲寮曪紝鐒跺悗鍦ㄥ緩绔嬪ソ鐨勭儲寮曚腑鎼滅儲鎴戜滑鎵瑕佹煡鎵劇殑鏂囨。銆傞氳繃榪欎釜渚嬪瓙璇昏呬細瀵瑰浣曞埄鐢?Lucene 鏋勫緩鑷繁鐨勬悳绱㈠簲鐢ㄧ▼搴忔湁涓瘮杈冩竻妤氱殑璁よ瘑銆?/p>

寤虹珛绱㈠紩

涓轟簡瀵規枃妗h繘琛岀儲寮曪紝Lucene 鎻愪緵浜嗕簲涓熀紜鐨勭被錛屼粬浠垎鍒槸 Document, Field, IndexWriter, Analyzer, Directory銆備笅闈㈡垜浠垎鍒粙緇嶄竴涓嬭繖浜斾釜綾葷殑鐢ㄩ旓細

Document

Document 鏄敤鏉ユ弿榪版枃妗g殑錛岃繖閲岀殑鏂囨。鍙互鎸囦竴涓?HTML 欏甸潰錛屼竴灝佺數瀛愰偖浠訛紝鎴栬呮槸涓涓枃鏈枃浠躲備竴涓?Document 瀵硅薄鐢卞涓?Field 瀵硅薄緇勬垚鐨勩傚彲浠ユ妸涓涓?Document 瀵硅薄鎯寵薄鎴愭暟鎹簱涓殑涓涓褰曪紝鑰屾瘡涓?Field 瀵硅薄灝辨槸璁板綍鐨勪竴涓瓧孌點?/p>

Field

Field 瀵硅薄鏄敤鏉ユ弿榪頒竴涓枃妗g殑鏌愪釜灞炴х殑錛屾瘮濡備竴灝佺數瀛愰偖浠剁殑鏍囬鍜屽唴瀹瑰彲浠ョ敤涓や釜 Field 瀵硅薄鍒嗗埆鎻忚堪銆?/p>

Analyzer

鍦ㄤ竴涓枃妗h绱㈠紩涔嬪墠錛岄鍏堥渶瑕佸鏂囨。鍐呭榪涜鍒嗚瘝澶勭悊錛岃繖閮ㄥ垎宸ヤ綔灝辨槸鐢?Analyzer 鏉ュ仛鐨勩侫nalyzer 綾繪槸涓涓娊璞$被錛屽畠鏈夊涓疄鐜般傞拡瀵逛笉鍚岀殑璇█鍜屽簲鐢ㄩ渶瑕侀夋嫨閫傚悎鐨?Analyzer銆侫nalyzer 鎶婂垎璇嶅悗鐨勫唴瀹逛氦緇?IndexWriter 鏉ュ緩绔嬬儲寮曘?/p>

IndexWriter

IndexWriter 鏄?Lucene 鐢ㄦ潵鍒涘緩绱㈠紩鐨勪竴涓牳蹇冪殑綾伙紝浠栫殑浣滅敤鏄妸涓涓釜鐨?Document 瀵硅薄鍔犲埌绱㈠紩涓潵銆?/p>

Directory

榪欎釜綾諱唬琛ㄤ簡 Lucene 鐨勭儲寮曠殑瀛樺偍鐨勪綅緗紝榪欐槸涓涓娊璞$被錛屽畠鐩墠鏈変袱涓疄鐜幫紝絎竴涓槸 FSDirectory錛屽畠琛ㄧず涓涓瓨鍌ㄥ湪鏂囦歡緋葷粺涓殑绱㈠紩鐨勪綅緗傜浜屼釜鏄?RAMDirectory錛屽畠琛ㄧず涓涓瓨鍌ㄥ湪鍐呭瓨褰撲腑鐨勭儲寮曠殑浣嶇疆銆?/p>

鐔熸倝浜嗗緩绔嬬儲寮曟墍闇瑕佺殑榪欎簺綾誨悗錛屾垜浠氨寮濮嬪鏌愪釜鐩綍涓嬮潰鐨勬枃鏈枃浠跺緩绔嬬儲寮曚簡錛屾竻鍗?緇欏嚭浜嗗鏌愪釜鐩綍涓嬬殑鏂囨湰鏂囦歡寤虹珛绱㈠紩鐨勬簮浠g爜銆?/p>
娓呭崟 1. 瀵規枃鏈枃浠跺緩绔嬬儲寮?/b>
package TestLucene;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
import java.util.Date;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
/**
 * This class demonstrate the process of creating index with Lucene 
 * for text files
 */
public class TxtFileIndexer {
	public static void main(String[] args) throws Exception{
		//indexDir is the directory that hosts Lucene's index files
        File   indexDir = new File("D:\\luceneIndex");
        //dataDir is the directory that hosts the text files that to be indexed
        File   dataDir  = new File("D:\\luceneData");
        Analyzer luceneAnalyzer = new StandardAnalyzer();
        File[] dataFiles  = dataDir.listFiles();
        IndexWriter indexWriter = new IndexWriter(indexDir,luceneAnalyzer,true);
        long startTime = new Date().getTime();
        for(int i = 0; i < dataFiles.length; i++){
        	if(dataFiles[i].isFile() && dataFiles[i].getName().endsWith(".txt")){
        		System.out.println("Indexing file " + dataFiles[i].getCanonicalPath());
        		Document document = new Document();
        		Reader txtReader = new FileReader(dataFiles[i]);
        		document.add(Field.Text("path",dataFiles[i].getCanonicalPath()));
        		document.add(Field.Text("contents",txtReader));
        		indexWriter.addDocument(document);
        	}
        }
        indexWriter.optimize();
        indexWriter.close();
        long endTime = new Date().getTime();
        
        System.out.println("It takes " + (endTime - startTime) 
                           + " milliseconds to create index for the files in directory "
        		           + dataDir.getPath());        
	}
}

鍦ㄦ竻鍗?涓紝鎴戜滑娉ㄦ剰鍒扮被 IndexWriter 鐨勬瀯閫犲嚱鏁伴渶瑕佷笁涓弬鏁幫紝絎竴涓弬鏁版寚瀹氫簡鎵鍒涘緩鐨勭儲寮曡瀛樻斁鐨勪綅緗紝浠栧彲浠ユ槸涓涓?File 瀵硅薄錛屼篃鍙互鏄竴涓?FSDirectory 瀵硅薄鎴栬?RAMDirectory 瀵硅薄銆傜浜屼釜鍙傛暟鎸囧畾浜?Analyzer 綾葷殑涓涓疄鐜幫紝涔熷氨鏄寚瀹氳繖涓儲寮曟槸鐢ㄥ摢涓垎璇嶅櫒瀵規枃鎸″唴瀹硅繘琛屽垎璇嶃傜涓変釜鍙傛暟鏄竴涓竷灝斿瀷鐨勫彉閲忥紝濡傛灉涓?true 鐨勮瘽灝變唬琛ㄥ垱寤轟竴涓柊鐨勭儲寮曪紝涓?false 鐨勮瘽灝變唬琛ㄥ湪鍘熸潵绱㈠紩鐨勫熀紜涓婅繘琛屾搷浣溿傛帴鐫紼嬪簭閬嶅巻浜嗙洰褰曚笅闈㈢殑鎵鏈夋枃鏈枃妗o紝騫朵負姣忎竴涓枃鏈枃妗e垱寤轟簡涓涓?Document 瀵硅薄銆傜劧鍚庢妸鏂囨湰鏂囨。鐨勪袱涓睘鎬э細璺緞鍜屽唴瀹瑰姞鍏ュ埌浜嗕袱涓?Field 瀵硅薄涓紝鎺ョ潃鍦ㄦ妸榪欎袱涓?Field 瀵硅薄鍔犲叆鍒?Document 瀵硅薄涓紝鏈鍚庢妸榪欎釜鏂囨。鐢?IndexWriter 綾葷殑 add 鏂規硶鍔犲叆鍒扮儲寮曚腑鍘匯傝繖鏍鋒垜浠究瀹屾垚浜嗙儲寮曠殑鍒涘緩銆傛帴涓嬫潵鎴戜滑榪涘叆鍦ㄥ緩绔嬪ソ鐨勭儲寮曚笂榪涜鎼滅儲鐨勯儴鍒嗐?/p>


鎼滅儲鏂囨。

鍒╃敤Lucene榪涜鎼滅儲灝卞儚寤虹珛绱㈠紩涓鏍蜂篃鏄潪甯告柟渚跨殑銆傚湪涓婇潰涓閮ㄥ垎涓紝鎴戜滑宸茬粡涓轟竴涓洰褰曚笅鐨勬枃鏈枃妗e緩绔嬪ソ浜嗙儲寮曪紝鐜板湪鎴戜滑灝辮鍦ㄨ繖涓儲寮曚笂榪涜鎼滅儲浠ユ壘鍒板寘鍚煇涓叧閿瘝鎴栫煭璇殑鏂囨。銆侺ucene鎻愪緵浜嗗嚑涓熀紜鐨勭被鏉ュ畬鎴愯繖涓繃紼嬶紝瀹冧滑鍒嗗埆鏄憿IndexSearcher, Term, Query, TermQuery, Hits. 涓嬮潰鎴戜滑鍒嗗埆浠嬬粛榪欏嚑涓被鐨勫姛鑳姐?/p>

Query

榪欐槸涓涓娊璞$被錛屼粬鏈夊涓疄鐜幫紝姣斿TermQuery, BooleanQuery, PrefixQuery. 榪欎釜綾葷殑鐩殑鏄妸鐢ㄦ埛杈撳叆鐨勬煡璇㈠瓧絎︿覆灝佽鎴怢ucene鑳藉璇嗗埆鐨凲uery銆?/p>

Term

Term鏄悳绱㈢殑鍩烘湰鍗曚綅錛屼竴涓猅erm瀵硅薄鏈変袱涓猄tring綾誨瀷鐨勫煙緇勬垚銆傜敓鎴愪竴涓猅erm瀵硅薄鍙互鏈夊涓嬩竴鏉¤鍙ユ潵瀹屾垚錛歍erm term = new Term(鈥渇ieldName鈥?鈥漲ueryWord鈥?; 鍏朵腑絎竴涓弬鏁頒唬琛ㄤ簡瑕佸湪鏂囨。鐨勫摢涓涓狥ield涓婅繘琛屾煡鎵撅紝絎簩涓弬鏁頒唬琛ㄤ簡瑕佹煡璇㈢殑鍏抽敭璇嶃?/p>

TermQuery

TermQuery鏄娊璞$被Query鐨勪竴涓瓙綾伙紝瀹冨悓鏃朵篃鏄疞ucene鏀寔鐨勬渶涓哄熀鏈殑涓涓煡璇㈢被銆傜敓鎴愪竴涓猅ermQuery瀵硅薄鐢卞涓嬭鍙ュ畬鎴愶細 TermQuery termQuery = new TermQuery(new Term(鈥渇ieldName鈥?鈥漲ueryWord鈥?); 瀹冪殑鏋勯犲嚱鏁板彧鎺ュ彈涓涓弬鏁幫紝閭e氨鏄竴涓猅erm瀵硅薄銆?/p>

IndexSearcher

IndexSearcher鏄敤鏉ュ湪寤虹珛濂界殑绱㈠紩涓婅繘琛屾悳绱㈢殑銆傚畠鍙兘浠ュ彧璇葷殑鏂瑰紡鎵撳紑涓涓儲寮曪紝鎵浠ュ彲浠ユ湁澶氫釜IndexSearcher鐨勫疄渚嬪湪涓涓儲寮曚笂榪涜鎿嶄綔銆?/p>

Hits

Hits鏄敤鏉ヤ繚瀛樻悳绱㈢殑緇撴灉鐨勩?/p>

浠嬬粛瀹岃繖浜涙悳绱㈡墍蹇呴』鐨勭被涔嬪悗錛屾垜浠氨寮濮嬪湪涔嬪墠鎵寤虹珛鐨勭儲寮曚笂榪涜鎼滅儲浜嗭紝娓呭崟2緇欏嚭浜嗗畬鎴愭悳绱㈠姛鑳芥墍闇瑕佺殑浠g爜銆?/p>
娓呭崟2 錛氬湪寤虹珛濂界殑绱㈠紩涓婅繘琛屾悳绱?/b>
package TestLucene;
import java.io.File;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.store.FSDirectory;
/**
 * This class is used to demonstrate the 
 * process of searching on an existing 
 * Lucene index
 *
 */
public class TxtFileSearcher {
	public static void main(String[] args) throws Exception{
	    String queryStr = "lucene";
	    //This is the directory that hosts the Lucene index
        File indexDir = new File("D:\\luceneIndex");
        FSDirectory directory = FSDirectory.getDirectory(indexDir,false);
        IndexSearcher searcher = new IndexSearcher(directory);
        if(!indexDir.exists()){
        	System.out.println("The Lucene index is not exist");
        	return;
        }
        Term term = new Term("contents",queryStr.toLowerCase());
        TermQuery luceneQuery = new TermQuery(term);
        Hits hits = searcher.search(luceneQuery);
        for(int i = 0; i < hits.length(); i++){
        	Document document = hits.doc(i);
        	System.out.println("File: " + document.get("path"));
        }
	}
}

鍦ㄦ竻鍗?涓紝綾籌ndexSearcher鐨勬瀯閫犲嚱鏁版帴鍙椾竴涓被鍨嬩負Directory鐨勫璞★紝Directory鏄竴涓娊璞$被錛屽畠鐩墠鏈変袱涓瓙綾伙細FSDirctory鍜孯AMDirectory. 鎴戜滑鐨勭▼搴忎腑浼犲叆浜嗕竴涓狥SDirctory瀵硅薄浣滀負鍏跺弬鏁幫紝浠h〃浜嗕竴涓瓨鍌ㄥ湪紓佺洏涓婄殑绱㈠紩鐨勪綅緗傛瀯閫犲嚱鏁版墽琛屽畬鎴愬悗錛屼唬琛ㄤ簡榪欎釜IndexSearcher浠ュ彧璇葷殑鏂瑰紡鎵撳紑浜嗕竴涓儲寮曘傜劧鍚庢垜浠▼搴忔瀯閫犱簡涓涓猅erm瀵硅薄錛岄氳繃榪欎釜Term瀵硅薄錛屾垜浠寚瀹氫簡瑕佸湪鏂囨。鐨勫唴瀹逛腑鎼滅儲鍖呭惈鍏抽敭璇嶁漧ucene鈥濈殑鏂囨。銆傛帴鐫鍒╃敤榪欎釜Term瀵硅薄鏋勯犲嚭TermQuery瀵硅薄騫舵妸榪欎釜TermQuery瀵硅薄浼犲叆鍒癐ndexSearcher鐨剆earch鏂規硶涓繘琛屾煡璇紝榪斿洖鐨勭粨鏋滀繚瀛樺湪Hits瀵硅薄涓傛渶鍚庢垜浠敤浜嗕竴涓驚鐜鍙ユ妸鎼滅儲鍒扮殑鏂囨。鐨勮礬寰勯兘鎵撳嵃浜嗗嚭鏉ャ傚ソ浜嗭紝鎴戜滑鐨勬悳绱㈠簲鐢ㄧ▼搴忓凡緇忓紑鍙戝畬姣曪紝鎬庝箞鏍鳳紝鍒╃敤Lucene寮鍙戞悳绱㈠簲鐢ㄧ▼搴忔槸涓嶆槸寰堢畝鍗曘?br />

鎬葷粨

鏈枃棣栧厛浠嬬粛浜?Lucene 鐨勪竴浜涘熀鏈蹇碉紝鐒跺悗寮鍙戜簡涓涓簲鐢ㄧ▼搴忔紨紺轟簡鍒╃敤 Lucene 寤虹珛绱㈠紩騫跺湪璇ョ儲寮曚笂榪涜鎼滅儲鐨勮繃紼嬨傚笇鏈涙湰鏂囪兘澶熶負瀛︿範 Lucene 鐨勮鑰呮彁渚涘府鍔┿?/p>

姊撴灚 2008-09-17 12:10 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 亚洲精品无码成人片在线观看 | 巨胸狂喷奶水视频www网站免费| 免费的涩涩视频在线播放| 亚洲成a人片在线观| 久久99热精品免费观看动漫| 国产成人亚洲综合色影视| 免费看成人AA片无码视频吃奶| 国产精品亚洲二区在线观看 | 中文在线免费观看| 亚洲国产精品无码久久久蜜芽 | 亚洲AV无码一区二区三区DV| GOGOGO高清免费看韩国| 亚洲色成人网站WWW永久| 日本视频在线观看永久免费| 亚洲一区影音先锋色资源| 中文字幕成人免费视频| 亚洲国产中文在线二区三区免| 国产va免费精品观看精品| 亚洲国产成人久久精品大牛影视| 国产老女人精品免费视频| 一级女性全黄久久生活片免费| 亚洲?v女人的天堂在线观看| 久久九九免费高清视频| 亚洲天天在线日亚洲洲精| 久久天天躁狠狠躁夜夜免费观看| 亚洲依依成人亚洲社区| 亚洲精品岛国片在线观看| 国产无遮挡无码视频免费软件| 久久精品国产亚洲av高清漫画 | 亚洲国产成人精品91久久久| 最近免费中文字幕中文高清| 亚洲色偷偷偷网站色偷一区| 日日夜夜精品免费视频| 国产精品小视频免费无限app| 亚洲一区二区影院| 免费人成无码大片在线观看| 久久国产精品成人免费| 亚洲熟女精品中文字幕| 国产AⅤ无码专区亚洲AV| aⅴ免费在线观看| 免费播放国产性色生活片|