版权声明:本文由林少彬原创文章,转载请注明出处: 
文章原文链接:https://www.qcloud.com/community/article/89

来源:腾云阁 https://www.qcloud.com/community

QQ空间相册的旅游相册,它以照片拍摄时间为主线,还原了旅游行程中的故事,清晰展现了用户行程景点位置及拍摄的美景。景点位置查询作为旅游相册一个重要功能,可以帮助用户找回旅途中的足迹。腾讯内部搜索平台部成立不久便托管了景点POI搜索业务,支持用户景点输入智能提示、国内外景点搜索。

一.现状

旅游相册POI搜索业务自2013年10月上线后,从最开始的仅支持国内景点搜索到国外景点数据补充,再到针对性地修补景点数据,从数据层面做了大的修补。搜索点击率也随之逐渐提升。时隔数年,再次拾起,希望可以通过总结整理,达到知识分享、提升的目的。

二.架构设计

POI搜索智能提示主要用于用户输入景点检索串时,实时进行相关结果快速提示的场景。一方面可以补充提示用户所要输入的位置信息,另一方面可以引导用户搜索精确化,从而提高景点搜索结果准确度及结果点击率。
针对以上业务特性,POI搜索业务架构有别于其他通用搜索,主要体现在数据补充、离线索引、在线检索三个模块。

1.数据补充


目前数据分为三个来源:

  • 国内数据:由腾讯地图提供的POI数据,包括国内各省、市、区等行政区,旅游景点等。
  • 台湾和国外数据:由相册业务侧负责抓取, 中文、英文、其他语言都有。
  • 国外景点数据:由搜索侧抓取国外景点,范围按洲、国家、省从大到小,根据抓取到的景点名称调用Google Map API获取对应POI信息。这种补充方案依赖于地图API的准确性及景点名称规范性。

2.离线索引


离线索引主要功能包括接收POI原始数据,建立倒排、顺排、属性、等索引,离线打分。基于地图POI数据更新周期较长、同步集中的特点,POI搜索业务采用了定期全量推送加每天增量推送的更新方式。
为支持用户输入景点的实时检索,我们设计了两套索引结构:前向匹配切词索引、普通分词索引,保证用户检索结果可以前缀命中或分词命中检索串,从而提升用户检索体验。

前向匹配切词索引

  • 末级POI信息按前向匹配生成索引,例子:“中国/湖南/长沙/岳麓山书院”,生成的索引为“岳”“岳麓”“岳麓山”“岳麓山书”“岳麓山书院”。
  • 非末级POI信息做数值过滤feature,例子:“中国”“湖南”“长沙”作为Doc的数值过滤feature。
  • 生成全拼拼音索引并按前向匹配索引,如“zhongguo”生成z, zh, zho, zhon, zhong, zhongg, zhonggu, zhongguo。
  • 外文名称按单词粒度处理。
  • 需控制倒排链的最大长度。
  • 英文也做前向匹配切词。

普通分词索引

  • 末级POI信息按普通分词生成索引,例子:“中国/湖南/长沙/岳麓山书院”,生成的索引为“岳麓山”“岳麓山书院”“中国”“湖南”“长沙”。
  • 非末级POI不索引

行政区特殊索引

为支持行政区名检索,离线索引对每个POI文档的省、市、区行政区名建立了特殊索引:首先建立行政区名到行政区名字母映射表,查表得到POI对应行政区字母缩写,再通过添加特殊前缀标记的方式,把带特殊前缀的行政区字母标记添加进这篇文档的顺排词表。支持行政区识别检索效果如下:

离线计算

行政级别权重 > POI类别权重 > 主副点
行政级别权重:国家 > 省 > 市 > 县 > 末级POI
类型权重:旅游景点 > 其他
主副点:主点 > 副点,比如 银科大厦 > 银科大厦停车场,简单比较方法是词长越短越重要

3.在线检索

