algorithm - 通知系统的设计问题

标签 algorithm search search-engine web-crawler

原帖发布于https://stackoverflow.com/questions/6007097/design-question-for-notification-system

这里是对问题的更多澄清:通知系统的目的是在网站内容更改或更新或发布新帖子时通知用户(目前通过电子邮件)。这可以被视为一个通知系统,人们在其中为第 3 方站点定义规则或关键字,然后通知系统开始爬行第 3 方站点并创建搜索倒排索引。然后为用户定义的关键字或规则显示一个新的链接或文档(关于用例的更多解释在底部),

为了澄清用例:假设我是 craigslist 用户并正在寻找二手车。我定义了一个规则“Honda accord”,“year”1996 和 price range from“$2000 to $3000”。

对于上述用例,最佳方法是什么?我如何利用 Apache Lucent、Apache Solr 和 Apache Nutch 以及 Apache Hadoop 等开源技术来解决这个用例。 您可以构建搜索引擎并使用规则和关键字通知系统。我只需要一些关于如何集成这些开源包来解决用例的指导和帮助?

任何帮助和指示将不胜感激。我们需要三个重要的组件是:

1) Web Crawler 
2) Index Creator  
3) Rule or keyword Mather

任何帮助将不胜感激。我指的是这个将 Nutch 和 Solr 集成在一起用于上述目的的 wiki http://wiki.apache.org/nutch/RunningNutchAndSolr

最佳答案

你的问题很大,但我会尝试一下,因为我以前设计和实现过这样的系统。

忽略用户帐户管理,您的系统将需要提供以下方法:

  1. 检索新的潜在客户数据(网络蜘蛛)

  2. 从潜在客户数据中识别并提取相关结果(过滤)

  3. 收集、维护和组织结果(存储)

  4. 根据各种元数据(查询)选择结果

  5. 格式化结果以交付给用户(模板化)

  6. 向用户交付格式化结果(delivery)

如果您的项目范围很小(比如每天需要抓取的站点少于 100 个),您可能会使用众多开源网络蜘蛛之一,包括 wget、Nutch、WebSphinx 等。您可能需要提供用于调度、监视和控制的仪器(定制软件)。如果您的项目范围大于此,您可能需要“推出自己的”爬虫解决方案(定制软件)。通常,这将被设计为分布式并行架构。

对于简单的过滤,正则表达式就足够了,但对于需要 HTML 布局知识的更复杂的任务(提取页面上第四个表的第五个列表元素 ( <LI/> ) 的文本组件),您需要使用一个 XHTML 解析器。无论您如何进行,您都需要提供自定义软件以根据用户的需求进行过滤。

虽然任何数据库技术都可用于存储从检索到的文档中提取的结果,但使用像 Apache SOLR 这样针对文本优化的引擎可以让您根据需要轻松扩展搜索条件。由于 SOLR 支持附加和搜索与每个文档关联的元数据,这将是一个不错的选择。您还需要在此处提供自定义软件以自动执行此步骤。

一旦您从 SOLR 选择了候选结果列表,就可以使用任何脚本语言将它们模板化为一封或多封电子邮件,并将它们注入(inject)您的邮件传输代理 (MTA)。这还需要定制软件来自动执行此过程(如果需要,将特定于用户的数据注入(inject)每条消息)。

关于algorithm - 通知系统的设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6011192/

相关文章:

javascript - 在 Javascript 中生成唯一 ID

python - python列表中最常见的子列表

algorithm - 计算不同引用系中的坐标

c - 查找重复字符串的高效搜索算法

seo - 如何在两个博客上保持相同的内容?

c - 内存泄漏检测

search - 确定一个词 "is"- 对标记进行分类

javascript - 如何在单击按钮时使用 instantsearch.js 启动搜索

metadata - 开放图谱协议(protocol)服务列表

php - 从 MySQL 数据库中识别(非精确的)重复项