Java 什么';动态显示上下文相关广告的最有效方式是什么?

Java 什么';动态显示上下文相关广告的最有效方式是什么?,java,adsense,Java,Adsense,我有一个网络平台,我想通过上下文相关的广告来赚钱 必须根据快速变化的内容和匹配广告的相关性来决定应该显示哪个广告。因此,必须实时找到这些广告(不可能缓存!) 我已经有了一个数据库,里面有数以百万计的广告以及描述这些广告的关键词 我还实现了一个算法,该算法分析用户正在查看的内容,然后用户选择一个匹配的广告(基于其关键字) 现在的问题是:既然有数百万的广告可用,我的算法就必须一步一步地浏览这个庞大的广告列表,并检查每个广告的关键字是否(以及有多好)与当前查看的内容相匹配 这需要很长时间,每次内容更改

我有一个网络平台,我想通过上下文相关的广告来赚钱

必须根据快速变化的内容和匹配广告的相关性来决定应该显示哪个广告。因此,必须实时找到这些广告(不可能缓存!)

我已经有了一个数据库,里面有数以百万计的广告以及描述这些广告的关键词

我还实现了一个算法,该算法分析用户正在查看的内容,然后用户选择一个匹配的广告(基于其关键字)

现在的问题是:既然有数百万的广告可用,我的算法就必须一步一步地浏览这个庞大的广告列表,并检查每个广告的关键字是否(以及有多好)与当前查看的内容相匹配

这需要很长时间,每次内容更改(可能在几秒钟内发生)时都必须重新执行。反复浏览广告列表并单独获取关键词已经非常慢了


更新:为了更清楚一点,下面是我正在做的一个快速代码示例:

String text = getText(); // The content to analyse
text = text.toLowerCase();
List<Ad> ads = getAds();
Ad bestMatchingAd = null;

// ads.length() == Millions!
for (Ad ad : ads){
 List<String> keywords = ad.getKeywords();

 // keywords.length() == ~50
 for (String keyword : keywords){
  keyword = keyword.toLowerCase();
  if (text.indexOf(keyword) != -1){
   ad.increaseHitcounter(); // Increases number of keyword hits by 1
  }
 }

 // Check if this ad fits best to the given text
 if (bestMatchingAd != null){
  if (bestMatchingAd.getHitcounter() < ad.getHitcounter()){
   bestMatchingAd = ad;
  }
 }
 else{
  bestMatchingAd = ad;
 }
}

showAd(bestMatchingAd);
String text=getText();//要分析的内容
text=text.toLowerCase();
List ads=getAds();
Ad bestMatchingAd=null;
//ads.length()==百万!
用于(广告:广告){
List keywords=ad.getKeywords();
//关键字.length()==50
for(字符串关键字:关键字){
关键字=关键字.toLowerCase();
if(text.indexOf(关键字)!=-1){
ad.increaseHitcounter();//将关键字命中数增加1
}
}
//检查此广告是否最适合给定文本
if(bestMatchingAd!=null){
if(bestMatchingAd.getHitcounter()

正如你所见,每次内容发生变化时,我都会反复浏览所有广告和所有关键词。这太多了,而且要花很长时间。这里有什么更好的解决方案


注意:普通解决方案,如Adsense不是一个选项,因为内容对公众不可见。因此,需要一个自己的实现。

您不应该在列表中进行迭代,您需要更高效的实现,例如哈希键或二叉树


我打赌,如果您搜索大o符号和搜索算法,您可以找到大量信息。

您可以根据关键字在数据库中创建不同的表,例如,对于从“A”开始的keyoword,将有一个名为A_table的表。现在在您的代码中,您可以搜索关键字,如包含的关键字。把简单的if-else放在梯子上。它肯定会提高性能,因为编程语言的计算速度总是比数据库快。

我认为问题在于为每个快速变化的网页搜索“最佳”广告。这里的关键问题是实时性。查询是来自网页的关键字,这些关键字会不断变化,而目标是来自广告的关键字,它们相对稳定

我的解决方案:

1/应以离线方式为所有广告生成反向索引。如果你有大量的云计算技术,你可能会想采用mapreduce之类的云计算技术

2/无论何时网页的“内容”发生变化,都是重新分析其关键字并与您已经生成的反向索引进行匹配的适当时机。利用反向索引,对于每个广告,它将在相当短的时间内完成

现在有两件事对你至关重要,a)当你判断一个网页是否真的改变了,b)什么是最佳匹配。

例如,某些事件直接导致更改,例如,用户在网页上发布新评论或有人编辑其海报

对于b来说,统计广告的关键词点击率或随机将至少一次点击率的a广告达到峰值可能是最简单有效的方法。您可以使最佳匹配的标准更加复杂,同时降低效率

就这样。但我真的不知道是否有必要处理这样一个实时问题。事实上,您可以用计算资源的成本来实现这一点


希望它对你有用

你需要这些广告的索引。你能更准确地解释一下吗?@Synxmax Java with MySqlJust off the head:你可以在全文搜索引擎(例如Apache Lucene)中为广告编制索引,并使用内容对其进行查询。@RoToRa是的,但在什么上建立索引呢?通常情况下,例如,你会在一列上放置一个索引,但在这种情况下,广告有多个关键字,所以我认为在这里使用索引有点困难。我没有那么多可用的计算能力,所以我正在寻找一个更智能的解决方案。在我的原始帖子中查看我更新的代码示例。也许你看到了优化的潜力。@valmar 1>你可以用一台普通电脑简单地生成反向索引。根据你的帖子,广告不会像网页那样快速变化。虽然这是一项非常耗时的任务,但它是一项离线任务。您可以获得比KMP搜索(即text.indexOf())更好的实时性能。2> 你在下面的代码中说:“每次内容发生变化时,我都会对所有广告和所有关键词进行迭代。”。你做得对。不要每次用户需要页面时都这样做。好吧,每次用户需要页面时我都必须这样做,因为内容会发生变化,我需要匹配的广告。@valmar我不太明白为什么每次用户需要页面时你都必须这样做,而不是当某些事件确实导致内容发生变化时。页面的内容是否在用户每次需要时都会更改?也许你的情况与其他人很不一样。你可以考虑一下。不,他们是相反的。在我的原始帖子中查看我的代码示例。