40

从提高 Elasticsearch 搜索体验说开去......

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ%3D%3D&%3Bmid=2247485287&%3Bidx=1&%3Bsn=11526dc7373bb1a98169e69d6d4e1de3
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1、实战问题

球友提问:怎么搜索才能使得结果是最好的呢?

我这边一个搜索功能,实现做法就是将用ik分词器配合multi查询实现的。

中途也追加了客户所在领域相关词汇字典。

但是客户一直反馈搜索体验不好。

如果想要提高搜索体验还能从那些方面入手呢?

来自:死磕 Elasticsearch 知识星球

这个问题非常有代表性,我在实际产品开发中也遇到过。

2、从几个例子说搜索体验

示例一:“慕X网”输入“触发器”的搜索截图。

veEriyZ.png!mobile

注意:我输入的是“触发器”,返回结果第一条没有问题,其他几条有关:“触”、“发”的,可以说和我的搜索没有关系。

站在用户体验的角度,我认为:体验很差,返回了很多不相关的数据。

示例二:某题库APP,不支持跳转翻页。

如下所示,题库共1703题,包含:判断题、选择题。

mM3QJ3r.png!mobile

只支持:点击:上一题、下一题。

实际场景:

  • 当做了100道、200道的时候,只有选择题;到底多少选择题?

  • 当退出后,需要点击几百下进入自己上次做到的最后一道题.....

这不是用户体验差,这是没有用户体验,开发者完全没有动脑子的设计,用户会"怀疑人生"。

JrMZvyV.png!mobile

示例三:电商搜索“秋天第一条秋裤”,该返回什么?

m6BFF3e.png!mobile

放大 查看图片,亮点自现

这是个见仁见智的问题,究竟返回什么,各个电商公司都有自己的评判。

但,单纯站在用户的角度,高下立判。

铭毅一句话点评:

  • 拼多多

“活该你发展快”,的确返回结果就是预期结果,且友好的推荐了所在地域的“秋裤”信息。

  • 淘宝

中规中矩,至少能返回“秋裤”。

  • 京东

没有找到商品,为你推荐“秋裤”,“干嘛推荐,直接返回不就完了”。

  • 当当

好家伙!推荐的都是“秋天”的商品。你是用户,你咋想?

  • “尼玛,什么玩意?”

  • “五味杂陈”

  • “不知所云”

......

基本上可以得出结论:公司发展速度和搜索体验成正比。

3、有数据的地方,就有搜索

信息泛滥和爆炸的今天,搜索无处不在。基本可以形象的概括为:“ 有数据的地方,就有搜索 “。

搜索可能是用户最常用到的功能之一,学习、工作、衣食住行等各个环节都离不开搜索。

  • 学习

输入关键词,搜索靠谱的免费或付费网络资源。

  • 工作

遇到错误码,通过Google 搜索获得答案。

搜索微信聊天记录,看看之前都聊的某个关键有价值信息。

网上购买衣服,实际就是搜索、选择的过程。

日常中午订外卖,选择外卖的过程,就是搜索的过程,离公司近+评价高=下单几率大。

出差订酒店,搜一下,对比选择个性价比高的。

十一自驾游,出行前高德导航,输入目的地搜索结果,根据返回结果,选择合适路线。

正如:搜索体验的分析文章指出:“搜索框的设计及其可用性问题其实是一个不容忽视的要点。

一个好的搜索体验也许并不能让用户对你的产品产生特别的好感,但是 一个不好的搜索体验却能给你的产品带来致命的打击

所以无论是为了给用户提供更好的服务,还是避免用户产生消极的体验感受, 做好搜索的体验对一个内容型产品来说都是至关重要的 。“

判定搜索体验好不好,搜索结果满足用户需求已是最低门槛要求,以下内容都是能带来良好搜索体验的考察点、用户关注点:

  • 搜索框:

1)在视觉上突出搜索框、搜索框与放大镜icon配合使用;

2)将搜索框置于用户预期的位置;

3)提供搜索按钮;

4)合适的尺寸

毫不客气的说:“ 在导航栏最显眼位置放置搜索框是对用户最起码的尊重 ”!

  • 可搜索内容提示:告诉用户他们可以搜索哪些内容

rIbQVrf.png!mobile

  • 每个页面都要有搜索框

  • 使用智能推荐/匹配机制

byeamqQ.png!mobile

