码迷,mamicode.com
首页 > 其他好文 > 详细

Ternary Search Tree 应用--搜索框智能提示

时间:2015-06-18 15:13:08      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

前面介绍了Ternary Search Tree和它的实现,那么可以用Ternary Search Tree来实现搜索框的只能提示,因为Ternary Search Tree的前缀匹配效率是非常高的,总体思路如下(其中很多可以根据自己的需要修改,我只是写出我的做法):

比如搜索歌曲时智能提示:

建立Ternary Search Tree

  1. 将所有歌曲名的字符串放置在一个map中,key为歌曲名、value存储歌曲信息,可以是一个类对象domain,在这里可以按照key值将相同歌曲的播放次数累加,并将歌曲名转为拼音,使用的是pinYin4J
  2. 将map转为歌曲对象list存储
  3. 在Node类中新增一个字段,index用以存放一个对象在list的下标值(这是关键的一部,是为了在Ternary Search Tree中查询到前缀为a的所有歌曲名拼音后,能获取到相应的index,直接在list中get(index),即能获取该歌曲的相应信息)
  4. 按照一首一尾将歌曲名拼音和该歌曲在list中的index插入到Ternary Search Tree中,原因参考--------------------------,为了使Ternary Search Tree平衡

 

 

查询

查询时,比如用户输入a,那么所有以a为前缀的歌曲名都要被搜寻出来

  1. 去Ternary Search Tree中查询以a为前缀的歌曲名,存入map,key为歌曲名拼音,value为index
  2. 根据index取得相应歌曲的信息
  3. 将歌曲播放数量作为value,index作为key放入treemap进行排序,改写comparator降序排列
  4. 从treemap中取n条记录,得到对应的resultList,根据index获取到相关歌曲信息
  5. 返回

 

 

总结一下,Ternary Search Tree是用来查询前缀匹配的所有歌曲

将所有匹配的歌曲查询出来后,还有根据某一字段排序等等进行一系列处理。

即 Ternary Search Tree查询 + topK排序

 

 

扩展

高亮功能

首字母匹配,即多建立一棵树,查询后按照播放次数排序去重

 

序列化Trie,避免每次重启都需要重建Trie,导致服务不可用

……

Ternary Search Tree 应用--搜索框智能提示

标签:

原文地址:http://www.cnblogs.com/edwinchen/p/4580265.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!