在電驢網路(eDonkey 2000 Network,簡稱eD2k)上,所有用戶共享的資源信息,包括文件名,文件Hash值等都被索引到eD2k伺服器上,用戶可以在eD2k伺服器上查找自己需要的資源,我們通常稱為eD2k搜索。在eMule(電騾)等客戶端中搜索方式選擇「全局(伺服器)」或「伺服器」,這兩種方法都是在進行eD2k搜索。
但是有很多時候,我們會發現搜索中文所命名的資源的時候結果往往很少,這和搜索的原理有關。中文的組成方式不像英文等字母語言那樣,是用空格隔開的一個個單詞,所以例如那些我們熟知的網頁搜索引擎在索引中文網頁時,都需要對內容進行分詞處理,中文分詞技術屬於自然語言處理技術範疇,也是一個非常複雜的研究領域,這已經不是目前常用的eD2k伺服器端軟體所能處理的。
電驢伺服器搜索原理
現在我們來看目前最常用的電驢伺服器(eDonkey server)端軟體lugdunum eServer處理eD2k搜索的原理,由於電驢官方伺服器端dServer年代久遠,並且已經沒有再被使用所以不再討論。
eServer在處理搜索的時候有兩種形式:關鍵詞搜索和字元串搜索。
- 關鍵詞搜索(keyword search):即在文件名中尋找包含了此單詞的文件,比如一個單詞,「emule」,將會查找所有包含用分隔符所分割出來的獨立單詞「emule」的文件。
- 字元串搜索(substring search):準確說是子字元串匹配,將會對文件名進行掃描,找出所有文件名中包含了所給字元串的文件,而不在乎是否是一個獨立的單詞,後面將說明。
現在我們來看eServer處理搜索時候所規定的特殊符號:
- 分隔符:
空格 . < > { } [ ] - _
等一些特殊字元,他們都被電驢伺服器當作關鍵詞的分隔符進行處理,但是也有例外情況比如版本號,像”1.2.3“,將會被視為一個完整的關鍵詞。此外如果你需要強制搜索這些特殊字元則必須使用半形雙引號””來進行轉義。 - 起始符(開始符):
^
起始符表示文件名稱的開始,比如搜索「^emule」,我們會得到所有以「emule」為文件名開頭的文件,例如「emule0.50a.zip」,而不會得到「[soft]emule0.50a.zip」這樣的文件。 - 通配符(萬用字元):
*
通配符用來代替任意個字元,可以是0個,1個或者多個,進行模糊的查找。值得說明的是電驢伺服器不會在意*號的位置是在開頭還是結尾,如果使用「*emule」或「emule*」來搜索,電驢伺服器將會進行字元串搜索,將會掃描所有文件名中包含「emule」部分的文件,例如「kemule.zip」,「emulek.zip」等。
搜索中文命名文件
所以我們知道了,如果我們搜索「阿凡提」,那麼我們只能搜索到那些文件名中使用了分隔符把「阿凡提」三個字分割成一個關鍵詞的文件,比如:「[阿凡提.偷東西的驢].XviD.avi」這樣的文件,我們無法找到文件名包含了諸如「聰明的阿凡提」或是「阿凡提的故事」這樣的文件。這就是為什麼很多人認為eD2k搜索中文不好用的原因。
找到原因了解決辦法就很簡單,
- 一種方法是多用幾種常見的名稱叫法來搜索,比如分別使用「阿凡提」,「聰明的阿凡提」,「阿凡提的故事」來搜索三次。
- 二是可以讓電驢伺服器來進行一次字元串搜索,我們可以加上通配符,比如搜索「*阿凡提」,這時候,eServer就會開始逐個尋找那些文件名里包含了「阿凡提」三個字的文件,好了,現在看看這次是不是搜索結果變多了!
此方法適合於所有使用了非單片語成的語言,中文,日文等命名的文件。
最後特別需要提醒的是進行字元串搜索會極大消耗電驢伺服器的資源,而且會比進行關鍵詞搜索慢很多,而且電驢伺服器會在未完成搜索達到一定閾值的時候取消這次搜索,所以在可能的情況下,請盡量使用關鍵詞搜索方式,而不要使用通配符,對於資源發布者來說,請盡量在文件命名時候使用分隔符突出資源名稱的關鍵詞,這樣也能夠方便大家。
本文參考了
lugdunummaster在eMule官方論壇討論主題Light On Searching中的回帖。
台灣網友badcat在eMule EastShare官方論壇的主題帖[教學]eMule 的萬用字元搜尋 「*」方便多國語系搜尋 (2007-11-08 修)。
原文在:善用特殊符號搜索電驢網路中文資源
文章與圖片版權遵循署名-非商業性使用-相同方式共享 3.0協議 BY-NC-SA,轉載請署名作者和來源。
35條評論隱藏
如果使用通配符搜索KAD網路就存在消耗資源的問題吧~
@kevinszu
不存在,打錯了~
不知道是我的方法有問題還是怎麼回事,每次搜索,搜索KAD網路就能搜到不少相關的資源,若搜索方式選擇「全局(伺服器)」或「伺服器」,使用相同的關鍵字,搜到的資源卻少得可憐,甚至有時候啥都搜不到。不解。求解。
呵呵,還不錯,學習了,以前只會and not什麼的.
@iijjee
深有同感,麻煩高手指教一二。謝謝鳥。
@iijjee 如果網路長時間沒響應,就會這樣。伺服器畢竟都在國外,中間還有很多干擾。
加入通配符*搜索,確實有效!!!
感謝!!!
o,,又學了一招,多謝分享。,不知有沒有完整的搜索語法教學?
原來如此~ emule 也對中文支持不夠完善
o(︶︿︶)o唉
@進駐 你這就是沒好好看文章就評論的,這和emule有什麼關係,這是ed2k伺服器的問題。 😯
受教了!很棒
「關鍵字*」的搜索方法是不是不適用KAD?我在KAD網路使用這個方法搜索不到資源。
這篇文章在vc倒了之後對我這樣的菜鳥尤其有用,謝謝emulefans的同志們
我建了個電騾群,有興趣的朋友,大家可以一起來探討下
@fiveblue 這裡很多人都不用QQ,而且你這樣會被懷疑釣魚,所以不要再發了,否則只好當廣告處理!謝謝! 😯
兄弟們,你們用什麼版本emule? 難道是veryCD的?用其它的老連不上網!
@刻銘 標題已經說明了,這是電驢網路的搜索技巧,而不是kad網路,並且針對eserver伺服器。電驢網路(ed2k),kad網路這是兩個不同的東西。
如果你在kad搜索使用*號,那它就搜索*號,這樣說應該明白吧。
@fencer911 先看看更新伺服器列表,kad節點文件。如果是內網用戶,如果使用路由器,則需要做好埠映射或開啟Upnp或開啟DMZ;如果自己無權管理或使用長城寬頻等不開放外部埠的ISP之類的,或者故意希望在lowid情況下使用,需要在”選項””伺服器”里禁用”智能lowid檢測”。
@fencer911 xtreme的
https://www.emulefans.com/emule-0-50a-xtreme-8-0-final/
下 eMule v0.50a Xtreme 8.0 正式版 打包 試試
@uralhan 我是內網用戶,做了埠映射,獲得highid,但沒有開啟”智能lowid檢測”,會對emule使用產生什麼影響嗎?
@請你不要發QQ群鏈接 很抱歉,不會再發了!那這裡的朋友都用什麼呀?
@fiveblue irc
@fiveblue gtalk
@uralhan 那麼在kad中搜索資源是否也是像伺服器搜索一樣,搜索「傑克遜」就只能搜索出這三個字開頭和結尾有特殊符號分隔的資源?
另外,KAD有什麼搜索技巧嗎?
我個人還是覺得應該搜索英文,搜索國外的資源速度會更快,而且標準的電驢文件名在一開始都約定俗成的有原始英文名,很多時候用不上中文搜索。
@jjdiiaksd 不敢苟同呀。有時候下幾百m都要相當長時間呀。畢竟出口帶寬有限,而且估計不同isp的轉換對p2p來說也是不太好辦的。
受教了,今天才知道emule搜索是要用通配符的
對於搜索中日文資源,還是通配符有用
第一次看到,從來沒有過……
@sometimes
============================
提供的網頁打不開。
感覺像正則表達式搜索,不過我沒試過,回去試試。
學習中。謝謝。
學習咯。謝謝
看了幾遍,挺有幫助的,但還是對KAD搜索不是很了解
用了十幾年,今天才知道*這麼好用 太感謝了
13條Trackback/Pingback顯示