iQJJRjU.png!mobile

智能推荐或匹配可以节省用户的输入成本。

普通用户不太善于组织搜索语言:在这种情况下如果他们没有在第一步就表达清楚问题,那么接下来也很难成功找到合适的搜索结果。

当智能匹配发挥作用后,它就能帮助用户表达清楚搜索的问题,进而找到满意的答案。

一句话,好的搜索体验就是好的用户体验,而好的用户体验自然和用户留存、甚至公司发展挂钩。

4、用户搜索的五个核心环节拆解

“搜索就像是用户与 App 或者网站之间的对话,用户通过提问表达信息需求,App 或者网站通过展示结果来作为回应。

用户期待流畅的搜索体验,并且基于搜索结果的质量用户通常会对一个 App 的价值形成一个快速的判断。”

在搜索的过程中,用户的经历大致可以分为五个部分,分别是:发现搜索、输入关键词、等待结果、查看结果、完成搜索,每个步骤的体验都是整体体验的一部分,将对用户最终对搜索体验产生影响。

fIFzum.png!mobile

4.1 发现搜索

如前所述,搜索框要醒目,搜索栏甚至会独立于头部并且会在UI界面中占据视觉焦点的位置,用户很容易就能找到。

4.2 输入关键词

  • 要能提示用户,输入什么关键词。

  • 能根据用户输入的某几个关键,给出“搜索提示”,如前谷歌搜索截图。

  • 复杂组合搜索,类似谷歌【高级搜索】,要有辅助控件,筛选日期、排除关键词设置、排序方式、与或非表达式等。

4.3 等待结果

  • 响应要快,用户的忍耐是有限度的,超过3秒不返回,估计用户就流失了。

  • 如果的确响应慢,可以有响应动画或者提示信息友好提示。

  • 能识别用户输入,必要结果用户历史搜索习惯,整合后返回最优TOP N结果。

4.4 查看结果

  • 用户根据搜索返回,筛选的过程。

  • 如果没有结果,建议不要直接返回“0”条结果,可以有其他推荐信息,比如:提示用户换关键词等。

4.5 完成搜索

  • 有满足需求结果,搜索结束。

  • 没有满足用户的结果,用户会换关键词继续搜,或者用户流失去别的APP或者网站了。

若要完善用户体验,这几个步骤缺一不可、都得下功夫。

5、Elasticsearch 搜索的底层逻辑

明白下面两个过程,就能很好的理解 Elasticsearch 搜索。

fiAJFf3.png!mobile

以下仅针对:text的全文检索的文本类型。

5.1 写入索引化过程

  • 文档写入 Elasticsearch 不是直接写入,而是根据你Mapping定义的分词器(默认:standard)分词,构建倒排索引后写入。

  • 分词器的选型,决定分词的粒度,分词的粒度决定后续的检索指标是否能达标。

5.2 数据检索过程

  • 检索环节,不是输入什么就检索什么,而是不同的检索语句,会有不同的检索机制。

  • 检索环节,选择什么检索类型,结果也会完全不一致。

比如:“match”细粒度检索和“match_phrase”粗粒度短语匹配,将是截然不同的搜索结果。

match:会首先把你输入的关键词进行切分后再检索。

match_phrase:会把你输入的词当做短语进行检索。

6、Elasticsearch 搜索体验可量化的指标

用户体验是感官反应,但感觉的搜索结果需要量化下。

如何量化?实际本质指标就是:查准率(精确率)、查全率(召回率)。

6.1 召回率

定义:本次搜索结果中包含的相关文档占整个集合中所有相关文档的比率。

衡量检索结果的查全率。

6.2 精确率

定义:本次搜索结果中相关文档所占的比例。

衡量检索结果的查准率。

具体可以根据混淆矩阵来理解,

相关 不相关 返回 真正例(tp) 伪正例(fp) 未返回 伪反例(fn) 真反例(tn)

已知上述矩阵,那么准确率和召回率可以按如下方法计算:

召回率:= tp / (tp + fn) * 100%;

精确率:= tp / (tp + fp) * 100%

如果还不好理解,知乎上通俗解释:

  • 召回率:正样本有多少被召回了(召回了多少)。

  • 精确率:你认为的正样本,有多少猜对了(猜的准确性如何)。

7 、如何改进 Elasticsearch 搜索体验

