揭秘12306如何保证车票不的关键技术!(组图)

优采云 发布时间: 2021-05-19 23:26

  揭秘12306如何保证车票不的关键技术!(组图)

  我正在休假,为什么显示有票却无法获得票?揭秘12306的关键技术,如何确保票证不会超卖! >>>

  

  推荐系统经常在现代网站中使用。不同类型的操作需要不同的推荐策略,并且推荐策略必须简单易懂,这可以方便操作和维护人员进行手动调整。本文以全文搜索引擎为例,说明如何自定义推荐系统。

  ###基本原理推荐系统的基本原理是首先分析相关产品,例如

  "male age18 1000 1010 1020 ..."

  此处的“ 1”是产品的ID。当18岁的男性用户注意两种产品“ 1000 1020”时,他会使用条件

  "male age18 1000 1020"

  搜索,获取收录所有条件的文本,然后向用户推荐产品“ 1010”。

  ###实时推荐某些流行的相关产品仅售卖了几天,之后相关性迅速减弱,需要实时推荐。实时推荐的原理是记录每个用户在一天中(或最近几天)长时间浏览的产品。当新用户也正在寻找类似产品时,请向该新用户推荐曾经浏览过同一产品的前几个用户。用户

  ####实现这些功能的代码可以使用全文本搜索引擎来实现。以FTServer使用的引擎为例。当用户关注产品时,将产品用作文本内容,并将用户用作文本ID来生成searchindex dailyEngine .indexText(),此索引等效于复合主键(product-user ),则每当涉及到新产品时,都会调用FavorWhenStay10Sec()。此函数包括用于生成搜索索引的代码indexText()以及用于记录用户注意力的iBoxDB数据库** insert()**操作

  private static void FavorWhenStay10Sec(Engine dailyEngine, AutoBox autoDaily, long userId, long itemId) {

try (Box box = autoDaily.cube()) {

box.d("/Favor").insert(new Favor(userId, itemId));

dailyEngine.indexText(box, userId, Long.toString(itemId));

box.commit();

}

}

  当新用户注意两个产品“ 1055 1058”时,将这两个产品用作全文搜索关键字进行搜索

   RealTimeRecommendPrint(engine, autoDaily, new long[]{1055, 1058});

  通过dailyEngine.searchDistinct()搜索方法,可以获得使用相同产品的用户(生成索引时设置的文本ID为用户ID)

  for (KeyWord kw

: dailyEngine.searchDistinct(box, sb.toString(), startId, HowManyUsersAsReference)) {

long userId = kw.getID();

....

}

  然后建议将具有相同兴趣的用户吸引到新用户

  for (Favor favor : box.select(Favor.class, "from /Favor where userId == ?", userId)) {

System.out.print(favor.itemId + ",");

}

  此处,HowManyUsersAsReference设置返回的用户数。由于具有实时推荐功能,因此在很多情况下不必让所有用户都具有相同的爱好。

  ###深入推荐当大量用户关注数据时,无需由单个用户来组织数据。可以定制各种算法来分析产品的关联,或者可以手动分析产品的关联,然后回到第一部分关于实现的基本原理,具体的实现代码与直接调用完整搜索引擎,将多个相关产品的ID形成文本,然后输入全文索引,当产品ID与推荐中的产品ID匹配时,该文本与其他产品ID相关,即推荐内容。

  源代码下载

  更多:全文搜索中精确匹配和分词匹配的比较

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线