球友提问:怎么搜索才能使得结果是最好的呢? 我这边一个搜索功能,实现做法就是将用ik分词器配合multi查询实现的。 中途也追加了客户所在领域相关词汇字典。 但是客户一直反馈搜索体验不好。 如果想要提高搜索体验还能从那些方面入手呢? 来自:死磕 Elasticsearch 知识星球
这个问题非常有代表性,我在实际产品开发中也遇到过。
注意:我输入的是“触发器”,返回结果第一条没有问题,其他几条有关:“触”、“发”的,可以说和我的搜索没有关系。
站在用户体验的角度,我认为:体验很差,返回了很多不相关的数据。
如下所示,题库共1703题,包含:判断题、选择题。
只支持:点击:上一题、下一题。
实际场景:
这不是用户体验差,这是没有用户体验,开发者完全没有动脑子的设计,用户会"怀疑人生"。
放大查看图片,亮点自现
这是个见仁见智的问题,究竟返回什么,各个电商公司都有自己的评判。
但,单纯站在用户的角度,高下立判。
铭毅一句话点评:
“活该你发展快”,的确返回结果就是预期结果,且友好的推荐了所在地域的“秋裤”信息。
中规中矩,至少能返回“秋裤”。
没有找到商品,为你推荐“秋裤”,“干嘛推荐,直接返回不就完了”。
好家伙!推荐的都是“秋天”的商品。你是用户,你咋想?
......
基本上可以得出结论:公司发展速度和搜索体验成正比。
信息泛滥和爆炸的今天,搜索无处不在。基本可以形象的概括为:“有数据的地方,就有搜索“。
搜索可能是用户最常用到的功能之一,学习、工作、衣食住行等各个环节都离不开搜索。
输入关键词,搜索靠谱的免费或付费网络资源。
遇到错误码,通过Google 搜索获得答案。
搜索微信聊天记录,看看之前都聊的某个关键有价值信息。
网上购买衣服,实际就是搜索、选择的过程。
日常中午订外卖,选择外卖的过程,就是搜索的过程,离公司近+评价高=下单几率大。
出差订酒店,搜一下,对比选择个性价比高的。
十一自驾游,出行前高德导航,输入目的地搜索结果,根据返回结果,选择合适路线。
正如:搜索体验的分析文章指出:“搜索框的设计及其可用性问题其实是一个不容忽视的要点。
一个好的搜索体验也许并不能让用户对你的产品产生特别的好感,但是一个不好的搜索体验却能给你的产品带来致命的打击。
所以无论是为了给用户提供更好的服务,还是避免用户产生消极的体验感受,做好搜索的体验对一个内容型产品来说都是至关重要的。“
判定搜索体验好不好,搜索结果满足用户需求已是最低门槛要求,以下内容都是能带来良好搜索体验的考察点、用户关注点:
1)在视觉上突出搜索框、搜索框与放大镜icon配合使用;
2)将搜索框置于用户预期的位置;
3)提供搜索按钮;
4)合适的尺寸
毫不客气的说:“在导航栏最显眼位置放置搜索框是对用户最起码的尊重”!
智能推荐或匹配可以节省用户的输入成本。
普通用户不太善于组织搜索语言:在这种情况下如果他们没有在第一步就表达清楚问题,那么接下来也很难成功找到合适的搜索结果。
当智能匹配发挥作用后,它就能帮助用户表达清楚搜索的问题,进而找到满意的答案。
一句话,好的搜索体验就是好的用户体验,而好的用户体验自然和用户留存、甚至公司发展挂钩。
“搜索就像是用户与 App 或者网站之间的对话,用户通过提问表达信息需求,App 或者网站通过展示结果来作为回应。
用户期待流畅的搜索体验,并且基于搜索结果的质量用户通常会对一个 App 的价值形成一个快速的判断。”
在搜索的过程中,用户的经历大致可以分为五个部分,分别是:发现搜索、输入关键词、等待结果、查看结果、完成搜索,每个步骤的体验都是整体体验的一部分,将对用户最终对搜索体验产生影响。
如前所述,搜索框要醒目,搜索栏甚至会独立于头部并且会在UI界面中占据视觉焦点的位置,用户很容易就能找到。
若要完善用户体验,这几个步骤缺一不可、都得下功夫。
明白下面两个过程,就能很好的理解 Elasticsearch 搜索。
以下仅针对:text的全文检索的文本类型。
比如:“match”细粒度检索和“match_phrase”粗粒度短语匹配,将是截然不同的搜索结果。
match:会首先把你输入的关键词进行切分后再检索。
match_phrase:会把你输入的词当做短语进行检索。
用户体验是感官反应,但感觉的搜索结果需要量化下。
如何量化?实际本质指标就是:查准率(精确率)、查全率(召回率)。
定义:本次搜索结果中包含的相关文档占整个集合中所有相关文档的比率。
衡量检索结果的查全率。
定义:本次搜索结果中相关文档所占的比例。
衡量检索结果的查准率。
具体可以根据混淆矩阵来理解,
相关 | 不相关 | |
---|---|---|
返回 | 真正例(tp) | 伪正例(fp) |
未返回 | 伪反例(fn) | 真反例(tn) |
已知上述矩阵,那么准确率和召回率可以按如下方法计算:
召回率:= tp / (tp + fn) * 100%;
精确率:= tp / (tp + fp) * 100%
如果还不好理解,知乎上通俗解释:
前面也提到了,搜索五环节环环相扣。搜索体验是:设计、前端、后端、决策层、管理层都要考虑的事情,不能简单的理解为是技术问题。
本文仅对 Elasticsearch 后端技术实现层面做下解读:
注意,没有最好的分词器、没有适合所有业务场景的通用分词器,需要结合业务场景择优选择。
切词对比核心 API :analyzer 要活学活用。
POST _analyze
{
"text":"提供全球卓越的云计算服务_助力企业无忧上云",
"analyzer": "ik_smart"
}
ik_smart是粗粒度的分词(返回尽可能少,逼近贴合人工分词);
ik_max_word是细粒度的分词(返回尽可能多)。
“巧妇难为无米之炊“,“巧妇“是分词器,词典是“米”。
分词器再牛逼,没有靠谱的词典也是徒劳。
所以,词典选择的好,分词才会越准确。
建议:在基础词库相对全的前提下,需要结合业务场景添加属于自己的行业词库、领域词库等。
即便添加了行业、领域词典,也涵盖不全新词怎么办?
比如:新的网络词汇、行业领域词汇不能面面俱到导致分词不正确,用户体验差怎么办?
由于分词器作为插件,原始词典一旦配置,是不支持动态更新的,需要借助第三方机制实现。
比如:IK 词典的动态更新实现机制:结合修改 IK 分词器源码 + 动态更新 mysql 词条达到更新词典的目的。
如前所述:match 和 match_phrase 适用场景不同、高下立判。
当然,还有其他检索类型,如:query_string, fuzzy等,需要结合业务场景做出选择。
用户的忍耐时间非常有限, 不要让用户等。
包含但不限于:
1)二重以上聚合
2)wildcard 或者 regex 正则检索
3)自定义高亮
注意:当文件>1MB(大文件)时候,尤其适合 fvh 高亮方式。
比如:默认 from,size 深度分页10000条够了,如果产品经理不同意,需要讨论说服之。
比如:聚合结果不准确是 Elasticsearch 默认机制,要接受或者做其他方案选型(比如:clickhouse),不纠结细节。
GET kibana_sample_data_ecommerce/_search
{
"_source": "customer_full_name",
"query": {
"prefix": {
"customer_full_name.keyword": "Ed"
}
}
}
POST /blogs/_search
{
"suggest": {
"my-suggestion": {
"text": "lucne rock",
"term": {
"suggest_mode": "missing",
"field": "body"
}
}
}
}
篇幅原因,关于 Suggester 解读,
推荐:wood大叔的文章:
https://elasticsearch.cn/article/142
一个优秀的推荐引擎更趋向于个性化推荐,它可以通过收集用户有价值的数字足迹(如:人口统计、事务细节、交互日志、购买记录、交易记录、浏览记录)和关于产品的信息(例如:规格、用户反馈、与其他产品比较等),来完成推荐之前的数据分析。
搜索体验决定用户体验,用户体验决定的产品的用户率进而决定的产品的成败。
著名产品人梁宁老师在《产品思维30讲》提到“我们看到很多新的互联网公司,系统能力不如传统企业,但是可以从传统企业那里抢夺大量用户,靠的就是用户体验。在体量差异这么大的情况下,用户体验能成为核心竞争力;同维度竞争的时候,用户体验更是最核心的竞争力”。
搜索是流量入口,是“兵家“(各APP、网站)用户体验必争之地。
搜索体验的迭代是没有终点的,研究的多深、做的多仔细都不为过。
大家有好的思路和建议也欢迎补充交流。
参考:
本文分享自 铭毅天下Elasticsearch 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!