前面也提到了,搜索五环节环环相扣。 搜索体验是:设计、前端、后端、决策层、管理层都要考虑的事情 ,不能简单的理解为是技术问题。

本文仅对 Elasticsearch 后端技术实现层面做下解读:

7.1 根据业务场景选择合适的分词器

注意,没有最好的分词器、没有适合所有业务场景的通用分词器,需要结合业务场景择优选择。

  • 如果要求细粒度,只要存在就要召回,那 ngram 分词适合或者 7.9+ 新推出的 wildcard 数据类型优先考虑。

  • 需要提前做下切词对比,以验证不同分词器是否满足业务。中文选择:IK、结巴、ansj或者其他。

切词对比核心 API :analyzer 要活学活用。

POST _analyze
{
  "text":"提供全球卓越的云计算服务_助力企业无忧上云",
  "analyzer": "ik_smart"
}
  • 选型 IK,要区分:ik_smar 与 ik_max_word。

ik_smart是粗粒度的分词(返回尽可能少,逼近贴合人工分词);

ik_max_word是细粒度的分词(返回尽可能多)。

7.2 注意词典的选择与更新

“巧妇难为无米之炊“,“巧妇“是分词器,词典是“米”。

分词器再牛逼,没有靠谱的词典也是徒劳。

所以,词典选择的好,分词才会越准确。

建议:在基础词库相对全的前提下,需要结合业务场景添加属于自己的行业词库、领域词库等。

即便添加了行业、领域词典,也涵盖不全新词怎么办?

比如:新的网络词汇、行业领域词汇不能面面俱到导致分词不正确,用户体验差怎么办?

由于分词器作为插件,原始词典一旦配置,是不支持动态更新的,需要借助第三方机制实现。

比如:IK 词典的动态更新实现机制:结合修改 IK 分词器源码 + 动态更新 mysql 词条达到更新词典的目的。

7.3 重视 Mapping 环节数据建模

  • text 类型的 fielddata是内存耗费大户,除非必须,不建议开启。

  • 根据是否需要排序或者聚合决定是否启用 keyword 类型。

  • 不需要索引的字段,“index”设置为“false”。

  • 不需要存储的字段,“store”设置为“false”。

  • 大文本如 word,pdf 文本信息,考虑切分成小的片段后存储。

7.4 根据业务场景,选择合适的搜索类型

如前所述:match 和 match_phrase 适用场景不同、高下立判。

  • match应对的是:查全率高,召回率高但准确率低。

  • match_phrase则是:短语匹配,查准率高、召回率低。

  • wildcard 模糊匹配,除非必须,不建议使用。

当然,还有其他检索类型,如:query_string, fuzzy等,需要结合业务场景做出选择。

7.5 追求极致响应速度,要做取舍权衡

用户的忍耐时间非常有限, 不要让用户等。

  • 加大数据节点的内存和堆内存的配比

  • _source 字段非必要不返回

  • 不在检索返回阶段做复杂的业务处理

包含但不限于:

1)二重以上聚合

2)wildcard 或者 regex 正则检索

3)自定义高亮

  • 高亮实现根据业务类型做好选型

注意:当文件>1MB(大文件)时候,尤其适合   fvh  高亮 方式。

  • 做好业务取舍

比如:默认 from,size 深度分页10000条够了,如果产品经理不同意,需要讨论说服之。

比如:聚合结果不准确是 Elasticsearch 默认机制,要接受或者做其他方案选型(比如:clickhouse),不纠结细节。

7.6 使用智能推荐/匹配机制

  • 简单的搜索框推荐实现 可以借助:prefix 前缀搜索实现。

GET kibana_sample_data_ecommerce/_search
{
  "_source": "customer_full_name",
  "query": {
    "prefix": {
      "customer_full_name.keyword": "Ed"
    }
  }
}
  • 复杂点的推荐实现,需要辅助纠错功能的,借助:Suggester实现。

POST /blogs/_search
{
  "suggest": {
    "my-suggestion": {
      "text": "lucne rock",
      "term": {
        "suggest_mode": "missing",
        "field": "body"
      }
    }
  }
}

篇幅原因,关于 Suggester 解读,

推荐:wood大叔的文章:

https://elasticsearch.cn/article/142

  • 再复杂点的,需要用户行为识别+推荐引擎机制实现。

