在电驴网络(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 [1]中的回帖。
台湾网友badcat在eMule EastShare官方论坛的主题帖[教學]eMule 的萬用字元搜尋 「*」方便多國語系搜尋 (2007-11-08 修) [2]。
原文在:善用特殊符号搜索电驴网络中文资源 [3]
文章与图片版权遵循署名-非商业性使用-相同方式共享 3.0协议 BY-NC-SA [4],转载请署名作者和来源。