预处理

  • 去空格、归一化
  • 混拼(拼音汉字参杂)转换为全拼音
  • 切词: 去行政区、去POI类别、整串、普通分词(例子:南山世界之)
  • 去行政区:提取“南山”为行政区,“世界之”为真实检索串
  • 去POI类别:提取“汽车站”、“火车站”、“机场”等为POI类别
  • 整串:“南山世界之”
  • 普通分词:“南山”、“世界”、“之”
    在线检索主要功能包括索引数据加载,检索语法树构建,结果求交集相关性排序等。用户检索请求经检索语法分析,可以扩展为三种检索语法:

去行政区前缀检索:

带行政区名的检索串识别到行政区后,行政区名作为分类过滤条件结合去行政区后的检索串进行前缀索引检索。效果如下:

普通前缀检索:

无行政区名的检索串直接进行前缀索引检索。效果如下:

普通分词检索:

获取分词结果后进行分词索引检索。效果如下:

排序策略

  • 直接使用离线打分结果
  • RBU洗脸
  • 行政区、景点、前向匹配切词结果、普通分词结果各占几条
  • 行政区 > POI类别
  • 前向匹配切词结果 > 普通分词结果
  • 末级POI相同时,当前城市优先。如用户在深圳,搜索“世界之窗”“深圳世界之窗在”长沙世界之窗“前(暂无实现)

三.质量优化

1.零结果分析

根据业务侧提供的会话级检索词,即用户选中推荐地点时落下的检索串。会话级零结果数占每天会话级检索量接近四分之一
抽样会话级零结果检索串分析如下:

检索串类型 示例
时间+相册主题 2005年的我
相册主题 一個人的旅途
地点缺失 上海普陀区梅川路步行街
输入有误 巴黎罗浮宫

相册主题类:

包括时间+相册主题、相册主题类型的检索串。用户在地点框误输入相册主题,输入与景点搜索无关,检索串格式比较混乱

地点缺失:

用户输入带范围描述词的地点,比如:东莞莞城区西城楼附近、哈尔滨松花江江边。有些地点没有索引进来,比如:柳城太平安乐湖、康巴什赛马场

输入有误

少数输入拼写错误,比如:巴黎罗浮宫

结论:

导致零结果的检索串中相册主题类型占了绝大部分;地点缺失问题主要是用户不能确定景点位置导致;数据缺失问题比例相对较小。

解决方式:

产品侧策略:通过产品侧对用户的输入做引导,帮助用户区分相册描述、景点位置输入框,提升检索串质量。
数据补充策略:针对地点缺失的问题,通过抓取旅游网站著名景点数据补充。
在线处理策略:后续考虑引入QC纠错,解决拼写错误等问题。
引入QC纠错及补充著名景点数据前后,搜索零结果率有所下降,效果如下:

2.结果曝光各类型POI数比例

结论:

从各类型结果曝光情况看出,非旅游景点、非行政区的结果检索得到的POI数最多;搜索结果整体趋向景点、地址搜索的场景,由于对风景名胜等景点相关的POI数据离线打分权重相对较高,导致其他类型数据召回效果并不理想。

解决方式:

针对特定类型(如机场、火车站、汽车站等)检索需求,离线索引会对这类POI文档建立分类类型特殊索引,在线检索对检索串语法分析时,可以识别出其分类意图及分类类型,转化为分类过滤条件下发。效果如下:

经历了QQ空间相册等业务的高速发展,景点POI搜索应用积累了丰富的应用场景与应用经验,不断提升性能及优化用户体验,足够成熟后已作为“腾讯云搜”产品的能力之一开放给广大的开发者用户。

