4

假设我有一个来自数据库的员工姓名列表(数千个,在不久的将来可能会有数万个)。为了使问题更简单,假设每个名字/姓氏组合都是唯一的(一个很大的 if,但是一个切线)。

我还有一个与业务相关的新闻内容的 RSS 流(同样,每天可能有数百个项目)。

我想做的是检测员工姓名是否出现在几段新闻项目中,如果是,则用它谈论的人“标记”该项目。

一条新闻中可能有不止一个员工的名字,因此在第一次正面匹配后打破循环是不可能的。

我当然可以暴力破解:对于每个新闻项目,循环遍历每个员工姓名,如果正则表达式返回匹配项,请记下它。

ColdFusion 中是否有更简单的方法,还是我应该继续使用嵌套循环?

4

3 回答 3

7

只是把它扔在那里作为你可以做的事情......

听起来您几乎一致认为每个职位的员工姓名要比字数多得多。以下是我可能会如何处理它:

拥有一个始终运行的 CF 应用程序,该应用程序将拉入提要和 onAppStart

  1. 从您的数据库中获取所有员工
  2. 创建一个应用范围的查找结构,其中名字作为键,姓氏结构作为值(如果需要,您还可以将中间名同级添加到具有第 3 层的姓氏)。

因此,查找中的一个键可能是“Vanessa”,其结构具有 2 个键(“Johnson”和“Forta”)作为其值。

然后,您解析的每篇文章,只需使用空格作为分隔符的 listToArray 并循环遍历数组,并对每个标记执行简单的 structKeyExists 。对于匹配项,检查数组中的下一项作为姓氏。

这将比进行许多搜索具有更高的处理性能,并且几乎不需要时间进行编码,并且您可以非常简单地输入任何未来的资源(您的检查器接受一个参数,地球上的任何文本)。

有兴趣了解您走的路线以及您的实验是否揭示了有关 CF 性能的任何新信息。

于 2012-07-01T00:41:00.883 回答
0

马修,你的要求很高,挑战/解决方案确实有多个部分。但是,仅将值列表与给定的文本集进行比较以查看其中是否出现其中一个,您会发现没有人可以使用 CF 函数。因此,我在 cflib 中创建了一个新的 findList:

http://cflib.org/index.cfm?event=page.udfbyid&udfid=1908

它不是完美的,也不是最理想的,但它可能是有用的第一步,或者你,或者给你一些想法。也就是说,它适合我的需要(确定给定的博客评论是否引用了任何列入黑名单的词)。我显示它比较 URL 列表,但它可以是任何单词。希望这有点帮助。

于 2012-07-01T01:01:00.747 回答
0

另一个值得探索的选择是利用现在随 CF 一起提供的 Solr 引擎。它将为您完成字符串搜索繁重的工作,您可能可以专注于动态地保持您的集合是最新的并随着新的提要项的出现而优化。

祝你好运!

于 2012-07-01T02:23:49.693 回答