搭建搜索功能不难,难的是如何提高搜索质量,帮助用户快速找到心中所想的内容或商品,那么搜索结果的相关性排序则是影响用户体验最关键的一环,今天小编和大家聊一聊"开放搜索"几个典型的排序表达式的应用,如何更好的优化电商/O2O行业的排序效果.
Query在开放搜索的执行流程
开放搜索排序表达式配置
场景1:关键词重复堆砌导致排序分数较高问题
案例:电商商家作弊问题:关键词重复堆砌导致排序分数较高,排序结果靠前
开放搜索解决方案:业务排序函数field_term_match_count,获取文档中某个字段与查询词匹配的词组个数,根据不同个数做不同的处理;
场景2:衡量商品时效性
开放搜索解决方案: 可以用在粗排和精排的timeliness函数,计算时效分,用于衡量文档/商品的新旧程度, 单位为秒,返回值:float,值域为[0,1],值越大表示时效性越好;
场景3:不同维度归为同一区间(综合分值)去排序
案例:一篇doc的好坏需要从不同的维度衡量。而各个维度的分数值域可能不同,网页点击数可能是成百上千万,网页的文本相关性分数在[0, 1]之间,它们之间没有可比性,为了在公式中使用这些元素,需要将不同的分数归一化至同一个值域区间,而normalize为这种归一化提供了一种简便的方法
开放搜索解决方案:归一化函数normalize根据不同的算分将数值归一化至[0, 1];
场景4: 对符合用户标签喜好的商品加权
案例: 年轻女用户搜索"鞋子",对应商品排序需求满足用户特性标签"年轻""女性";对符合用户标签喜好的商品加权,从而实现个性化搜索排序;
开放搜索解决方案: 商品可以具有多个属性标签,例如1表示年轻人(年龄)、2表示中年人(年龄)、3表示小清新(风格)、4表示时尚(风格)、5表示女性(性别)、6表示男性(性别)等等, 应用标签匹配tag_match 函数,实现对匹配到的商品做排序加权,
场景5:某时间段的指定搜索需求
例如:
查询下午14点到15:30点营业的店铺
查询下午14点到15:30之间,库存>10的店铺有哪些
查询明天晚上能服务3-5个人的店铺
开放搜索解决方案: 运用功能函数bit_struct将INT_ARRAY字段值进行自定义分组并允许对分组值进行指定operation计算。
场景6:基于位置、距离搜索
案例:查找距离用户10公里内的【外婆家】餐厅,并按照距离由近及远排序
开放搜索解决方案:运用distance函数, 获取两个点之间的球面距离,一般用于LBS的距离计算。
如果你想和更多搜索技术相关同学交流,可以一起加入【推荐与搜索技术交流群】,钉钉群号: 23310502。