一个优秀的推荐引擎更趋向于个性化推荐,它可以通过收集用户有价值的数字足迹(如:人口统计、事务细节、交互日志、购买记录、交易记录、浏览记录)和关于产品的信息(例如:规格、用户反馈、与其他产品比较等),来完成推荐之前的数据分析。

8、小结

搜索体验决定用户体验,用户体验决定的产品的用户率进而决定的产品的成败。

著名产品人梁宁老师在《产品思维30讲》提到“我们看到很多新的互联网公司,系统能力不如传统企业,但是可以从传统企业那里抢夺大量用户,靠的就是用户体验。在体量差异这么大的情况下,用户体验能成为核心竞争力;同维度竞争的时候,用户体验更是最核心的竞争力”。

搜索是流量入口,是“兵家“(各APP、网站)用户体验必争之地。

搜索体验的迭代是没有终点的 ,研究的多深、做的多仔细都不为过。

大家有好的思路和建议也欢迎补充交流。

参考:

  • http://www.woshipm.com/ucd/1037490.html

  • https://zhuanlan.zhihu.com/p/60826371

  • https://www.jianshu.com/p/677742838595

  • http://www.chanpin100.com/article/103633

  • https://www.uisdc.com/search-experience-process-summary

  • http://www.oreilly.com.cn/radar/?p=28

  • 《自己动手做推荐引擎》

推荐:

干货 | Elasticsearch 开发实战常用命令清单

干货 | Elasticsearch开发人员最佳实战指南

Elasticsearch 开发运维实战核心 Tips

干货 | 论Elasticsearch数据建模的重要性

干货 | Elasticsearch 索引设计实战指南

干货 | Elasticsearch多表关联设计指南

fyQ3mqI.png!mobile

短时间 快习得 多干货!

中国 40%+ Elastic认证工程师出自于此!


Recommend

  • 25
    • 微信 mp.weixin.qq.com 3 years ago
    • Cache

    从编辑距离聊开去

    有这样一个问题:我们有两个字符串,前一个是 bears ,后一个是  barss ,问,在只允许 插入 字符、 删除 字符、 改变 字符三种操作方式的前提下,从后一个(字符)串变...

  • 3
    • kuricat.com 2 years ago
    • Cache

    从 程序员 的版权说开去

    给程序员的常用 开源许可 与 CC 许可 简明手册 从程序的版权说开去 有使用 GitHub 这一类代码仓库的同学想必都有接触过 License 这个名词, 在我们创建 开源项目 的时候, GitHub 会建议为我们的项目添加 License, 如果你和 kurisu 一样不太清楚...

  • 2
    • iphyer.github.io 2 years ago
    • Cache

    从Linux培训的一些话题引申开去

    9.28号参加在中科院雁栖湖校区举办的开源软件自由日活动,收获良多。特别是最后关于LPIC的演讲。主讲人(抱歉没记住名字)对于Linux的观点更加亲切和友好,不是常见的开源愤青但是对于Linux的热爱溢于言表。主要的演讲Topic是关于LPIC这个Linux水平认证考试的介绍...

  • 5
    • inote.xyz 2 years ago
    • Cache

    从美伊冲突说开去

    从美伊冲突说开去...

  • 1

    浅谈苹果的命名困局:从Pro、Air说开去 西方语境中,13 不是一个好数字,背叛耶稣基督的犹大,据信是最后的晚餐餐桌上第 13 个就座的人。于是,西方人不喜欢数字 13 的传统一直延续到今天,很少有人宴客会邀请 13 个人,12 或 14 人都可以,13 不行。

  • 6

    by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=10204 鑫空间-鑫生活 本文欢迎分享,欢迎转发,欢迎聚合,全文转载请联系授权。

  • 6
    • 微信 mp.weixin.qq.com 2 years ago
    • Cache

    从滴滴下架顺风车说开去

    从滴滴下架顺风车说开去 Original...

  • 2

    Sorry, your browser doesn't support embedded videos. 当前播放: 从人工智能算法聊开去 |InfoQ《极客有约》00:00 / 00:00 1.25x

  • 1

    创业有风险,我们都知道,但做创业公司的产品经理同样也有着各种难题。本文分析了创业公司产品经理可能会遇到的几种现状,并总结了2点做出改变的经验,希望对你有所启发。

  • 7

    抛开去中心化叙事,我们需要DAO的4个理由  •  16 小时前...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK