<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>热词推荐 on 翟志军 Jack Zhai</title>
    <link>https://showme.codes/tags/%E7%83%AD%E8%AF%8D%E6%8E%A8%E8%8D%90/</link>
    <description>Recent content in 热词推荐 on 翟志军 Jack Zhai</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <copyright>showme.codes</copyright>
    <lastBuildDate>Sat, 31 Dec 2016 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://showme.codes/tags/%E7%83%AD%E8%AF%8D%E6%8E%A8%E8%8D%90/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>一个热词推荐的简单实现</title>
      <link>https://showme.codes/zh-cn/2016-12-31-hot-word-recommend-demo/</link>
      <pubDate>Sat, 31 Dec 2016 00:00:00 +0000</pubDate>
      <guid>https://showme.codes/zh-cn/2016-12-31-hot-word-recommend-demo/</guid>
      <description>&lt;h4 id=&#34;为什么想做这个东西&#34;&gt;为什么想做这个东西&lt;/h4&gt;
&lt;p&gt;一直好奇像亚马逊这类网站的搜索是如何做到推荐的，最近刚好看到一篇文章：&lt;a href=&#34;http://blog.jobbole.com/95780/&#34;&gt;Redis 与搜索热词推荐&lt;/a&gt;，然而只写了思路。所以，就是想自己实现一个。&lt;/p&gt;
&lt;p&gt;先上个效果图，再聊：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://showme.codes/assets/images/index.lsp.gif&#34;&gt;&lt;/p&gt;
&lt;p&gt;P.S. 按四年前，要写这样的前端效果，对于我这个后台开发，还是挺困难的。而现在，简单的学了下Vue.js，再加上同事的小小指点，就搞定了。😂&lt;/p&gt;
&lt;h4 id=&#34;热词推荐的本质&#34;&gt;热词推荐的本质&lt;/h4&gt;
&lt;p&gt;假如你预先就知道了用户输入：s、sz、shen、深这些字时，就是想搜“深圳”，那是不是说，我们只要提前将这些字放到一个Map结构中，将用户的输入想像出一个key，value就是“深圳”。&lt;/p&gt;
&lt;p&gt;说到底，热词推荐的本质就是一个大大的Map。&lt;strong&gt;难点就在于如何更新这个Map&lt;/strong&gt;，以至于让用户觉得“智能”，或觉得我们在给他们做“推荐”。&lt;/p&gt;
&lt;p&gt;这个Map，常常被人称为“索引”。其实使用“索引” 这个名词也更准确一些。Map中的Key是不能重复的。但是我们数据结构是要求可重复的，为什么呢？因为，在系统中，s、sh、shen、深等等这些都是key，而它们对应的value，可能相同，又可能不同。举个例子：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;hotword:0&amp;gt;zrevrange s 0 10
1) 鼠蛟
2) 鼠场乡
3) 鳝鱼
4) 鳝溪校区
5) 鳝溪农场
6) 鳝溪
7) 骚子营社区
8) 骚子营
9) 驷马镇
10) 驷马桥街道
11) 驷马桥
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;hotword:0&amp;gt;zrevrange sh 0 10
1) 鼠蛟
2) 鼠场乡
3) 鳝鱼
4) 鳝溪校区
5) 鳝溪农场
6) 鳝溪
7) 首院胡同
8) 首阳镇
9) 首阳山镇
10) 首阳山
11) 首钢试验厂
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;仔细看到其中的不同了吗？同时，这里还有一个问题，那就是当用户输入s时，出现了10个value，我们如何给这些value如何排序呢？&lt;/p&gt;
&lt;p&gt;为了与排序模型解耦，我们为每个value都给出一个分数score。score越大，越排前面。最终索引结构就变成了这样子：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://showme.codes/assets/images/key-value-score.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;P.S. 这些score之所以都为0，是因为数据问题。&lt;/p&gt;
&lt;p&gt;总的来说，关于热词推荐，我们需要解决以下问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如何存储索引的数据？&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
