在电驴网络(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显示