旅游吧!我在这里 ——旅游相册POI搜索:找回你的足迹的更多相关文章

  1. 高德地图-搜索服务-POI搜索

    高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置 ...

  2. Android学习笔记之使用百度地图实现Poi搜索

    PS:装个系统装了一天.心力憔悴.感觉不会再爱了. 学习内容: 1.使用百度Map实现Poi搜索. 2.短串分享 3.在线建议查询   百度地图的研究也算是过半了.能够实现定位,实现相关信息的搜索,实 ...

  3. 【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索

    原文:[高德地图API]从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公 ...

  4. [android] 百度地图开发 (两).所在地的城市定位和城市POI搜索

    一个. 百度地图城市位置和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定 ...

  5. JS高德地图应用 ---- 鼠标点击加入标记 & POI搜索

    代码如下 (填入Key值) : <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

  6. POI搜索简介

    用户输入——用户输出-----------------------------------------------------------而POI搜索引擎,需要做的就是拿到输入条件,给出用户比较满意的 ...

  7. 【高德地图API】从零開始学高德JS API(四)搜索服务——POI搜索|自己主动完毕|输入提示|行政区域|交叉路口|自有数据检索

    地图服务.大家能想到哪些?POI搜素,输入提示,地址解析,公交导航,驾车导航,步行导航,道路查询(交叉口),行政区划等等.假设说覆盖物Marker是地图的骨骼,那么服务,就是地图的气血. 有个各种各样 ...

  8. iOS第三方地图-百度地图常用功能使用(POI搜索,地理正反编码,定位,添加标注)

    百度地图官网: http://developer.baidu.com/map/index.php?title=iossdk 百度地图集成 1.引入相关包

  9. android POI搜索,附近搜索,周边搜索定位介绍

    POI搜索有三种方式.依据范围和检索词发起范围检索poiSearchInbounds.城市poi检索poiSearchInCity,周边检索poiSearchNearBy. 下以周边检索为例介绍怎样进 ...

随机推荐

  1. SGU 120 Archipelago (简单几何)

    120. Archipelago time limit per test: 0.25 sec.  memory limit per test: 4096 KB Archipelago Ber-Isla ...

  2. MongoDB 集群搭建(主从复制、副本及)(五)

    六:架构管理 mongodb的主从集群分为两种: 1:master-Slave 复制(主从)    --从server不会主动变成主server,须要设置才行 2:replica Sets 复制(副本 ...

  3. 责任链模式 - tomcat

    class filterChain{ private List<Filter> filters; public void addFilter(Filter filter){ filters ...

  4. Ajax-jQuery_Ajax_实例 ($.ajax、$.post、$.get)

    Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作,不用考虑浏览器的诧异了. 推荐一篇不错的jQuery Ajax 实例文章,忘记了可以去看看, 地址为:h ...

  5. daterangepicker 使用方法总结

    daterangepicker 是一个时间段选择插件.官网地址:http://www.daterangepicker.com/ 项目中需要实现如下图的效果: 1.引入该插件所需要的JS 和 CSS , ...

  6. UML---UML中的几种关系(依赖,关联,泛化,实现)

    关于设计模式的总结没有落实到代码上,而且设计模式自己确实动手实现的非常少.所以在这一周里,除了看网站开发的视频,着手开始对设计模式进行实现以下.设计模式非常经典,每次看都有不同的收获,写一下自己的收获 ...

  7. e676. 把彩色图像转换为灰色

    ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); ColorConvertOp op = new ColorConvertOp(c ...

  8. MVC演化 (转至http://www.cnblogs.com/wubaiqing/archive/2011/10/26/2225438.html)

    MVC已经成为我们最常误用的模式,人们之所以常常误用MVC,很大程度上是因为混淆了不同的MVC变体. Classic MVC Classic MVC 大概上世纪七十年代,Xerox PARC的Tryg ...

  9. ST500LT012-1DG142硬盘參数

    ATA 设备物理信息 制造商 Seagate 硬盘名称 Momentus Thin 500LT012 形状特征 2.5" 格式化容量  500 GB 盘片数 1 记录面 2 外形尺寸 100 ...

  10. asp.net mvc中用angularJs写的增删改查的demo。初学者,求指点。。

    直接给个代码下载链接.... http://pan.baidu.com/s/1FfVgq 本人刚刚学习angularJs,感觉双向数据绑定蛮爽的... 之前的代码存在点问题,已修复