搜索引擎
一些关于搜索引擎的技术文档
Xapian的检索
8月8日
Xapian中有关查询的代码比索引复杂的多,因为它支持多种查询机制,而索引就只是循环叠加。如下面的多种查询机制:
- 概率性搜索排名
- 相关度反馈
- 词组和邻近搜索
- 全方位的布尔型搜索器
- 支持提取搜索关键字的词干
- 支持通配符查询
- 支持别名查询
- Xapian支持拼写纠正
xapian索引的term处理
7月31日
Xapian 是一个用C++编写的全文检索程序,License是GPL,它的作用类似于Java的lucene。Xapian 的 官方网站是http://xapian.org/,采用trac作为项目管理软件。如果想要了解更多则可以查看xapian的文档。Xapian的索引不支持中文切词,不管是单字切词还是多元切词,中文是同英文一样的处理方式。下面就来分析Xapian怎样索引英文文档。
小心:谷歌 gmail 邮件过滤器
7月9日
如果您和我一样,认为 Gmail 的邮件过滤器的用法和 Thunderbird 或者 Foxmail 或者 Outlook 的用法一样,那么您很有可能会中招,会遇到和我一样的尴尬。
今天一个客户给我打电话,问我对于他昨天邮件中提到的咨询问题是如何看的?天啊,我昨天没有收到他的邮件啊?
还好,借着 Gmail 强大的搜索功能,我很快找到了该客户的邮件,原来是被我自己设置的邮件过滤规则给过滤了:
- 该邮件的标题是:“Re: MoinMoin 和 redmine”
- 该邮件被过滤到 “项目列表-MoinMoin”的标签下
我建立的相应的过滤规则是:
- 如果邮件标题包含 “[MoinMoin]” (注意过滤条件中的方括号)
- 则添加标签 “项目列表-MoinMoin”,且不投递到收件箱
- 还要注意不要对此类邮件进行垃圾邮件判断,即不要误入垃圾箱
疑问出来了:
- 明明过滤规则中,要求标题中需要出现特定格式的字符,其中包括方括号字符
- 但是对应于邮件标题中没有出现方括号,应该不会匹配过滤规则,为什么也被过滤了
经过对 Gmail 邮箱的过滤规则的测试(在新建过滤规则中进行测试),终于明白了:
- 停用词:一些特殊符号作为停用词,不纳入到搜索条件中
像上面提到的方括号可能就属于停用词之类 - 空格分隔的关键词需要同时出现,相当于在关键词前使用了”+”号
- 如果要排除某个关键词,在关键词前添加“-”(减号)
- 使用引号,要求精确匹配某个字串。字串中的加号和减号当做一般文本处理
- 例如:邮件过滤规则 cron “make -C” -gistore 的含义是:
- 必须在搜索的字段中同时出现单词 cron 和字符串 “make -C“(去掉引号),
- 并且在搜索的字段中不能出现单词 gistore 。
- 例如:邮件过滤规则 “Cron Daemon” ossxp.com OR ossxp.net 出现在发件人中含义是:
- 发件人字段必须包含 “Cron Daemon” 字符串(引号除外)
- 同时发件人字段还必须包含 ossxp.com 或者 ossxp.net
即:
- 一般的邮件客户端软件(thunderbird,foxmail等),过滤规则使用的字符串查找算法,可能就是一个 substr 函数
- 而 Gmail 涉及到分词和全文检索。过滤规则使用的也是 google 搜索引擎用到的搜索语法。
我要马上重新设计我的Gmail帐号的过滤规则,避免遗漏重要邮件。
改变 Nutch 对 robots.txt 的解析实现
6月3日
昨天晚上,改进后的 Nutch 终于在公司内网环境中部署了,爬了一个晚上,今天早晨发现服务器CPU占用 100%,Nutch 爬虫仍在抓取 Redmine 管理平台下各个项目的版本库相关页面。我的天,一定是 robots.txt 缺乏相应配置造成的。
robots.txt 的配置如下:
User-agent: * Disallow: /issues/gantt Disallow: /issues/calendar Disallow: /activity Disallow: /redmine/repositories/ Disallow: /redmine/projects/redmine/repository Disallow: /redmine/projects/redmine/issues Disallow: /redmine/projects/redmine/activity Disallow: /redmine/issues/gantt Disallow: /redmine/issues/calendar Disallow: /redmine/activity
我们知道 redmine 下每个项目的版本库浏览的 URL 为: http://bj.ossxp.com/redmine/projects/<PROJECTNAME>/repository, 难道要一一为每个项目进行配置么?
看了一下王胜之前的两个博文(robots.txt参考1, robots.txt参考2),以及 wikipedia 上的相关参考,尤其是 WikiPedia 上的这句话,让我眼前一亮。
The robots.txt patterns are matched by simple substring comparisons, so care should be taken to make sure that patterns matching directories have the final ‘/’ character appended, otherwise all files with names starting with that substring will match, rather than just those in the directory intended.
如果 Disallow: 后面的字符串配置是使用的 substring,那么不就是说可以是路径中任意的一部分么,那么使用 Disallow: /repository 是不是就可以限制搜索引擎对 redmine 版本库的抓取呢?
Nutch 深度的测试
3月19日
今天下午我做了一个Nutch深度的测试。先在apache2下建立一个小网站,这个网站用Git作版本控制工具,它只有5个网页,分别是a.html,b.html,c.html,d.html,index.html。它们的链接关系index.html中有a.html,a.html有b.html,依次类推。
robots.txt 文件的非标准扩展
3月9日
在前面的博客 关于机器人 /robots.txt 文件的常识 中已经介绍了 robots.txt 文件的一些基本用法,这篇文章向大家介绍一些 robots.txt 文件的一些扩展指令。
关于机器人 /robots.txt 文件的常识
3月8日
一、概述
网站所有者使用/ robots.txt文件提供有关其网站网络机器人的指示;这就是所谓的机器人排除协议 (The Robots Exclusion Protocol)。
它的作用机理: 一个网络机器人想要访问一个 Web 站点,比如说:http://www.example.com/welcome.html。在这之前,它会首先访问http://www.example.com/robots.txt,并发现:
阅读全部内容 »


最新评论