Algolia-博客中文翻译-一-

Algolia 博客中文翻译(一)

原文:Algolia Blog

协议:CC BY-NC-SA 4.0

由我们的开发人员构建的 10 大搜索生产力工具

原文:https://www.algolia.com/blog/engineering/10-great-productivity-tools-built-by-our-developers/

开发人员开发生产力工具不仅仅是他们工作的一部分,也是出于对游戏的热爱。游戏是减少他们(和他们的同事)必须做的任务数量,为构建优秀应用程序的更高要求扫清道路。他们在这些伟大的生产力工具背后的创造力来自于对重复性任务的本能厌恶。

比如说…

一位开发人员朋友最近向我坦白,她有时会很懒。“ 可耻地 懒惰,”她说。“而且我并不孤单。我以懒惰为职业。”

我不知道该如何回应。这是一个非常成功的技术奇才——一个技术论坛和活动的大师,在 Twitter 和 Github 上有大量的追随者——她告诉我她很懒。

“我有时会获得这种强大的能量,我可以移动高楼并创建很酷的程序,为我完成 繁琐的编程任务 。这样我就可以花更多的时间做我的实际工作——用耳机创建让世界其他地方的生活更轻松的应用程序。”

我开始明白了。“这种强大的 懒惰的 能量多久出现一次?”

“每天。我每天都写代码,为我执行一些小任务。我从不厌倦提出新的想法,并夜以继日地将它们变成现实。”

由此可见,开发者的心态。

在 Algolia,几乎每周都有一个团队成员带着一个让所有人惊叹的“业余”项目出现,并立即作为一个(有时是 开源)生产力工具 进入我们的日常生活。

他们告诉我们这很容易做到。我猜他们只是需要那一瞬间进入职业生涯 懒惰… 我的意思是,生产力。

他们为 windows、apple 和 android 开发桌面、web 和移动应用程序。他们的应用程序管理待办事项和工作流,改善任务管理。他们的代码利用 Slack、Google Chrome 扩展和社交媒体来发送通知、创建协作工具和自动化文档贡献。这样的例子不胜枚举。

但是让我们让他们告诉你这件事。这里是他们写的 10 篇博客,描述了他们最好的生产力工具和很酷的应用程序。

生产力应用和工具

我们在世界不同的地方有很多办公室,这意味着不同的时区,所以很容易感到失落,与彼此的日常生活脱节。我们想创造一些东西来“欺骗”距离,让人们感觉他们更像是属于一个公司。这个想法是利用我们办公室的电视屏幕来发布人们的生日、招聘纪念日、新员工、活动和聚会、候选人现场面试和职位空缺——集中展示公司一周的亮点。现在每个办公室都安装了屏幕!

通过 Slack 或电子邮件发送敏感信息是一种非常常见的做法,也是一个非常糟糕的想法。面临的挑战是创建一个更安全且易于使用的平台,以吸引更多人采用。在同事的帮助下,我造了一个自毁信使。

我想尽可能地自动化内部包裹交付流程,从扫描标签到通知员工延期交货。将 Algolia 的搜索引擎与 Google Vision 的 OCR API 相集成,我找到了一种更快、更简单、更可扩展的方式来帮助我们的办公室经理向不断增长的员工分发包裹。

生产力插件

我们决定构建一个 Algolia Netlify 插件 来自动索引搜索。我们的主要目标是在每次部署后触发我们的爬虫浏览网站,以构建一个随时可用的 Algolia 索引。其结果是一个 Netlify 插件,使得在您的 Netlify 网站上添加搜索变得容易,允许您只需几行代码就可以添加 Algolia 搜索体验。

自动化一切的愿望相当普遍,尤其是对开发人员而言:我为什么要浪费时间无数次地做同样的操作?这种愿望是 Atom 插件开发过程的基础:一种自动完成的搜索,只需敲几下键盘,就能快速从 NPM 导入包。

我和我的同事在想:Algolia 有一个 。NET API 客户端 和 Unity 支持 C#作为脚本语言——为什么不试着把它们结合在一起呢?我们的想法是在一个 Unity 游戏场景中实现“随你搜”的体验。我们决定创建一个市场,一个在游戏中搜索的常见用例。

CMS 通常没有搜索功能。自己在上面构建一个最简单的搜索功能都不容易,更不用说包含诸如允许输入错误和分面等重要功能的东西了。这就是我们的 Algolia 插件所做的事情:它在你的 CMS 上添加了一个灵活且功能丰富的搜索功能。

语音技术

我想用我的声音与世界互动。而且,我很想停止打字。我们创建了 Algolia Alexa 技能套件适配器, 一个小型 JavaScript 库,打算在Amazon Lambda上使用,它提供了集成 Alexa 和 Algolia 的工具,以及构建 Alexa 技能的框架。

如果没有搜索框,搜索界面会是什么样子?经过几周的探索,我创建了一个通过对话给出音乐建议的应用程序。我称之为“音乐学家”。这是我如何构建它的故事,希望给你一个想法,什么样的新搜索界面即将出现,以及你如何开始自己构建它们。

最后一点..

3 月 31 日,正好是愚人节,我们 宣布 我们的 CSS API 客户端 ,即复制了一个只有 CSS 的搜索引擎。虽然这只是愚人节的一个玩笑,但制作起来很有趣,在野外看到它也很有趣。警告:请不要在家或在生产中尝试这个!

开发者应该关注的 10 个影响者—

原文:https://www.algolia.com/blog/algolia/10-influencers-that-developers-should-be-following/

对个人和企业来说,时代都很艰难,所以每个人都在寻找灵感和新想法。这就是为什么我们收集了一份我们最喜欢的十位开发人员的名单,以帮助您了解新技术并最大限度地利用您当前的投资。无论你是刚毕业的学生还是经验丰富的专业人士,我们建议你花点时间浏览一下我们最喜欢的十个账户,看看谁可能会从你的每日订阅中消失。

  1. 杰森·伦斯托夫|@ jlengstorf 节目的主持人杰森·伦斯托夫每周两次,杰森带来一位专家嘉宾,在 90 分钟内就一项新技术、技能或概念进行现场讨论。通过观看他的节目,你可以了解一些关于开发人员社区的新东西,从开发人员社区,它总是远远超出了关于编程的简单讨论。关注他的 Twitter 帐户,了解最新的剧集,并查看 Jason 还有哪些热门故事可以分享!
  2. 侯赛因纳赛尔|@ hnasr
    侯赛因喜欢在他的推特账户上讨论开发的后端,在他的 YouTube 频道播客上也是如此!这是一个你应该跟随的开发人员,以真正深入软件工程的本质要素,无论你处于什么专业水平,都有大量的教育视频来帮助你继续开发。
  3. open processing|@ open processingOpenProcessing 是一个平台,编码人员可以聚集在一起探索生成艺术,进行教学并与其他人合作,并在一个无障碍的环境中根据自己的草图编码。这是一个很好的地方来看看这些艺术编码是怎么回事!
  4. 莎拉·达扬 | @frontstuff_io
    当然,我们很高兴地说,一些业内顶尖人才就在阿尔戈利亚工作!Sarah Dayan 是我们的软件工程师之一,专门负责构建开源前端库。无论她谈论的是开发者体验卓越还是电子商务创新,她的推文一定会让你满意。关注 Sarah,了解她正在从事的工作或她演讲的行业活动的最新动态——从 Jamstack London 到 DevCon 2022
  5. Kent c . Dodds|@ kentcdodds
    Kent c . Dodds 是一位教育家,特别关注前端软件开发。在他的网站上,你会发现他写的博客、他主持的远程研讨会、聊天和电话录音,以及报名参加帮助你提升开发水平的课程的机会。Kent 给出了关于软件开发的非常实用的建议,所以一定要关注他!
  6. 卡西迪·威廉姆斯|@卡西杜
    如果你喜欢你的开发者上下文中穿插着迷因,那就一定要把这位软件工程师加到你关注的账户中!卡西迪是首席技术官、创业顾问和投资人,也是开发者体验专家。她的账户会让你了解你应该关注的新公司的最新动态,她的新闻简报会让你了解网络开发的最新动态,还有一些有趣的帖子和迷因来点亮你的一天。
  7. Gergely Orosz|@ GergelyOrosz
    实用主义工程师时事通讯博客的作者,Gergely 是一个关注世界发展动态的人。凭借其多年的行业经验,Gergely 从自己的工作以及该领域的其他专家那里获得了宝贵的观点和深刻的见解。
  8. hacker noon|@ hacker noon
    不只是针对黑客!HackerNoon 是一个面向众多技术专家的博客,他们可以发布故事,分享他们在行业不同领域的专业知识,包括编码和网站开发。通过这个帐户,你会学到很多不同领域的技术。
  9. DEV 社区|@ the practical DEV
    软件开发人员聚集在 DEV 这样的论坛上,因为这是一个通过合作产生最佳创新的行业。跟随 DEV 帐户与该领域的其他专业人士建立联系,并为您的下一个项目寻找灵感!
  10. Sara Soueidan|@ SaraSoueidan
    最后,我们强烈推荐关注 Sara,她是一位经验丰富的设计工程师,致力于创造包容性的体验,并教导他人如何对可访问性进行深思熟虑和深思熟虑。Sara 的 Twitter feed 将让你第一个知道她在做什么,以及她对发展领域的一些最新趋势和主题的看法。

想要更多开发者资源?只需看看我们的 博客资源中心 就可以获得关于开发者和面向开发者的各种主题的文章、案例研究和视频!当然,一定要在 Twitter 上关注我们(@ algolia)。

我们的 Algolia 搜索和发现播放列表中的 10 首歌曲

原文:https://www.algolia.com/blog/algolia/10-songs-on-our-algolia-search-and-discovery-playlist/

自 2012 年以来,发生了很多事情。首先,尽管玛雅预言,世界并没有结束。恰恰相反,一个全新的搜索和发现世界诞生了。没错,Algolia 成立于 2012 年,也就是说今年是我们第十个 第 周年纪念日!

那么,我们该如何庆祝呢?我们可以像一个普通的 10 岁小孩一样,要一匹小马或一台 Xbox(实际上是 Algolia 的客户!).但那不是我们的速度。相反,我们以 10 个主题的博客系列回顾过去并展望未来,这些主题包括从预测到里程碑到播放列表等等。

先上?为了纪念 Algolia 十岁生日,我们以十首我们最喜爱的歌曲开始,致力于搜索、寻找、发现、寻找和发现事物,同时为您提供我们在这十年中开发的一些产品和服务的虚拟之旅。所以,坐下来,享受一些好的节拍和一些更好的阿尔戈利亚壮举。

** 《寻找》——玛丽·J·布里吉、罗伊·艾尔斯

以一首经典老歌的混音开始播放列表!当显而易见的答案就在你面前时,你有多频繁地在网上搜索、搜索、搜索?我们创立 Algolia 是为了完成一个简单的 使命 :创造快速、相关、个性化的搜索和发现体验。客户不应该在一个商业网站上感到失落或沮丧——尤其是当我们能够实现一个几乎能读懂你的想法的 API 解决方案的时候!

** 《发现你》——杰西·麦卡尼

当你发现杰西·麦卡尼最新的果酱时,你也可以 发现 我们提供的一些产品,这些产品已被证明可以提高 UX,促进参与,增加收入,并在你的网站上推动更好的发现。

** 《探索者》——多莉·帕顿

多莉总是说得最好。我们不都是网上的寻求者吗?无论你是在寻找一个特定的产品,还是花费你的朝九晚五时间寻找更多关于如何创建强大的搜索和发现体验的一般知识,我们都提供了大量的 培训 来帮助你开始。

  • “我一直在寻找的”——沙佩&瑞恩

我们什么时候找到了我们一直在寻找的东西?当我们 收购了 Search.io 及其矢量搜索引擎!我们现在支持市场上第一个也是唯一一个 API 优先的平台,该平台结合了关键字、语义和图像搜索,以闪电般的速度、定制的高度相关的结果真正革新了搜索体验。

** 《寻找爱情》——阿肯

有时搜索会提供你真正想要的东西,但不是你想要的。就像“爱”很难描述,但是当你看到它的时候你就知道了。类似地,语义搜索超越了文字描述,提供了你想要的东西。Search.io 的 Neuralsearch 正在帮助我们 将语义搜索 带到新的高度。

** “我还是没有找到我要找的”——U2

当你搜索了两个小时,购物车还是空的,这种感觉——但这不会发生在使用 Algolia 的网站上。我们的解决方案能够克服用户经常面临的搜索结果泛滥的一种方式是通过我们的 动态重新排序 ,这提高了最佳搜索结果。我们还能以极快的速度处理物品,因此您不会被晾在一边。

** “为什么爱情这么难找?”–杰西·麦卡尼

这是杰西的世界,我们只是生活在其中。说到难找,你知道吗,近 60%的在线搜索都是在移动设备上进行的。你可能没有看到电子商务增长的一个原因是,你没有像桌面网站一样投资于移动搜索体验——这是现代景观中的一个大疏忽,可能会使消费者很难找到他们需要的东西!别担心,Algolia 同时优化了移动和网络搜索。

  • 《直到我找到你》——斯蒂芬·桑切斯

你可能会迷失在黑暗中,直到你找到一个真正提升你的 UX 的搜索和发现工具,并为你的组织的整体发展铺平道路!如果你不相信我们, 从我们的客户和用例中获取灵感

** 《搜索并摧毁》——弗洛伦丝以及机器乐队

我们更多地从事搜索和发现业务,但我们也非常喜欢这张朋克摇滚经典的封面!无论您在寻找什么,我们都拥有应对各种挑战的专业知识,涵盖 行业和解决方案 。准备好摧毁竞争了吗?

** 《最伟大的发现》——埃尔顿·约翰

你有过的最伟大的发现是什么?在 Algolia,我们为成为这一领域的开拓者而自豪,但我们也一直为发现优秀人才和建立文化第一的公司而自豪。我们关心与我们一起工作的人,我们为其提供解决方案的客户,以及我们对社会的积极影响。虽然我们优先考虑技术进步,但同样重要的是确保作为一家公司,我们 回馈 并支持我们的员工和周围社区。

作为我们领先的 API 优先搜索和发现平台背后的人,Algolians 是一切搜索和发现的忠实粉丝。但是,我们也是音乐迷!这很自然地引导我们去寻找所有与搜索和发现相关的音乐,所以你不需要这么做!😉调进播放列表 这里

当然,如果你想进一步了解我们的产品、服务或音乐品味,你可以联系我们的专家团队!********

显示 Algolia 为何在搜索领域处于领先地位的 10 个统计数据

原文:https://www.algolia.com/blog/algolia/10-stats-that-show-why-algolia-is-the-leader-in-search/

电子商务网站可以拥有 数百万 的 SKU。 这是好事!这意味着零售商和市场努力为每个人提供一些东西。但是,您的零售公司如何确保客户能够轻松找到他们想要的产品,并让您的在线体验脱颖而出呢?

帮助应对这一挑战是我们的超能力。从一开始,我们就是市场领先的 API 优先的搜索和发现平台。我们努力让客户更容易解决问题,虽然这听起来有些天真,但我们相信我们已经在化繁为简的艺术上取得了巨大的进步。当然,当你和其他人一起评估 Algolia 时,你需要的不仅仅是我的观点来说服你的团队哪个解决方案是最好的。【剧透:数字说明一切】。

让我们直奔主题吧。以下十个统计数据显示了为什么 Algolia 在搜索和发现领域处于领先地位:

  1. 382%的投资回报率——弗雷斯特研究公司 , 一家独立客观的研究型咨询集团,享有相当可观的声誉,在这份 总体经济影响报告 中,计算出 382%为 Algolia 的平台能够提供的平均投资回报率。
  2. **每秒 5 万次搜索请求—**Algolia 平台每秒支持 5 万次搜索,相当于每周 300 亿次搜索请求,每年 1.75 万亿次。即使在黑色星期五和网络星期一也不会出汗。如果你一直在追踪,这比微软必应、雅虎、百度、Yandex 和 DuckDuckGo 加起来还多四倍! 阿果搜索 为赢。
  3. **相关性提高 40%到 50%—**我们的算法驱动结果。我们喜欢让想要的物品浮出水面。Algolia 的 排名算法 提高了搜索结果的相关性,实测增幅为 40%至 50%,尤其是移动客户。
  4. 160 万美元的存款-被这些数字搞糊涂了?准备掉脑袋吧。数据显示,零售商明白搜索和 无头架构 的价值。零售商未来在搜索技术上的投资需要集中在与无头架构兼容的解决方案上。Algolia 的平台实现了向可组合或 无头架构 的过渡,并简化了数字体验开发,为我们的 17,000 名客户平均节省了 160 万美元(更多信息请见下文!).里程会有所不同,但我们相信您会看到不同。以至于我们有了一个 自由无栅级
  5. 从近一年到 6 个月(或更短)的上线**–**我们给你时间回去关注重要的事情。有了 Algolia,通常需要近一年时间的大型开发项目现在可以在不到 6 个月的时间内完成。通过自动化节省的时间解放了采购员,使他们能够从事其他活动来推动销售——一家零售商指出,他们将人工干预从五天减少到了一天。想象一下,当您可以在几周内开始交付重要的转化时,您可以获得的收入,而不是使用您当前的平台需要几个月。在当今的经济形势下,每一天都很重要!
  6. **$ 120 万美元的收入增长—**金钱万能,我们倾听。通过使用 Algolia 的推荐,一个由 客户 组成的复合组能够推动 120 万美元的收入增长。这就是 Forrester 的全部内容,现在,我想你必须阅读 的完整报告。
  7. 1-20 毫秒**–**大多数 Algolia 搜索查询需要 1-20 毫秒。这比我们的竞争对手快 200 倍。所以…可以肯定地说,我们的 API 优先平台支持极快的速度。这是至关重要的,因为 80%的消费者认为速度是积极的客户体验的重要因素(谷歌也根据这个速度对你的网站进行排名)。
  8. 55%的零售商**–**假日购物季刚刚过去, 55%的零售商 认识到更有效的竞争能力是投资搜索的首要原因之一。重要的是,这些公司在下一个假期之前意识到这一点,并确定 转化客户的新方式 。尤其是像 专家 项目认为通货膨胀将进一步抑制支出。
  9. **零售同行评审—Gartner Group 发布了一份同行洞察报告,梳理了 Algolia 在零售领域的所有特性和功能。与同行相比,Algolia 在可扩展性、集成和定制方面排名最高。一家价值 5 亿美元的零售公司 1B 评论说 Algolia 有大量关于部署&集成的文档。因此,基本实现是一个简单的过程。更复杂/更高级的实施阶段&集成有很大的主观性——尽管 Algolia 团队在所有阶段都很有帮助,但更详细的文档会更有用。查看完整报告
    *** 17,000 多名客户
    统计数据说明了一切,但也许没有比我们的客户更多的了。从电子商务到 SaaS,从政府到媒体,各行各业超过 17000 家大大小小的企业已经在 Algolia 安家。 他们的故事 显示了巨大的独创性和创新的动力,这使他们来到了阿尔戈利亚。我们已经为他们建立了 search&discovery——也许有一天你也会有

**搜索和发现不仅仅是一个提供一页搜索结果的搜索框。这是关于提供即时满足感,并帮助消费者在发现新的和相关的东西时找到快乐。它是关于在很短的时间内从任何互动中产生最大的收益。这是为了减少摩擦。当你在几毫秒内展示了一个人正在寻找的东西,你就创造了满足感。这转化为他们对你的品牌的期望和信任。

十年前,当 Algolia 成立时,有一个简单但富有挑战性的愿景:创造极快、即时且相关的搜索和发现体验。

想了解更多有关搜索&发现如何让您的组织受益的信息吗?碰上一些神奇的阿洛利亚专家为 现场演示 。**

关于安全性的 10 个问题

原文:https://www.algolia.com/blog/product/10-things-to-ask-your-search-provider-about-security/

早在 20 世纪 80 年代,美国的旅游者播放了 行李箱广告 大猩猩在行李箱中折腾,以展示他们的产品有多结实。产品设计师在面对严重的猴子(实际上是猿……)业务时,在确保弹性方面做得相当好。我喜欢这个比喻,因为它对于软件来说没有太大的不同。类似地,工程师设计的 SaaS 应用程序可以处理各种滥用——暴力攻击、数据泄露、网络钓鱼等等。

安全性是指保护数据、公司知识产权、品牌声誉等。在全球范围内,一次数据泄露的平均成本为435 万美元。许多软件购买者没有知识、资源或洞察力来了解什么是安全最佳实践,因此安全问题通常只在购买周期的末尾出现。我们认为,从一开始就考虑购买任何软件都要考虑安全性,这是一个好方法。

如果你正在评估搜索提供商(或任何 SaaS 产品),这里有 10 个问题,你可能想从了解他们的安全实践开始。

1。你在设计搜索软件时会做哪些考虑?

安全需要成为发展规划过程的一部分,而不是事后的想法。我们很幸运有一个专门的安全团队,与我们的工程师和产品经理一起审查产品架构和相关的基础设施。该团队的工作是确保从各种可能的来源和数据中心流入产品的数据(产品目录、面向支持的解决方案、内部分析、转换事件)使用现代加密技术和最高合规标准进行安全传输和存储。我们还努力保持透明度。例如,自 2017 年以来,我们与 云安全联盟 合作,不断对我们的团队进行最高安全标准的培训和认证,并与trust arc合作,以确保数据隐私。安全性需要从第一天就设计到软件中。

2。我的数据存储在哪里(以及如何存储)?

数据存储在本地还是云中?谁在监视您的数据,它是如何得到保护的?Algolia 是一家 100%托管解决方案提供商。我们在全球各大洲的 70 多个数据中心的裸机服务器上托管数据。客户可以选择在完全由微软 Azure 或 AWS 管理的 EU-或美国数据中心运行 Algolia。数据在传输过程中会被加密(AES-256),客户还可以选择使用每台服务器管理的密钥和Algolia Vault对其“静态”数据进行加密。我们的数据中心受到持续的监控、管理和测试:

  • 我们仅将它们保存在 PCI-DSS、ISO27001 和/或 SOC2 认证的数据中心
  • 我们用几种漏洞扫描工具持续测试它们
  • 可靠、独立的第三方每年对它们进行两次笔测试
  • 我们有一个永久的 bug 赏金 程序运行
  • 所有日志被发送到一个 SIEM 解决方案进行扫描和即时报告
  • 所有服务器都运行着由专业 SOC 团队监管的 EDR
  • 我们正在开发新的工具来监视他们,有一个专门的团队
  • 我们正在审查每一项新功能,以确保它不会产生新的弱点

3。你的软件符合标准吗?

所有公司都必须遵守国际和/或当地法律。或者,他们的客户只愿意与服务符合严格标准的供应商合作。我们有 17,000 多个客户,来自政府、公司、医疗企业等,他们都有严格的要求,我们特意设计了我们的服务,以便在许多公共和私人使用案例中工作。今天,阿尔戈利亚遵从…

  • ISO27001
  • ISO27017
  • BSI C5
  • HIPAA
  • GDPR
  • CPRA
  • SOC 2 类型 2
  • SOC 3

4。数据是如何管理的?

你的数据就是你的。因此,您将希望与提供商合作,他们会极其小心地管理您的数据,使其不会丢失或泄露。我们的服务不会跟踪您的客户,他们的身份仍在您的控制之下。我们有一个安全的多租户架构,全天候监控,以防止客户之间的数据泄露,并持续监控 API 访问。我们设计的 高可用服务 具有冗余和备份,这使我们能够提供 99.99%(以及更高)的可靠性。

5。如果出现数据泄露会发生什么?

与您交谈的提供商是否为最坏的情况做好了准备,如果是,如何做?当然,我们会尽一切努力确保这种情况不会发生,包括对我们的服务进行半年一次的独立渗透测试。但是,如果发生这种情况,我们将迅速确定原因,了解哪些数据(如果有)已经受损,在 24 小时内联系受影响的客户,并尽快解决问题。

6。你提供什么保证?

服务中断可能有多种原因——云提供商中断、客户超出自己的使用量、当地 ISP 问题等。云供应商如何保证他们的服务可以千差万别。但是,如果问题与 Algolia 有关,我们的 Algolia 服务水平协议(SLA) 涵盖标准和高级计划,并保证报酬。如果我们未能达到我们为自己设定的标准,客户有资格获得积分。

7。发现产品漏洞后会发生什么?

企业级软件由数以千计的组件构建而成——开源的和专有的——通常带有不同功能的微服务。如此复杂系统的编排并非没有风险;随着新漏洞的发现,很多事情都可能出错。我们尽了很大努力来获得最好的安全性。例如,在一个 OpenSSL HeartBleed 漏洞 被披露后,我们只用了几个小时就修复了它。我们正在执行定期的独立渗透测试,并在 HackerOne 上有一个 公共漏洞奖励计划 ,帮助我们确保持续的安全性。

8。如果您决定终止订阅,您的公司数据会发生什么变化?

随着您需求的变化,您可能需要更换提供商。当你离开时,你的数据会发生什么变化?当然,我们会尽一切努力留住您,但我们知道这并不总是可能的。在 Algolia,我们根据订阅协议保留信息。我们也可以根据需要在合理的时间内保留和使用某些个人信息,以追求我们的合法商业利益、进行审计、履行我们的法律义务、解决争议等等。在我们的 隐私政策 中,你会发现所有这些都清楚明了。

9。谁有权访问数据和系统?

了解谁在进出以及数据何时在传输中非常重要。安全是 Algolia 和我们客户的共同责任。一方面,我们尽我们所能锁定访问,另一方面,我们要求我们的客户负责任地管理访问。例如,我们控制对基础设施的访问,并提供安全 API 密钥管理、2FA 和应用程序权限级别等功能。我们还实施最新的最佳实践,以确保您的数据安全可靠,并与其他 Algolia 用户的数据相隔离。然而,我们的客户同样有责任遵循安全最佳实践,管理他们的用户的访问和权限,并保持他们的管理 API 密钥的秘密和隐藏。通过作为一个团队来管理访问,我们可以一起更加安全。客户同意的服务条款阐明了他们对管理访问和信息共享的期望。

10。您的员工如何处理安全问题?

安全不仅仅由安全团队管理。组织中的每个人都应该意识到风险和责任。当每个人都意识到可能的风险和回报时,我们可以提供更安全、更可靠的服务。在 Algolia,新员工入职后在进入任何系统之前都会接受培训,而且每个人每年都必须通过一次安全测试。我们的 IT 团队还对公司拥有的设备进行管理保护,确保设备和应用程序是最新的。我们在 Slack 中有一个共享的安全通道,可以报告事故、问题,或者只是提问;说到安全,没有愚蠢的问题!

当然,我们的安全政策还有更多的内容。最重要的是,当你调查一个提供商的安全措施时,寻找透明度。对于一个不透明的提供商来说,更有可能的是,他们混淆了一些重要的东西。

这里有一些额外的资源,可以帮助您了解更多关于 Algolia 的安全知识。

10 种方法知道它是假的人工智能搜索

原文:https://www.algolia.com/blog/ai/10-ways-to-know-its-fake-ai-search/

你认为你的搜索引擎真的是人工智能驱动的吗?嗯,也许是…也许不是。

这里有一个肮脏的行业秘密:一些公司实际上外包了这个问题。在幕后,人们手动编写规则并调整结果,使其看起来像是语义搜索。它看起来像人工智能搜索,他们称之为人工智能搜索,但它不是真正的人工智能。

真正的人工智能理解自然语言和查询背后的意图。它就像 ChatGPT,但它是根据你的数据训练的,所以它不会提供不正确或误导的结果。此外,它看起来像真正的搜索—一个结果列表和过滤器,帮助您找到您想要的东西。幕后是机器学习算法,可以自动解锁性能,改善搜索结果,并显著减少您配置搜索结果所需的工作量。毕竟,如果搜索引擎能够理解用户的意图,那么你需要做的就少多了。

那么,如何才能知道是不是真正的语义搜索呢?这就是本指南可以提供帮助的地方。我们是来区分造假者和制造者的!你知道这是假的 AI 搜索当……

1。你是 还是 添加同义词

有了人工智能搜索,你唯一需要添加同义词的时候就是那些对你的企业来说完全独特的术语。您不需要为常用词汇创建同义词。如果需要添加同义词,那是因为幕后还是关键词搜索,不是 AI。哦,请注意,对于你添加的每一个同义词,在长尾理论中有几十个你不知道的,如果你有真正的语义搜索,它们会自动工作!

2。在其他语言中不起作用

为什么你的语义搜索对英语很有效,但是你的法语、日语和德语网站表现不佳?矢量搜索技术适用于任何语言。事实上,你可以将语义搜索技术用于非结构化数据,比如图像、音频、视频,而且效果非常好。如果它在其他语言中表现不佳,它可能不是真正的语义搜索。

3。常见错别字失败

基于向量的搜索处理常见的打字错误,所以如果你的搜索引擎仍然混淆“真空”的意思是“真空”,这很可能是假的人工智能。

4。你对 还是 关键词进行优化

你是否借鉴了 1998 年左右 SEO 的关键词填充策略来确保你的站内搜索有效?那你很可能没有用 AI 搜索。语义搜索向量理解单词的意思,所以你不必执行关键字填充或其他不自然的搜索引擎行为。

5。长尾搜索很差

许多公司遵循 80/20 帕累托原则,只优化他们网站上热门查询的结果。优化底部的 80%(长尾),低频搜索太耗费时间了,对吗?嗯……如果你有真正的人工智能来提高你所有的长尾内容的站点搜索性能,那就一点都不耗时了。

6。描述性和基于问题的搜索不起作用

当访问者搜索“买得起的礼服鞋”或“头痛药”时,你的搜索引擎可能会讨厌它像这样的搜索混淆了简单的基于关键字的搜索引擎。真正的基于人工智能的引擎自动理解这些查询以返回正确的值。

7。你在 还在 写大量的纠正规则

保证你的客户得到好的搜索结果的最好方法是写几百条自定义的纠错,或者 相关性 ,规则,对吗?例如,您可能需要添加一个规则,向搜索引擎解释“usb-c”、“usbc”和“usb c”是相同的东西。或者说“礼服衬衫”是指一件花哨的衬衫,而不是一件连衣裙。有了真正的 AI 搜索,相关性规则就成了过去式。

8。他们称之为“可解释的人工智能”

人工智能通常被称为“黑匣子”或“不透明”,因为预测算法可能令人费解。因此,如果一家公司可以告诉你他们的人工智能是如何得出一个结果的,这可能是一个警告标志。人工智能模型天生极其复杂,在推理过程中经常包括数百万甚至数十亿个数据点。通常,它们是无法解释的。如果他们声称他们是可解释的,他们需要能够通过打开黑盒来支持这种说法,并显示使用了哪个模型,以及结果是如何得出的。

9。是音盲

用真正的语义搜索,你应该能搜索到“一台不烂的电视”或者“一杯帮我解暑的茶”。在英语中,这两个术语都是常见的俚语,传达一种感觉或语气。只有关键字的搜索引擎将会完全失败,但是语义搜索引擎将会理解不同语言的许多常用短语中使用的情感。

10。即使底层数据质量很差,它仍然可以工作

正如《哈佛商业评论》 所说,“糟糕的数据质量是机器学习广泛、有利可图的使用的头号敌人。”仅仅因为语义搜索非常聪明,并不意味着它可以理解网站糟糕的结构、混乱的元数据或肮脏的格式。一个真正的人工智能搜索供应商可能需要与你合作,以确保你的网站数据是机器学习发挥其魔力的最佳选择。

准备真正的、端到端的 AI 搜索?

我们的组合关键字和人工智能支持的语义搜索解决方案即将推出。它包括端到端的人工智能,包括前端的自然语言处理(NLP),人工智能驱动的 检索,以及动态重新排名,根据您网站的数据自动重新排名结果。

不可思议的结果,明显更少的努力,没有烟雾弹。注册,有空时通知

提高电子商务转化率的 12 个技巧

原文:https://www.algolia.com/blog/ecommerce/12-tips-to-increase-ecommerce-conversion-rates/

网上零售是。然而,平均电子商务转换率仍然徘徊在 2-3% 左右,竞争比以往任何时候都更加激烈——从夫妻店直运商到资金雄厚的大型零售商——网站访问者很有可能会放弃你的商店而选择竞争对手。

你平均有 15 秒 的时间在客户离开你的电子商务网站之前留住他们。 大约 30% 的访问者会使用你的搜索栏找到他们要找的东西,其余的会浏览你的网站。

游客不能购买他们找不到的产品。你可能正好有买家想要的东西,但是他们可能拼错了或者不知道该找哪一类。或者他们只是不知道他们要找的东西的确切名称或描述。

  • 如何尽快找到合适的产品?

  • 如何针对多个品类和产品线优化用户旅程?

  • 面对成百上千的产品,您从哪里开始?

  • 在有限的资源和有限的时间内,你能完成多少?

现场搜索和发现进行转化率优化

在本指南中,我们将主要关注两件提高现场电子商务转化率的事情: 搜索发现 。当有人登陆你的网站后,这是关键的几秒钟。

通过 搜索 ,我们指的是你网站上的搜索框。当用户在查询中键入“queenmatressfitted bed sheet sale”(50%的查询 有三个或更多的关键字,并且在 之间的某个地方,10-25%的搜索 被拼错)时,他们会得到好的结果吗?

发现 指用户如何按类别或集合浏览网站。你应该先展示最畅销、最高价还是特价商品?畅销商品缺货怎么办?个性化从何而来?智能分类和排序对于访问者是转变还是反弹有很大的影响。

搜索和发现是一枚硬币的两面。支持智能搜索的技术也可以支持智能分类。

让我们来深入了解一下。

电商转化率定义

转化率简单来说就是你的网站上买东西的访问者的百分比。如果你的网站有 100 个访客,有一个人买了东西,你的转化率是 1%。

根据 BigCommerce, 跨行业平均转化率 为 1 ~ 2%,2%应该是基准线目标。

虽然本文将重点关注访问者登陆您的网站后的现场漏斗中间转化优化,但请记住,还有场外因素,如广告、季节性、竞争对手活动、广泛的消费者趋势、推荐营销等。,可以在不增加交易率的情况下增加网站的访问量。

search conversion rates

Google Analytics via on客户旅程映射

网上买家的用户旅程

一个访问者来到你的网站。现在发生了什么?

现场搜索和发现从了解用户旅程开始,帮助您发现改善搜索和产品发现体验的机会。这里有一些方法可以让你深入了解客户的旅程:

  • 热图和游客回放

分析学

无论你是在使用谷歌分析还是其他分析工具,这都是一个很好的起点。打开 GA 中的行为下拉列表,分析您站点的以下统计:

  • 访问与站点搜索,%搜索退出,以及%搜索改进 报告:大量的站点搜索意味着用户依赖你的搜索栏来完成工作。那很好。然而,如果这三个指标都很高,这可能意味着用户找不到他们想要的东西。这是你网站搜索质量的一个危险信号。

  • 目标完成 报告 : 简单明了地告诉我们,网站搜索是否有助于推动目标完成。如果你的搜索框做得很好,让它更突出,以鼓励更多的访问者搜索。( 来源 )

  • 行为流报告 :寻找行为之间的落点和共性之类的趋势——网站访客登陆哪些页面,接下来会去哪里?你可以划分不同的用户类型(例如,新用户和老用户)来发现人们是如何访问你的网站的。

热图和访客回放工具

hot jarfull story这样的热点映射和访客回放产品可以向你展示人们如何浏览你的网站,何时放弃网站,他们如何与产品页面互动,他们在每个页面上滚动多远,以及他们点击了什么。

人们是直接去搜索栏还是点击他们看到的第一张产品图片?一次旅行不会揭示太多,但通过几十或几百次记录,你会开始看到趋势并发现需要改进的地方。

用户旅程映射

search journey mapping

形象经由 苦旅

了解访客行为和决策的综合方法是构建用户旅程图。旅行地图从用户开始,而不是你的网站。定义一个人物角色(例如,两个孩子的 45 岁母亲),并从用户决定寻找产品的那一刻起一直跟踪到购买。

进行旅程规划练习的一大优势是,您的整个团队都参与进来,共同构建见解,并作为一个团队掌控旅程。作为一个团队,你会发现不足和机会,然后优先考虑和计划目标和关键交付物,以弥补任何不足。

关于旅程地图的内容足够填满多本指南。如果您有兴趣了解更多信息,请查看ShopifyQualtrics关于电子商务旅程地图的文章。

神秘顾客

神秘购物者以改善实体店运营而闻名,但他们也可以受雇进行在线商务评估。你可以雇佣在线神秘购物者来完成一项任务,比如“访问网站,以低于 25 美元的价格购买最好的园艺用品”,并收集他们的体验反馈。

雇佣神秘顾客是一个完整的行业。与专门的神秘购物公司合作的优势是他们在打造购物体验和收集可操作情报方面的深厚知识和专业技能。

然而,如果你已经知道该问什么以及如何设计问题,你甚至可以去 usertesting.com 直接雇人,听听购物者在浏览网页时在做什么。

无论你选择使用分析、热图和访客回放、旅行地图、神秘购物者,还是以上所有方式,你都会有一些好主意,知道应该关注哪些方面来改善产品发现体验。

改善电子商务现场搜索和发现的 12 种方法

T14T16

以下是一些通过激活机器学习、动态刻面、即时索引等功能来改善访客体验的方法,以提供更好、更智能的结果,实现更一致的转换。

使用 AI 获得高质量结果

在 2019 年和 2022 年,“面具”意味着完全不同的东西。在新冠肺炎之前,搜索“面膜”的买家可能是在寻找化妆产品。随着疫情的出现,这一切都变了。

为每个可能的排列手动调整目录是不切实际的。商家需要自动化来根据消费者行为的变化实时调整结果。这里的关键是机器学习。

机器学习提高了你的电子商务商店根据用户搜索 和购买 的内容自动调整搜索结果的能力。

一个智能的搜索引擎应该知道用户何时转换(注册、加入购物车、购买或其他)来为将来的查询和页面浏览增加类似的结果。

机器学习 已经不是什么稀罕物了。是必备的,尤其是很多产品的网店。搜索引擎可以使用 强化学习 对搜索结果和用户行为进行评分,以随着时间的推移自动改进结果。

(如果你正在寻找机器学习的解决方案,有一点需要注意,人工智能或人工智能这两个术语可以与机器学习互换使用。)

实现更好的过滤器和刻面

研究从 尼尔森和 诺曼已经证实了分面搜索的必要性;当用户面对太多的选择时,他们会忽略他们正在寻找的产品,而去别的地方。方面已经成为网上购物的一个组成部分,可以更快地过滤结果。

允许你的客户根据价格、颜色、评分或其他因素过滤结果是至关重要的——尤其是对于拥有成百上千种产品的网站。您的电子商务搜索和发现平台应该支持搜索结果中的搜索方面和过滤器 和集合页面上的 ,以帮助客户缩小结果范围,找到他们真正需要的东西。

搜索面和过滤器有什么区别?简而言之:

  • 过滤器 通常不会随着搜索的不同而改变

  • 刻面 根据搜索结果中产品的属性而变化

facets

创建丰富的过滤器和方面可能看起来很难,但幸运的是,现代搜索解决方案将使指定和实现它们的任务在几分钟内完成。根据您使用的工具,过滤器和方面可以根据您的产品属性自动生成。

同样值得注意的是,过滤器和方面不仅在搜索结果页面上有用,它们还可以用于类别和收藏页面,以快速缩小结果范围。

连接实时数据搜索成功

点击率(CTR)等参与度指标为微调结果提供了一些价值,但签约、注册或销售等转化指标最终为企业提供了更多价值。

当你将搜索结果与转化率联系起来,并加入机器学习时,你就可以建立一个正反馈循环,从而获得成功。

如果一个访问者搜索一个项目,点击一个产品结果,并购买它,你的搜索解决方案应该建立“啊哈”连接,以自动优先排序相似的搜索结果。

它也可以在分类页面上工作;如果客户不断购买顶部的第三个项目,集合可以重新排列页面上项目的优先级。

通过即时索引和更新获得结果

当您直接在 CMS 中或通过产品库存管理系统(PIM)向您的在线商店添加或编辑产品时,更新定价、更改库存等。,它应该会立即反映在您的搜索索引中。

不幸的是,对于许多搜索引擎来说,这些日常变化可能需要 24 小时或更长时间才能更新。这太长了,可能会伤害转换。

许多解决方案宣传接近实时或快速的索引,但通常这意味着只有 初始 索引是快速的(取决于您的目录大小,这可能需要几秒或几分钟)。找到一个提供快速产品信息索引的解决方案。它还应该为产品目录的添加、编辑、更新、删除等提供快速更新功能。,所以你永远不会失去一个机会。

提升类目和收藏建议

你想把最畅销、最受欢迎的商品推到你的分类或收藏页面的顶端。通常,类别和收藏可以按价格、评级、受欢迎程度和其他过滤器进行排序。

这太棒了,但更好的是能够根据商业标准智能地推广产品的规则。

一些例子:

  • 您可能想要创建智能规则,按照最畅销、最高评级和特价商品来显示收藏

  • 为每位顾客设定个性化产品的规则(更多个性化信息见下文)

  • 热门内容也一直在变化,因此规则可以具体到为“过去 7 天该类别中最畅销的项目”排列列表的优先级

用于发现的商品销售

实体店零售商可以设立展示区,鼓励潜在顾客往购物车里添加更多商品。这些商家有很好的机会进行销售或增加订单价值,因为买家可以看到大量的产品选择。

对于电子商务来说,这要复杂得多。如果买家想买返校背包,你如何让他们了解铅笔、活页夹甚至童鞋?

对于大多数在线企业来说,搜索营销很难。传统上,这需要大量的手动工作或一个使用数据科学的工程师团队来发现推广相关产品或显示“您可能也感兴趣”的最佳时间。

好消息是,你可以使用现代的现场搜索解决方案来提高转化率,而不需要投资一个全职的搜索工程团队。使用数据,较新的电子商务平台可以智能地将相关商品插入搜索结果,以提供销售体验。可以根据以这种方式推广产品

  • 个性化:过去的购买历史、性别、年龄等。

  • 有相似购买习惯的顾客

  • 基于类似的竞争对手产品

  • 或您指定的其他数据和规则

融入实时库存系统

不要让你的客户因为缺货而放弃你的网站,或者卖给他们一件你无法完成的商品。推荐让他们保持参与的选项。

低库存或脱销商品可以自动降级或从搜索结果或收藏页面中隐藏。

相反,高库存或补货商品可以在搜索结果或收藏页面中增加。这两种情况都需要一个可以连接到库存管理系统的搜索和发现系统。您应该能够根据库存水平设置规则来包含/排除或增加/隐藏项目。

个性化并提升内容可见性

如果你知道顾客过去曾购买过耐克鞋,在他们下次光顾时,你可以推荐更多的耐克产品。个性化的使用可以极大地改善用户体验和转化率。

BigCommerce 发现个性化可以降低 20-30%的跳出率。(典型的零售网站跳出率约为 30-55%)

内置个性化功能和/或连接到 第三方个性化解决方案 应该是您的必备技术。个性化为单个访问者创建上下文配置文件,以便您可以提供自定义的相关搜索结果和显示内容。基于用户偏好、位置、性别、过去购买历史、产品类别等对结果进行个性化设置。

【使用自然语言处理】

nlp natural language processing

研究显示 三分之一的搜索包含 4+或更多关键词。在站点搜索的上下文中,NLP 是分析查询以推断结构和含义的过程。在这种情况下,结构指的是高度定义的信息,例如类别或数字。它还可以表示事物之间的关系。常见的例子包括大小、颜色、地点、名称、时间、实体和意图,但还有更多。

如果用户键入“低轮廓床垫床单”或“大号床垫床单”,您的搜索引擎需要解析这些信息以返回高质量的结果。电子商务网站使用 NLP 会影响你的品牌认知、用户体验和转化率。

错别字容忍和自动补全

对于电子商务搜索来说,一个不可见且经常被忽视的 UI 元素是如何处理打字错误和拼写错误。某处 之间 20-30%的搜索词 可能包含一个拼写错误!

有几种不同的方法来处理错别字和拼写错误。一个好的网站搜索和发现工具会给你提供选择,包括添加“你的意思是?”搜索结果页面中的结果和/或允许输入错误的自动完成。

对某些味道使用错别字容错是一种最佳实践。不要失去那些认为你不卖“bakcpacks”或“addidas”的顾客。

页面加载时间

亚马逊向 展示了返回结果中仅仅 0.001 秒的差异就意味着巨大的损失。您的搜索工具或搜索提供商的加载时间应该以毫秒为单位。

A/B 测试提升搜索

对于一个给定的查询,如果你改变了搜索结果会怎样?你的点击率、转化率、销售额或用户满意度会更好还是更差?A/B 测试可以用数据帮助回答这个问题。

测试可以在任何东西上进行,从产品术语,到你的数据如何被索引,到搜索结果的设计。一个现代的搜索解决方案应该允许搜索 A/B 测试,并根据你建立的任何标准,就什么样的搜索算法帮助你的公司改善其底线结果提供指导。

ab testing

增加电子商务转化率的奖励提示

我们已经讨论了搜索和发现,但让我们来看看其他一些改善购物者体验的现场机会。这里有一些关于网站可用性和用户体验的额外提示。

结账流程

减少结账过程中的摩擦可以提高转化率。这包括 UX 的变化,如隐藏结帐页面上的附加字段,除非客户需要它们,例如,如果送货地址和帐单地址相同,就没有必要同时显示它们。结账(无双关语) 其他提示 摘自 Rejoiner 关于改善结账顾客体验的文章。

购物车报废

以平均 近 70%的购物车废弃率 ,难怪商家要花时间优化他们的购物车 UX。关于58%的时间,网购者仅仅是浏览,但那另外 42%应该是为了成功而优化。例如,同一项研究显示,20%的购物者因为设计相关的问题而放弃购物车。这方面的改进,如为客户提供查看订单总成本的方式或提前显示信用卡支付选项,可以积极提高销售额和转换率,并避免可怕的废弃购物车。

文案

提供最低的价格、最快的运输或最好的客户服务肯定能提高转化率,但你的竞争对手也能做到。为了脱颖而出,考虑你的产品描述。Moz 解释了公司如何通过更好的文案 使转化率翻倍。更好的产品文案可以增加你的产品的情调和紧迫感,帮助你的公司脱颖而出。

移动友好型客户体验

桌面用户以 更高的速率 进行转换,但是移动用户以 大约相同的速率 向他们的购物车添加商品。如今,在线零售网站的移动流量高达50%。我们上面推荐的所有搜索和发现改进——设置规则、网站速度、即时索引等。—将适用于移动设备和台式机,但零售商需要特别注意为移动设备打造出色的 UX。

社交证明和社交媒体

人们想买别人喜欢的产品:92%的潜在买家 在考虑购买时阅读顾客评论 和评价。让顾客评论更加可见,添加带计数器的社交分享按钮,甚至 显示实时购买 都可以帮助提高转化率。

文档索引

易贝研究 发表了一篇论文 显示“视觉形象是向网上购物者传达关键信息并影响他们选择的强大渠道。”除了在你的产品页面上包括更多的图片(和/或产品视频)之外,研究人员还发现使用更大的照片可以让潜在客户更容易地检查产品的细节。这反过来增加了人们购买该产品的可能性。( 来源 )

CTAs

您在产品和登录页面上的行动号召(CTA)很重要。某些短语——立即购买、免费加入、加入购物车——已被证明比其他短语更有效。大多数零售商已经在使用这些短语了。但是也有其他因素可以改善你的 CTA,包括移动优化、颜色、页面位置等等。查看 GrowCode 的完整文章 了解更多想法。

SEO

在帮助数以百计的客户安装搜索工具后,我们了解到的最清楚的一点是,大多数网站搜索工具并没有以最佳方式工作,主要是因为元信息不足或网站结构定义不佳。你所做的改善站内搜索的工作也是你需要做好搜索引擎优化(SEO)来吸引访问者访问你的网站。优化的网站结构、元标签、标题、规范等。,对站内搜索和网络搜索引擎都有帮助。整本书都在讲述如何通过搜索引擎优化来为你的网站吸引新客户,但是要想成为一本好的入门书,可以看看 Ahref 的 电子商务搜索引擎优化指南

结论

大多数电子商务平台,如 Shopify、Magento、WooCommerce 和 BigCommerce,都有非常好的设计,用于管理支付、库存和退货的良好工具,以及与大量其他系统的集成。

由于各种原因,‍But 帮助访问者找到他们想要的东西仍然非常困难,尤其是对于有很多产品、类别和收藏的网站。好消息是,新的电子商务搜索和发现平台可以有所帮助。特别是,机器学习的进步使得智能交付产品结果以及自动订购和提升产品以提高转化率变得更加容易。

通过爬虫或 API 改善搜索索引的 12 种方法

原文:https://www.algolia.com/blog/engineering/12-ways-to-improve-your-search-index/

开始新业务时,搜索索引通常是我们与客户讨论的第一个话题。无论是大型企业级网站还是小型电子商务商店,向网站添加搜索的第一步是通过网站爬虫或 API 索引您的内容。站点的架构、模式和内容都会影响索引。

在这篇文章中,我们将涉及许多我们与客户讨论的话题,并分享一些改进搜索索引的实用技巧。

注意:这不是一篇关于 SEO 的文章。虽然 站内搜索优化和 SEO 是相关的——你为站内搜索优化搜索索引的工作也有助于谷歌搜索或必应的可见性——它们满足不同的需求。搜索引擎优化是面向互联网的可见性,而现场搜索解决用户体验。然而,XML 站点地图、内部链接、元标签等。,你为一个人创造会帮助另一个人!

什么是搜索索引?

一个 搜索索引 帮助用户在一个网站上快速找到信息。它旨在将搜索查询映射到网页、文档或其他站点内容。这类似于一本书的索引。它允许用户使用关键字快速找到有用的信息,但与书籍相比有许多技术优势,例如帮助访问者更快地找到他们想要的东西。搜索索引既可以通过网络爬虫创建,也可以通过 API 访问创建,但两者在不同的情况下都有各自的优势。

什么是全文搜索?

全文搜索需要索引你网站上的每一个词,以使搜索引擎在许多记录中导航变得容易。传统上,全文搜索引擎使用“倒排索引”,实质上是文档中所有关键字以及这些关键字位置的映射。

full text search

在上面的例子中,关键词“便携”和“声音”不在索引中,但是一个人工智能支持的搜索引擎理解上下文来提供很好的结果。

人工智能支持的搜索引擎现在可以超越关键词来理解上下文,以提供更丰富的结果。以查询“便携音”为例。如果基于关键字的搜索引擎在索引中具有术语“便携式”和“扬声器”,则结果页面可能包括正确的项目。通过机器学习,即使关键词不在网站上,你也可以通过检测上下文和单词之间的相似性来获得好的结果。例如,机器可以学习“便携”一词与“手持”、“移动”、“电话”相似,都是在含义上接近的*,但不一定是同义的 。*

搜索爬虫和 API

构建搜索引擎索引有两种主要方式——搜索爬虫或通过 API 直接从数据库中提取数据。每种方法对不同的情况都有好处。

举例来说,对于大多数静态网站,一个 爬虫 就可以了。又快又全面。 API 驱动的索引 是拥有动态或不断变化的数据的网站的理想选择。API 有自己的优势,比如快速添加新数据源的能力。

什么是快速索引?

当您添加新内容或更改现有内容时,您希望结果可以实时搜索。 快速索引 是零售商和品牌销售新产品或发起活动的必备。有时,当我们的客户在快速索引方面遇到问题时,通常是由于这样的问题:

  • 由于复杂的 API 架构问题,内容索引速度不够快
  • 内容在索引中,但不在结果中显示
  • PDF 和 DOC 文件无法索引

大多数问题都可以相对较快地解决。首先要做的是检查爬虫如何看待你的网站文档,或者你的数据管道是否阻塞。使用 sitemap.xml 文件帮助爬虫总是一个好的实践,可以帮助你的内容快速地被索引。如果你通过 API 索引你的站点,很可能有一个需要解决的集成问题。

为了帮助完成这一切,并简化索引过程,我们提供了多种编程语言的 API 客户端、帮助您可视化索引和爬行过程的仪表板,以及以各种方便的方式与 API 交互的 CLI 工具。

12 种方法优化和丰富你的搜索索引

无论你是使用搜索爬虫还是通过 API 连接你的站点,都有很多方法来配置和改进搜索索引。下面的实际建议直接来自我们经常与通过爬虫或 API 构建索引的客户的对话。其中一些方法更适合基于爬虫的索引,另一些与 API 索引相关,还有一些两者都相关。

这里有 12 种方法可以优化你的搜索索引

1。打开图形元数据

脸书在 2010 年发布了他们的 开放图协议 ,从那以后它被搜索引擎广泛使用。搜索结果通常包括图像预览,通常由 Open Graph 提供支持。

通过在你的内容中添加开放图形标签,你可以用如下信息来改进搜索索引:

  • 带有内容类型的标题
  • 图片和网址
  • 添加额外的打开图形数据

除了标题、描述和图片之外,Open Graph 还可以使用大量其他数据来丰富搜索索引,但许多人不知道或不使用它们。更多信息,请访问https://ogp.me/

2。Schema.org 格式

Open Graph 只是丰富 web 和搜索引擎索引数据的几个开放协议之一。有不同种类的模式可以用来标记页面内容。例如,如果你是一个食谱网站,你将有不同的标准来标记内容,比如说,一个活动网站。

Schema.org 为不同类型的网站发布和维护不同的模式词汇表。例如,对于音乐会、讲座或节日等活动,可以通过 HTML(或 JSON-LD)格式的标记添加票务信息,如offers属性。重复的事件可以被构造为单独的事件对象。

3。文章发布和修改次数

文章发布和文章修改日期/时间对于能够按新近度对内容进行排序是非常重要的。开放图形或 schema.org 格式都支持时间戳。

| | 文章:发布时间–日期时间–文章首次发布的时间。 |
| | 文章:修改时间–日期时间–文章上次修改的时间。 |

4。识别页眉和页脚内容

各种各样的内容,比如你的导航,页脚,以及任何不特定于页面的内容,都应该放在页眉和页脚标签中,这样搜索引擎就会忽略它。通过标记页眉和页脚的内容,您可以让搜索引擎更好地理解页面的内容,从而可以正确地对其进行索引—在这种情况下,是导航数据与正文数据。

5。增加您的搜索索引

搜索索引可以通过多种方式增加数据,例如:

  • 通过 Google Vision API 添加颜色元数据
  • 使用第三方数据,如产品评级
  • 提取输入数据,用于创建过滤器和面

随着新信息添加到索引中,数据可能会增强。搜索引擎利用这些数据来提供更好的结果,让消费者更容易、更快地找到他们想要的东西。电子商务网站经常定期更新它们的项目,并且丰富的数据可以在更新期间被合并。

6。经营业绩数据

你的索引多于你的内容。非现场数据,如产品等级、利润、库存水平等。,对于搜索索引来说非常有用,有助于结果排名。可能有许多产品与搜索您网站的客户相关,但您的业务数据可以用来增强结果,以确保最好的产品被推到顶部。我们提供 自定义排名助推 ,帮助客户利用这类业务数据构建转换飞轮。

7。营销和活动数据

许多零售商进行季度、季节或假日销售。通过向站点索引添加销售和活动数据,您可以调整结果以显示销售项目。

您可以添加特定的销售字段或使用折扣字段来计算何时有销售。在后一种情况下,搜索引擎将知道你的展示价格低于你的常规价格,这有助于对打折商品进行排序,以帮助访问者找到最佳的节省。然后,您还可以使用一种算法(通过我们的 排名公式 )根据不同商品的销售状况或其他属性对其进行提升。

merchandising

搜索索引应包括可用于构建过滤器和方面的字段和数据

8。过滤器

可以使用您的搜索索引构建搜索过滤器和方面。我们可以自动推断和创建过滤器(例如,使用 查询分类 ),但是您也可以在需要时设计定制过滤器。决定提供最佳过滤器的关键在于了解您的客户以及他们希望如何分割您的产品。查看我们关于 过滤器和刻面 的指南,了解更多信息。

9。内容类型

有不同的元标签可以帮助搜索索引按类型理解内容。内容会把访问者带到视频、文档、页面或其他地方吗?使用 HTML 或 JSON-LD 标签将您的内容标识为视频、音频、摘要等。,帮助您的搜索索引按类型对内容进行排序或筛选。

10。个性化

客户期望 ,希望搜索结果个性化。如果你为会员提供免费送货,这些信息应该在数据中。如果有按位置的折扣,那么您也会希望在记录中包含地理数据。通过将您的搜索索引连接到这些数据,您可以轻松地对搜索结果进行个性化设置。

11。与其他第三方系统集成

大型企业通常拥有复杂的基础设施,数据来自不同的系统。需要将 的数据 与你的供应链管理或者PIM整合吗?您将希望您的搜索解决方案支持一个 API 来实现系统间的即时数据索引。

十二。查看您的分析和搜索指标

网站所有者应该计划花一些时间审查他们的 分析和搜索指标 ,以确定客户正在查询的关键词。了解客户如何搜索有助于发现丰富索引、添加或调整过滤器以及改进搜索引擎结果的机会。

一切都是为了索引伟大的内容

构建丰富的搜索索引可以极大地提高搜索性能和客户满意度。通过了解可以包含的不同类型的数据,网站所有者可以确保他们为客户提供最佳的搜索体验。

要了解更多关于如何设置您的搜索索引或利用我们的个性化和定制排名功能, 今天就联系我们 !我们提供了一个 免费试用版演示版 ,以便您可以探索我们的解决方案所能提供的一切。

电子商务现场搜索的 15 个最佳实践

原文:https://www.algolia.com/blog/ecommerce/15-best-practices-for-ecommerce-on-site-search/

网页顶部的搜索栏会对你公司的成功产生巨大的影响。

很可能你以前读过这个数据——大约有 40%的访问者会在登陆一个电子商务网站时使用现场搜索,转化率是非搜索者的近两倍,并占 13% 更多收入。随着电子商务网站的转化率介于2-3%之间,搜索技术可以提供额外的竞争优势,将你的转化率推得更高。

我们已经分析了我们自己的客户搜索账户的分数,并在网上搜索,以找到很好的 电子商务搜索 的例子。虽然没有一个放之四海而皆准的方法,但是有一些通用的原则可以让站点搜索成功。

在这篇博客中,我们将分享 15 个提高转化率的在线零售网站搜索最佳实践和范例。

如何衡量电子商务搜索的影响

你今天的收入中有百分之多少来自网站搜索?在你优化你的网站搜索之前,最好从一个基准开始。

Google Analytics 和其他分析平台有报告来衡量执行网站搜索查询的客户与不执行网站搜索查询的客户产生的收入。

google analytics

Image via OptimizeSmart showing on-site search tracking via GA4.

Google Analytics 中的搜索报告确定了访问者登陆你的网站后在寻找什么。该报告有助于显示访问者正在搜索的搜索词以及这些搜索的参与度。然而,现在,我们最感兴趣的是网站收入中包含网站搜索的比例。这是我们希望通过搜索优化来影响的数字。

现在你已经有了基准,是时候改善用户的搜索体验了。

电子商务搜索的 15 个最佳实践(附实例)

贝玛研究所已经发布了 145(!)电子商务搜索和产品过滤器指南。您可以在 性能指标评测页面 上了解它们的概况。

进入主题的一个稍微简单的方法是我们下面的 15 个最佳实践列表。这些最佳实践与 Baymard 的 UX 功能列表有相当多的重叠,例如搜索自动完成、结果布局、搜索功能、产品缩略图、产品过滤器、产品页面等等。

1。让搜索更加可见

site search example

Search is practically hidden on this site.

good example of site search

The search bar is clearly displayed.

无论是 永远化妆 还是 自行车仓库 都在他们的网站上有搜索,许多类别和收藏可以指导游客的购买之旅。但是,自行车仓库的搜索栏的可见性要高得多。

能见度有什么不同?它会对搜索和网站性能产生很大的影响。

当一家公司 让他们的现场搜索更加可见

  • 网站搜索量攀升 439%
  • 当访问者使用搜索时,他们在网站上停留的时间增加了 110%
  • 页面浏览量增加了 45%
  • 目标完成量增加了 242%

扩大搜索栏是一个简单的网站更新,但是会对网站性能产生巨大的影响。

2。错字公差

autocomplete and typo tolerance

PackageFree offers search with autocomplete suggestions with spelling correction.

对于电子商务搜索来说,一个不可见且经常被忽视的 UI 元素是如何处理打字错误和拼写错误。介于 之间的 20-30%的搜索查询 可能包含一个拼写错误!你不想失去客户,因为他们拼错了查询,却得到一个“没有结果”的回应页面。

有几种不同的方法来管理搜索错别字和拼写错误。一个好的网站搜索工具会给你提供选择,包括添加“你的意思是?”搜索结果页面中的结果和/或允许输入错误的自动完成。

使用某些口味的 错别字容差 是避免失去认为你没有“bakcpacks”或“addidas”的顾客的最佳做法

3。智能营销——适时推广相关内容

购物者是直观的。店内销售——无论是在过道还是在收银台——都是鼓励购物者在购物车中多加一件商品的基本做法。

在线零售商的日子更难过了。你需要平衡让购物者先找到他们想要的东西。然后,您需要确定何时以及如何展示其他产品,以及展示哪些相关产品。

search personalization

Chewy uses product data, sales data, and personalization to improve merchandising.

在这里我们可以看到【Chewy.com让我们可以很容易地找到相关商品——这些商品可能是畅销书、更高利润或个性化结果的组合。

search personalization

将商品添加到购物车后,它们也会提供类似的结果。

明智的做法是在两个位置提供相关商品,以便在顾客选择去的任何地方抓住 销售 机会,并且可以设计成不引人注目,不干扰购买体验。还有许多解决方案可以帮助优化相关项目,包括我们自己的 Algolia 推荐的

4。NLP

如果用户在你鞋店的搜索栏中输入“红色篮球耐克鞋 14 号”,搜索引擎需要解析这些信息以返回高质量的结果。电子商务网站使用【NLP】可以影响你的品牌认知、用户体验和转化率。

NLP

我在 FootLocker.com 的上搜索“红色篮球耐克 14 码”。乍一看,他们的网站似乎没有解析查询。

search example

然后我从零开始重新开始了我的访问。这次我没有使用搜索栏。相反,我通过点击男子篮球鞋和过滤排序来浏览他们的网站。实际上有很多结果!我点击进入这些结果中的每一个,一些与大小 14 的股票。换句话说,这些产品 应该 已经出现在我的第一次搜索中。

NLP example 2

如果访问者只使用搜索,他们可能已经放弃了网站,而没有意识到有更多的产品可用。

相比之下,Zappos 在类似的搜索方面做得非常好。我将“鞋”添加到搜索短语中,因为 Zappos 还销售其他服装。

NLP example 3

像“14 号红色篮球鞋”这样的复杂搜索变得越来越常见。研究表明, 三分之一的 所有搜索包含 4+或更多关键词。

在网站搜索的背景下,自然语言处理(NLP)分析查询以推断结构和含义。在这种情况下,结构指的是高度定义的信息,例如类别或数字。它还可以表示事物之间的关系。常见的例子包括大小、颜色、地点、名称、时间、实体和意图,但还有更多。

投资支持自然语言处理的搜索解决方案是电子商务提供商的最佳实践,有助于确保访问者获得相关搜索结果,从而快速找到合适的产品。

5。过滤器和刻面

穆塞乔 应该为他们的一长串滤镜和刻面获奖。这让我想起了电影 飞机 中的一个场景——名单似乎永远排不完。多肯定比少或没有好。

filters example

And these are only some of the facets displayed on a Moosejaw on-site search.

我们来简单解释一下一些术语。说到搜索,其实有两种滤镜:

  • Facets :这些是根据搜索而变化的动态列表。在这种情况下,搜索的是“jacket ”,显示的方面不同于您在其他搜索中找到的方面,如“boots”或其他项目。
  • 滤镜 :滤镜一般不变;不管你搜索的是什么产品,这都是一个静态列表。

更多关于 刻面和滤镜的区别这里

如果你有一个拥有成百上千商品的大型商店,为每个产品类别设计面和过滤器是不切实际的。过滤器的诀窍是在索引时根据产品元数据动态生成它们。

例如,Algolia 客户可以简单地将任何 HTML 元素包装在特殊的过滤器标签中,以告诉应用程序存储元素的属性。然后,这些属性可以用来创建过滤器和可在查询中搜索的方面。

刻面的另一个选择是使用 查询分类 ,可以对信息进行分类,自动生成过滤器和刻面。

分面搜索对于帮助客户缩小搜索结果范围,准确找到他们想要的东西非常有价值。为站点搜索创建的相同方面和过滤器也可以用于静态或动态目录或集合页面。

6。个性化

个性化是关于提高搜索相关性以促进转化。当已知用户搜索你的网站时,搜索功能应该提供 个性化结果——用户更有可能购买的特定产品。

个性化的使用可以极大地改善用户体验和转化率。BigCommerce 发现,个性化可以将跳出率降低多达20-30%。(典型的零售网站跳出率在 30-55%左右)。

在一项 麦肯锡研究 中,100%的顶级四分之一零售商表示,个性化是他们的五大优先事项,但只有 15%的零售商跨渠道实施了个性化。

amazon recommendations

Amazon incorporates personalization throughout the shopping experience.

亚马逊因在他们的平台上建立个性化而闻名。如【HBR】:

“该公司有效地创造了一种数字营销的新模式:与客户的一对一关系,通过数据收集提供信息,通过机器学习进行优化,并通过其他形式的人工智能进行培育。”

这位《HBR》的作者接着问道:“一个离线玩家如何……希望赶上来?”

亚马逊有一千多名工程师在研究这个问题!无论你是离线玩家还是在线玩家,这项任务似乎都令人生畏。

好消息是,有了 Algolia 或其他第三方个性化解决方案,你不再需要一大群搜索工程师。

无论您选择哪种解决方案,数据都是关键。在遵守数据隐私法的情况下,您收集的数据越多越好。一旦收集了数据,每次查询都会使用这些数据来修改结果,使之与个人更加相关。这可以简单到衣服尺寸偏好、性别、地点或任何其他可能影响其结果和行为的个人特征。

通常,个性化的第一阶段是通过查询发送信息,以便用其他分析工具记录。然后可以离线分析性能影响,以确定这是否有用,或者您甚至可以 A/B 测试有无个性化的结果。

通常,查询可以与个人信息分层,以增加和影响查询,从而产生高度个性化的结果。

7。移动搜索

mobile search example

For mobile users, Untuckit offers a custom responsive search design.

2019 年 Q1,智能手机占全球零售网站访问量的65%。然而,移动优化搜索具有挑战性。响应式设计不是简单地调整几个物体的大小,而是考虑到整个购买者的旅程。

这里有一个很棒的例子:【Untuckit】很好地构建了一个手机友好的网站,在屏幕的正上方有一个容易找到的搜索按钮。它们提供了一个方便的常用过滤器下拉菜单和一个附加过滤器按钮。当我输入时,搜索栏显示自动建议的结果。

8。同义词

search synonyms

A search synonym like t-shirt and tee shirt should return almost identical results.

你的顾客是在寻找 t 恤还是 t 恤?如果你的搜索框只识别一种拼写,你就会错过机会。使用同义词来创建术语词典是健康网站搜索的最佳实践。

相关的术语也应该是一样的。例如,衬衫、上衣、衬衫或运动衫将包含重叠的项目,条纹衬衫、条纹上衣或布列塔尼等术语也是如此。在这种情况下,“top”是一个包括衬衫或布列塔尼服装的类别,但它本身也可以用作搜索词。

今天,像这样的搜索依赖于好的标题、产品描述和元数据。很快,电子商务搜索引擎将提供 基于向量的搜索 ,它使用数学方法来理解单词及其含义,以提供更相关的结果。

9。带有产品缩略图和价格预览的即时搜索

instant search example

Fantastic instant search on HannaAnderson.com.

HannaAnderson.com提供了一个即时搜索的高手。下面是上面截图中发生的事情:

  • 当您键入时,结果和缩略图会立即更新
  • 显示“你是说”拼写检查功能
  • 显示相关收藏(如复活节商店)
  • 列出物品价格

对于购物者来说, 像这样的即时搜索 是赢家,因为它太直观了。像自动建议(或 自动完成 )一样,即时搜索会在您键入时显示结果,但也包括缩略图。此外,展示价格是帮助购物者快速找到他们想要的东西的好方法。

顺便说一下:HannaAnderson 搜索在移动设备上也很好用(我查过了)。

出于某种原因,大多数在线商店要么没有在即时搜索上投入时间——他们仍然要求人们在输入查询后在键盘上点击“回车”——要么只提供有限的结果显示。我们的 电子商务网站搜索产品 和许多其他产品现在提供一些即时搜索的现成味道,因此任何公司都可以在几分钟内建立丰富的体验。

10。与转换相关的机器学习

dynamic re-ranking

Dynamic re-ranking capabilities, such as shown above in Algolia, allow anyone to tweak the search algorithm to improve search results using conversion data.

众所周知,谷歌根据搜索活动来改善网络搜索结果。如果你点击一个结果,访问一个网站,然后立即返回到搜索结果,谷歌知道你刚才点击的结果是一个糟糕的匹配。随着时间的推移,它会调整和完善算法,将更好的结果提升到页面的顶部。

如今,新的网站搜索引擎拥有类似的功能,可以将搜索与电子商务转化率联系起来。他们可以根据点击和转化(购物车活动、购买、结账、折价或者任何你认为成功的东西)来区分好的结果和坏的结果,从而提供更好的结果来提高你的转化率。

例如,“面具”在 2019 年和 2023 年的含义完全不同。在新冠肺炎之前,正在寻找面膜的买家可能正在寻找美容护肤品。随着疫情的出现,这一切都变了。带有 强化学习 的搜索平台会自动开始根据转化率调整结果。

作为最佳实践,你也应该能够调整输入。您可能希望将搜索结果调整为利润更高的项目或结果之上的个性化层。

11。使搜索可视化

视觉搜索,有时被称为 视觉购物 ,对于营销人员设计现场搜索和开发 SEO(搜索引擎优化)策略变得越来越重要。

人的大脑有一半以上是专门用于视觉和视觉的 处理,而对大多数买家来说 图像比文字 更重要。

Image via SmartInsights, images are more important than text.

可视化结果应该出现在即时搜索结果和你的结果页面上。视觉搜索还有其他用例,包括增强现实(AR)。就连Snapchat都用针对 AR 优化的视觉搜索钻进了游戏。

visual search

Abel & Cole delivers search results that fits beautifully with their website design and brand, both in instant search and on the search results page.

12。A/B 测试

在一个经典的网站 A/B 测试中,你可能会划分流量,以确定哪种变化——蓝色或绿色的行动号召按钮——转化得更好。通过测试搜索结果设计或搜索数据本身,您可以对站点搜索结果做同样的事情。

这里有几个你可以测试的例子

  • 个性化对比常规结果
  • 畅销商品 vs 最高评价商品
  • 新品 vs 打折商品
  • 不同的产品类别
  • 过去 7 天与所有时间的最畅销商品

13。阿达和 WCAG 可用性

可以合理地假设,你网站的大量访问者——多达五分之一——将是残疾人。这可能是从色盲这样的视觉障碍到诵读困难这样的认知障碍。

在一项研究中,多达71%的残疾人因为糟糕的体验而从他们正在购物的网站上弹回。

对于这样的障碍,你的网站需要仔细考虑颜色对比、动画和过渡等方面,并提供适当的替代方案。网站搜索,无论是你的搜索结果登陆页,还是对拼错单词的错别字容忍度,都是一样的。

ADA and WCAG search example

对于搜索栏,一些注意事项包括:

  • 将搜索栏定位在可预测的位置(通常是顶部中间或顶部右侧)
  • 使用可区分的颜色
  • 在搜索放大镜图标上使用 alt-text

同样,对于搜索结果,一些考虑因素包括:

  • 允许用户使用键盘浏览结果
  • 屏幕阅读器的状态消息
  • 带有图像的搜索结果

你可以在我们关于 网页内容无障碍指南(WCAG)和美国残疾人法案(ADA)数字标准的长文上阅读更多建议,并搜索

14。整个网站搜索—不仅仅是你的产品

无论某人是在寻找产品还是退货政策等问题的答案,网站搜索都应该提供出色的用户体验。无论你选择什么样的搜索解决方案,都应该能够提供搜索结果,并且最好能够对这些结果进行分类,以便于浏览。

site search example

Art.com indexes their entire site, including non-product page results.

15。搜索指标

你的网站搜索提供商应该提供内置的 搜索分析 来帮助你了解趋势、无效搜索(比如 没有结果 )以及需要改进的地方。

search analytics dashboard example

Metrics to analyze product search data.

搜索量是整体流量的一个很好的指标,它告诉你有多少人在你的网站上使用搜索。点击率帮助你了解你的搜索有多有效,你是否有正确的内容。

热门搜索和意想不到的趋势显示了用户的意图。这是一个需要关注的重要列表。如果人们的兴趣变了,热门搜索的列表也会变。这是一个很好的迹象,表明你可能需要在你的网站上添加额外的内容,或者在你的电子商务商店里储备新产品。

关于遗漏内容、查询术语和每次搜索次数的报告可以帮助你发现改进网站搜索的机会。

下一步:电子商务网站搜索解决方案

我们在上面展示了大量信息。尝试做每一件事似乎令人畏缩。

最终,您希望为每个查询提供最相关的结果和最佳用户体验,这需要特性和功能的结合。

好消息是,许多现代电子商务搜索平台提供许多(如果不是全部)上述功能。

网站搜索关键绩效指标的主要发现—2020 年数字商务 360 度调查

原文:https://www.algolia.com/blog/ecommerce/2020-survey-site-search-kpis/

我们第二次与 Digital Commerce 360 合作,调查零售商关于网站搜索对收入和关键绩效指标(如转换率)的影响(上次调查的结果是此处是)。

我们要求 108 名受访者将他们的搜索分为高级、中级或初级。当调查结果出来时,最有趣的发现就是围绕着这种分裂。

网站搜索提高转化率——如果做对了

我们都知道网站搜索是电子商务购物之旅的重要组成部分。正如我们的一位客户所说:

搜索是第一印象的重要指标。关键是要为你的客户提供他们想要的服务。

—Nicholas Maupin,安德玛全球电子商务产品经理

但今年的调查显示,拥有基本网站搜索的零售公司可能会失去有价值的客户,而高级网站搜索如果做得好,会增加转化率和收入。

也许最惊人的结果是,投资于高级搜索功能的零售商的转化率提高了 50%:

impact of search maturity on site search KPIs

这一切都始于 KPI

虽然只有 14%的受访者投资于高级搜索,但他们也是最擅长将人员、策略和专用资源投入到网站搜索中的人,也是获益最多的人。

以下是调查中让高级零售商脱颖而出的一些要点:

  • 为商业利益相关者提供管理网站搜索的工具和资源。最了解消费者行为的团队成员获得了监控和优化网站搜索所需的工具,而不是要求忙碌的 IT 团队做出改变。

  • 投资于网站搜索功能和策略。最有效的网站搜索体验不仅仅是速度和相关性,它还包括个性化、过滤和分析等功能。
  • 定义有意义的站点搜索 KPI。毫不奇怪,拥有高级网站搜索能力的企业最有可能已经确定了他们想要遵循的指标:高度发达的电子商务 KPI 包括那些衡量网站搜索的指标

要了解更多关于零售商如何通过搜索使转化率翻倍的信息,请阅读完整报告:网站搜索:正确操作时的高转化率投资

3 个例子帮助你改变“无结果”搜索页面

原文:https://www.algolia.com/blog/ux/3-examples-to-help-you-transform-the-no-results-search-results-page/

出色的搜索体验应该毫不费力地将用户与他们的需求联系起来。然而,一个“没有结果”的页面(当搜索引擎不能返回任何结果时的错误)可能会破坏这种期望的连接并导致挫败感。有了精心设计的搜索体验,你可以避免“没有结果”的页面,并为每个用户指出一个发现新事物的方向。

优化搜索是网站寻求与其他品牌竞争、获取和保留用户、提高转化率和参与度的关键组成部分。搜索体验的每一部分都应该促进发现,避免“没有结果”的页面对这一目标至关重要。

在这篇文章中,我们将通过几个例子来说明如何将一件“没有结果”的事情转化为一条新的前进道路。

为什么“没有结果”的页面是一个 UX 死胡同

一些网站精心制作了“无结果页面”,提供幽默的错误信息或以某种方式与品牌保持一致。但这些页面,无论多么机智,创造了一个 UX 死胡同。如果用户没有找到他们需要的东西,他们很有可能会立即离开你的网站或应用。事实上, 12%的用户在一次不成功的搜索后离开了网站。原因如下:

【无结果】页面忽略下一步可能的步骤

有帮助的“无结果”页面可能包括microcopy提示用户再次搜索或提供建议的和流行的搜索。然而,许多人没有,这导致搜索之旅和与网站的整体互动到此为止。如果当用户找不到特定查询的结果时,你不为他们提供另一种选择,他们将没有任何潜在的后续步骤可循。

坚持不懈的用户可能会修改他们的搜索,试图更接近他们想要的,但他们会这样做,却不知道为什么他们最初的搜索失败了。然而,由于注意力持续时间短,用户搜索技能往往较弱, 许多用户在第一次失败后不会细化他们的搜索

【无结果】页面不能准确反映站点内容

“没有结果”页面给人的印象是,你的访问者想要的东西实际上并不存在于网站上。很多时候,现实是这些相关结果确实存在,但是站点的 内部搜索只是没有优化 来检索它们。搜索引擎可能会在错别字、同义词或非常具体的查询上出错。许多这些问题都可以通过优化你的搜索引擎来解决,这样用户的错误就不会导致“没有结果”的障碍。

记住, 43%的网站访问者会立即利用搜索框 。关键是要确保你的搜索是尽可能相关的,这样那些用户就会得到回报。

3 个搜索实例,替换了“无结果”页面

一个强大的搜索解决方案,如 Algolia,通过预测用户需求并确保每个用户都在一条通往 内容发现 的道路上,帮助用户 避免传统的“无结果”页面 。这里有三个不同的搜索体验的例子,它们消除了对“无结果”页面的需求

1。LaCoste——即时搜索结果,即使是无效查询

不管是什么样的查询, Lacoste 都会给用户提供一个网站的前进路径,就在搜索栏里。虽然不成功的查询会生成一条“抱歉”消息,但它也会直接在下面返回精选的产品。这有助于突出 Lacoste 丰富的产品目录,并为用户提供新的有趣的结果和参与机会,而不仅仅是一个死胡同。

2。安德玛—允许输入错误的自动完成功能

一个未经优化的搜索引擎可能会被用户的错误绊倒,无法提供搜索结果。 安德玛 的搜索栏中的允许输入错误的自动完成功能既能捕捉用户输入的错误,又能为他们提供受欢迎的推荐商品建议。这一功能考虑到了人为错误,并允许用户修正路线以找到他们要找的东西。

例如,如果用户拼错了“sock”,网站仍然会提供用户可以点击搜索的热门结果。

3。国家地理探险——基于浏览的搜索

国家地理的 探险网站采用独特的方式搜索 该网站鼓励基于浏览的搜索,使用特定范围的 过滤器和方面 。这种类型的导航最适合非常集中且通常较小的结果集。用户很快就熟悉了搜索目录的参数,并且可以很容易地调整他们的过滤器选择,以找到某些结果。这种类型的导航搜索确保用户总是有清晰的后续步骤来浏览内容,找到他们想要的东西。

改善你“没有结果”的最佳做法页面

正如这些例子所帮助说明的,没有结果的页面对用户来说并不一定是死胡同。通过专注于改进一些不同的元素,你可以消除这个用户障碍:

建立你的同义词库

一个成功的网站搜索功能需要解析 同义词 ,因为搜索同一事物的访问者经常会使用不同的词来找到该项目。例如,在美国各地销售手提包的零售商会考虑到该术语的地区差异,如“purse”或“pocketbook”。一个强大的同义词库是必不可少的,它可以基于网站搜索数据来构建,以确保准确性。

使用自动完成和查询建议

通过向用户提供已知会返回结果的查询,您可以增加首次搜索成功的可能性。通过 自动补全和查询建议 帮助用户在点击 enter 键之前细化搜索,可以在他们开始搜索时为他们指出正确的方向。

利用分析了解用户需求

每次用户访问你的网站,他们都会提供 有价值且可操作的数据 。通过查找“无结果”搜索并改进您的数据集以最大限度地减少这种情况的发生,来利用这些信息。导致“0 个结果”的查询不可避免地会赶走客户,并且可能是错误标记内容或整体内容差距的指标。将那些未满足的需求考虑在内,并创建内容来填补在您的分析中明确发现的潜在差距。

通过优化的搜索让您的用户获得最佳搜索结果

出色的搜索体验可以促进发现,并彻底消除“无结果”页面。通过优化你的网站搜索,你将为访问者创造一条获得有价值结果的路径,即使他们没有找到他们想要的东西。从自动完成到联合搜索,再到过滤器和方面,Algolia Instant Search 拥有您需要的所有 UI 组件,来创建满足您用户需求的强大搜索。

要了解更多关于 Algolia 如何提高客户保持率和转换率的信息,请阅读我们的电子书“ 框外搜索 。”

3 键搜索框 UX 设计元素

原文:https://www.algolia.com/blog/ux/3-key-ux-design-elements-of-the-search-bar/

营销人员和网站所有者经常忽略他们搜索界面的设计,而牺牲了良好的搜索体验。笨拙或不直观的搜索体验会让用户感到沮丧,更有可能转到竞争对手的网站去寻找他们需要的东西。对于媒体网站、电子商务零售商以及介于两者之间的每一个网站来说,调整浏览体验的每一个部分都是必要的,包括搜索栏。

T3T5

为什么搜索栏很重要

搜索栏通常是用户与网站的第一次互动。事实上, 研究表明 大约 43%的网站访问者会立即进入搜索栏,这些搜索者转化的可能性是其他人的 2-3 倍。

搜索栏可以为用户提供一种 的对话体验 ,其中每一次击键都是与系统有效的双向讨论。用户不应该为了搜索而对你的界面进行逆向工程。相反,这个过程应该感觉像一种自然的人类体验,可以快速引导他们找到他们想要的东西。你的网站必须为这些客户提供无缝的用户体验。

如何打造最好的搜索栏设计

搜索栏用户体验设计流程有三个关键方面:外观、位置和功能。所有这些方面共同作用,形成更加清晰高效的用户体验。

1。搜索栏的外观

外观有助于用户形成对搜索栏的第一印象——通常是对整个网站的第一印象。它帮助他们理解系统的目的和用例,并说服他们开始使用它和探索内容。在不牺牲功能的情况下,确保设计清晰合理是很重要的:

    • 保持简单,使用常见的设计模式。 用户来到网站,期望搜索栏以可预见的方式出现和运行。不要过度设计你的搜索栏,让用户填写太多的字段。用户只需输入一个字段就可以了。一个简单、干净的设计将使搜索栏易于查找和使用。
    • 使用放大镜图标 。现代用户立即理解放大镜是搜索的通用标志。你可以通过使用他们认可的设计模式来迅速吸引他们的注意力。
    • 考虑字段大小 。搜索输入和字体大小应该适应标准的用户查询长度—通常大约 27 个字符。确保在各种设备上进行测试,包括不同的 移动设备
    • 使用 microcopy 。在没有提示的情况下,用户会在搜索栏中输入各种各样的问题。如果你希望他们搜索特定类型的内容,那就告诉他们。 搜索栏中的简单提示 如“搜索产品”、“你想了解什么”或“找到完美的目的地”可以帮助引导你的用户并形成他们对所能找到的东西的期望。

https://www . algolia . com/doc/guides/solutions/gallery/animated-placeholder/

  • 在搜索栏 保留最后一次查询。当用户查看搜索结果页面时,参考他们过去的搜索查询可能会有所帮助。如果他们没有找到他们要找的东西,他们可以快速返回并修改搜索结果。
  • 使搜索栏可见。 用户不应该非得搜索搜索栏。搜索栏需要足够大,这样才不会被网站的其他部分遮挡。考虑相对于网站其他部分的颜色和视觉对比,这样它就不会意外地融入其他部分而丢失。

simple search bar design + magnifying glass icon

2。搜索栏的位置

用户应该能够导航搜索,不管他们在你网站的什么位置。位置的一致性允许他们浏览不同的页面而不会迷路。以下是一些需要记住的提示:

  • 在搜索栏的位置上要有策略 。搜索栏越突出,用户越有可能使用它。用户通常希望在网页的左上角或右上角找到用于搜索的按钮或图标。然而,根据不同的用例,你可以选择让搜索栏更加突出。无论你做什么,不要隐瞒!
  • 把它放在每一页的同一个地方 。不管页面的上下文如何,搜索栏应该总是可用的。当他们导航到不同的页面时,搜索栏应该在他们上次使用它的相同位置,以确保他们可以快速回到他们的探索过程。一致性是关键,因为好奇的用户会想要在不同类型的内容之间跳转,搜索体验应该帮助他们这样做。

3。搜索栏的功能和能力

最终,搜索栏的功能将用户与他们正在寻找的东西联系起来。确保你的搜索栏不仅能提供用户期望的功能,还能提供强大的体验,促进搜索和发现:

query suggestions in action
https://www . algolia . com/doc/guides/solutions/gallery/predictive-search-suggestions/

search results being displayed as the user types

如何实施伟大的搜索 UX

建立一个搜索栏意味着超越用户的期望。您需要一个搜索服务提供商,它提供强大的功能和机会来调整搜索以适应您的业务用例。阅读我们的电子书“ 搜索和用户-企业关系 ”,了解了解你的用户如何帮助你推动搜索改进和定制搜索体验。

30 天将我们的爬虫性能提高 50 %|

原文:https://www.algolia.com/blog/engineering/30-days-to-improve-our-crawler-performance-by-50-percent/

高性能应用程序的速度与其最慢的组件一样快。这在依赖第三方 API 组件的并行分布式系统中尤其具有挑战性。虽然外部组件可能很快,但组合它们需要仔细的设计、实验和测试,以避免不必要的低效。要实现最低限度的快速性能,但最具竞争力的产品需要远远超过最低限度。

然而,不管一个软件过程有多好,总会有另一个客户带着一个独特的用例出现——你会发现还有更多事情要做。这种情况发生在我们的 Crawler 中,这是一种使用并行和分布式计算架构来抓取大量网站的产品,在运行中提取和构建信息,使每个网站都可以搜索。

这篇文章是关于我们如何分析和改造我们的应用程序爬虫的内部,寻找瓶颈,最小化资源,简化任务等等,以优化这个复杂的并行和分布式软件的处理。

技术概述

在深入研究之前,先快速浏览一下我们的技术堆栈。

后端完全由 NodeJS 和Typescript 提供动力,托管在**【GKE】**(Google Kubernetes 引擎) 云 SQL 。我们使用 memorystore 进行存储,使用 RabbitMQ 进行队列。

在开始之前,我们使用的是 1 VCPU 和 4GB 内存的小型 N1 机器,主要是因为主要的计算是由我们的工作人员完成的,这些工作人员非常轻便并且可以水平扩展。

Simplified view of our infrastructure

Simplified view of our infrastructure

如你所见,这是一个相当标准的架构,由一个经理来安排工作,工作人员的数量随着负载的增加而增加。因为这个基础设施的所有其他部分都是由谷歌管理的,我们认为我们的大多数问题都会出现在管理器中,这是一个 SPOF(单点故障)。

将爬虫视为分布式系统

自 2 年多前成立以来,我们的定制爬虫已经成长了很多。从 localhost MVP,到 Heroku,然后是一个挑战性的 GKE 迁移,爬虫的能力已经扩展,我们已经看到企业客户的稳定增长。

一夜之间增长 2 倍并不容易:高度并行的代码和基础设施带来了巨大的挑战。但是也有很多优化的方法。

通过压力测试识别潜在瓶颈

管理一个爬虫不是一件简单的任务。该过程严重依赖于移动和脆弱的组件、队列、数据库存储、网络本身、水平扩展、web 标准等。为了帮助我们完成这项正在进行的任务,我们正在使用数据狗和 GKE 密切监控我们系统的所有部分。一切都是用防御性编程和任何事情都可能在任何给定时间失败的思想构建的。当网络变得不可靠时,或者当我们在后端执行用户定义的 JavaScript 代码时,这被证明是非常有用的。 因此,我们借此机会实施了 端到端基准测试 ,以便我们能够发现新的罪魁祸首,突出潜在的瓶颈,并规划未来的改进。

为了做到这一点,我们使用了我们的暂存环境,并编写了一个脚本来在很短的时间内创建和触发几千个爬虫。虽然这个数字起初可能看起来不高,但每个爬虫实际上可以同时发现、获取、提取和 索引 数百万个 URL。

衰快

因为我们对这些新功能相当乐观,所以我们一开始就没有计划失败。这当然意味着一切很快就会失败。

我们在开始时学到了非常好的东西,并且很好地提醒我们,偷工减料可能会在多年后伤害到你:我们的 Kubernetes 集群是手动创建的,因此我们的试运行和生产出现了相当大的差异,无论是有意的(为了节省成本)还是无意的。 第一次测试失败,因为集群无法扩展并承担我们当前生产中的负载。所以第一批几乎没用。 然而,这被证明是同步我们的配置并将 Terraform 放回我们的路线图中的好时机。Terraform 有助于编排复杂的基础设施并随意复制,对 Kubernetes 尤其有用,使它成为我们(以及管理一系列服务的每个人)真正的游戏规则改变者。

不成材难

尽管开局不利,但我们仍然对基础设施的整体稳定性充满信心。但事实证明,这一过程中失败的地方更多。虽然这可能伤害了我们开发人员的感情,但这是最好的。以下是我们失败的原因、我们学到的东西以及我们改进筹码的地方。

减少 RabbitMQ 中的队列占用量

我们集中使用 RabbitMQ 在我们的多区域集群中传输我们的工作。工作人员订阅单个扇出队列,该队列对作业进行负载平衡,GKE 使用这些指标根据负载自动扩展我们的集群。没什么特别的,但它工作得很好,我们对这个非常强大的软件有十足的信心。

然而,当在这些工作器中获取和提取页面时,作业也被发送回不同的索引服务,该服务将作业推送到我们的监控堆栈,并最终到达 Algolia。这个索引步骤是按爬虫分开的,这意味着我们有 N 个客户的 N 个队列。

通过这种设置,我们可以根据负载来扩展工作线程(CPU 最密集的任务),但在这一步之后独立控制每个爬虫,这样我们就可以计算全局范围,而不需要共享内存(例如,索引的全局速率限制、最大 URL、有效负载验证)。

我们几乎不知道大量的空队列会对 RabbitMQ 产生巨大的影响。 所有队列都在消耗大量内存和 CPU——即使在空闲时 。在基准测试期间,我们很快达到了一个不合适的上限,这是我们以前认为无法达到的。

幸运的是,我们想到了一个解决方案:使用带有 内置 TTL 特性 的短命队列。 然而,随之而来的第二个问题是:队列配置在创建后不能修改,这个问题在生产中给我们造成了很大的打击,因为在开发过程中,我们总是从头开始重新创建整个队列。 删除旧队列可能需要相当长的时间,因为我们开发人员的目标是聪明地偷懒,我们找到了一个完美的天真解决方案,并将 爬虫版本放在队列名称 中。 这样,我们现在每次部署都是从一个“全新的”环境开始,RabbitMQ 只需在几分钟后自动处理旧队列。

The drop in CPU consumption after the TTL was applied.

The drop in CPU consumption after the TTL was applied.

解决方案:

  • 使用非常短的实时队列(15 分钟),即使我们知道我们每天都要处理事情
  • 版本队列名,这样你就可以随时丢弃并从头开始重新创建一切

提高 Kubernetes 的成本和资源使用率

Kubernetes 是一个需要掌握的非常复杂的系统,在爬虫团队中,我们不是基础设施专家。当我们在大约 2 年前进行迁移以实现更好的自动扩展时,我们主要关注的是在保持成本可接受的情况下简单地让事情运转起来。 在进行这些基准测试时,我们意识到小型机器并不适合所有情况。

成本不会线性增加,也就是说,机器越大,成本越低。Kubernetes 总是使用少量的 CPU 和内存,因此****机器越大,占用空间** 就越小。**

**总的来说,在迁移之后,我们 降低了我们的基础成本****浪费了更少的 CPU 并提高了我们的性能 仅仅通过改变一些需求。

解决方案:

  • 我们迁移到 E2 高 cpu 成本优化机器 ,没有硬盘
  • 我们更改了所有资源要求,以允许 Kubernetes 玩更好的俄罗斯方块游戏(注意:默认情况下,Kubernetes 调度程序不会尝试填满 100%的节点)

Total RAM consumption with a 50% improvement

Total RAM consumption with a 50% improvement

无服务器和可扩展性

在应用了相同的配置后, 第二个基准测试也很快失败了 因为我们没有正确地考虑规模。 在 Kubernetes 中,即使你现在“无服务器”,你仍然被捆绑在一个水平扩展策略、磁盘扩展策略、CPU 扩展策略等上..并不是所有的东西都会神奇地扩展,成本通常会随着扩展而扩展——你可能会依赖像 Postgres 或 Redis 这样的托管服务,它们还没有配置为承担巨大的负载。

这意味着配置一切,使其具有更好的最小值、更宽松的最大值、基于托管服务负载的自动扩展,以及无处不在的高可用性(区域或地区性)。

在我们的设置中,这意味着:

尽管 99%的时间负载都是“正常”的,高可用性、区域复制和基准测试——你需要确保你能够处理大峰值——加起来就是初始成本。

在 GCP,这意味着每个月要多花几百美元,如果你有 1:1 分期付款,这个数字还要翻倍。因此,对一切进行良好的测试和配置可能会花费很多,但这是最终让客户满意所要付出的隐性代价。

减少 DNS 延迟和错误> 94%的性能提升

在你遇到问题 之前被 高度忽视的东西,就是 DNS 栈。通常这是一些不需要进一步优化的低层次的东西。但是一旦你关心网络和 大规模高性能 你就会遇到大麻烦。

一旦基础设施得到纠正,基准开始运行,我们就开始监控 Datadog 仪表板中的一切,我们注意到 DNS 问题 增加 。在一个非常强大的环境中,GCP 让我们感到非常惊讶,对网站的简单调用都失败了,更糟糕的是,我们的 Algolia 调用也失败了。

错误隐晦,一点帮助都没有,像*【connect EADDRNOTAVAIL 95 . 211 . 230 . 144:443】【getaddrinfo enot found 8j 0 ky 6j 9 fn-1 . algolianet . com】【连接超时】* 。 显然,我们知道 Algolia 已经启动并运行,我们试图在本地重现这个问题,但由于我们个人电脑的限制,这几乎是不可能的。 这些错误只在高负载时出现,在正常使用情况下我们无法重现。

如前所述,这是一个普遍被忽视的话题,所以我们以前自然没有太关注它。但是很明显,我们的 HTTP 堆栈没有得到适当的优化。

经过大量的时间调查我们终于发现了几个不同的问题**:**

**第一个修复是通过在所有 HTTP 调用中始终使用{ family: 4 }来强制 IPv4 解析。这个简单的修复极大地提高了我们的解决时间和成功率。

http.get({ family: 4, ... }, cb);

第二个更大的修正是在整个系统中使用一个共享的 HTTP 代理,只打开一个 TCP 池。这意味着将代理传递给 algoliasearch 客户端,以便进行简单的获取。

// agent.ts
export const httpsAgent = new https.Agent({
  keepAlive: true,
  timeout: 60000,
  maxFreeSockets: 2000,
  scheduling: 'fifo',
});

// algolia.ts
import algoliasearch from 'algoliasearch';
import { httpsAgent } from '../http/agent';

export const requester = createNodeHttpRequester({
  httpsAgent,
});
const client = algoliasearch(appId, apiKey, {
    requester,
});

关于 Kubernetes 中的 Alpine 映像的最终修正是简单地改变需要它的部署/状态集上的 dnsConfig 选项。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: crawler
spec:
  replicas: 1
  template:
      dnsConfig:
        options:
          - name: ndots
            value: '1'

在部署了所有这些修补程序后,系统从每天 90 万个 TCP 连接减少到每天仅 1.2 万个。 少浪费 99%的 CPU,少浪费时间,少浪费金钱。

TCP connections requested per day

TCP connections requested per day

更令人惊讶的是,我们看到索引记录时到达 Algolia 的时间大幅减少, 从平均每次调用 1.5 秒减少到稳定的 0.1 秒性能提升高达 94%。对于我们认为已经足够快的东西来说,这已经很不错了。

Average duration to saveObjects call to Algolia.

Average duration to saveObjects call to Algolia.

解决方案:

  • 重用 HTTP 代理
  • 强制 IP v4 解析

其他改进

Docker 图片尺寸和构建时间改进

当我们构建 Docker 映像时,我们通常会与 Docker 文件进行充分的斗争,以避免过度优化,尤其是在构建时间很长的情况下。然而,有很多问题,特别是层、基本映像、文件系统快照等。在这一点上值得研究。

我们在回顾中注意到两件事:

  • 我们的形象太大了
  • 我们的图像没有正确使用缓存

为什么要在意太慢或者太大的图像?嗯,图像大小增加了 Kubernetes 的产卵时间,因为优化的图像加载更快,所以启动更快。这也意味着更快地构建和推出补丁。所以双赢。T17

为了改善这一点,我们没有复制整个 WORKDIR,而是使用了只先复制 package.json 的简单技巧,安装 deps,然后复制其余的,这样 Docker 就可以在什么都没有改变的情况下缓存 node_modules 文件夹。我们的流程是每周升级一次依赖项,这意味着构建可以在剩下的日子里使用缓存。

FROM node:14.15.1-alpine AS base
ENV NODE_ENV production

# Install dependencies
# python make and g++ are needed for native deps
RUN apk add --no-cache bash python make g++

# Setup the app WORKDIR
WORKDIR /app/crawler

# Copy and install dependencies separately from the app's code
# To leverage Docker's cache when no dependency has change
COPY package.json yarn.lock ./
COPY pkg/crawler-manager/package.json pkg/crawler-manager/package.json
[...]

# Install dev dependencies
RUN yarn install --production=false --frozen-lockfile --ignore-optional

# This the rest of the code, no cache at this point
COPY . /app/crawler

现在映像仍然太大,因为它包含了构建最终映像所需的所有 node_modules(例如,Typescript、webpack、babel…),此时 大约 600mb 。在 Kubernetes 中创建的每个工人都在绘制这个大图像,因此极大地增加了启动时间。

由于采用了 多级构建,我们将尺寸缩小了>5 倍。 在最后加上这个简单的加法,图像 现在只有大约 100mb (仍然很大,但是好得多)。

FROM node:14.15.1-alpine AS base
ENV NODE_ENV production

# Install dependencies
# python make and g++ are needed for native deps
RUN apk add --no-cache bash python make g++

# Setup the app WORKDIR
WORKDIR /app/crawler

# Copy and install dependencies separately from the app's code
# To leverage Docker's cache when no dependency has change
COPY package.json yarn.lock ./

# Install dev dependencies
RUN yarn install --production=false --frozen-lockfile --ignore-optional

# This the rest of the code, no cache at this point
COPY . /app/crawler

# Build and keep only prod dependencies
RUN true \
  && yarn build \
  && yarn install --production=true --frozen-lockfile --ignore-optional

# Final Image
FROM node:14.15.1-alpine as web
USER node
WORKDIR /app/crawler
COPY --from=base --chown=node:node /app/crawler /app/crawler
EXPOSE 8000

前端捆绑尺寸

你可能认为大规模的性能只涉及到改进后端代码,但是一个缓慢的用户界面在用户心目中意味着一个缓慢的产品。对我们来说,更多的客户预期意味着为更多的人提供静态文件,这意味着大量的捆绑包,这意味着大量的加载时间、糟糕的 UX 和大量的带宽成本。 因此,虽然后端性能是我们的主要关注点,但我们也借此机会开发了前端产品包。关于如何启用树抖动和优化 webpack 捆绑包有很多细节,所以我将简单总结一下我们所做的工作。

多亏了[web pack-bundle-analyzer](https://www.npmjs.com/package/webpack-bundle-analyzer)你可以很快拥有你的 Javascript 代码的地图,并找到应该在那里或不在那里的东西。我们发现我们的代码是包大小的 10%,有十几个页面和数百个组件。然而,我们的主要依赖项:React.js、Monaco Editor(也就是 vscode editor)、React Feather、Prettier(与 Monaco 结合使用)等构成了有效负载的主要部分,并不是所有的东西都经过了正确的树抖动和优化。

以下是我们的建议:

  • SVG 会占据相当大的空间;仅仅通过正确压缩它们,我们就节省了将近 500kb
  • " module ":ts config . JSON 中的" esnext "需要启用树抖动
  • 有些封装不是树摇动的,但是您可以使用NormalModuleReplacementPluginnull-loader 轻松丢弃该部分
  • 当你不能减少你的包的大小时,Webpack 块肯定会有所帮助
  • 如果使用 nginx,gzip:on不足以启用 gzip 压缩,还需要指定gzip_types

经过几次调整,我们从 7.6MB (1.8MB gzipped)压缩到 5.9MB (1.2MB gzipped),因此大小减少了 33%。

Bandwidth cost, with sharp drop at the end of September

Bandwidth cost, with sharp drop at the end of September

结论

我们的爬虫一直以稳定性第一、性能第二为宗旨,因为 我们相信人们更需要一个可靠的工具 而不是一个快速失效的工具。然而,我们错过了许多轻松的性能胜利,这些胜利从来没有成为我们的首要任务,因为事情只是在工作。

拥有一个新项目和新方向有助于将这些主题放回路线图中,也有助于我们为我们的产品构建更美好的未来。

Number of running crawlers with Netlify spike at the start of october

Number of running crawlers with Netlify spike at the start of October

我们现在不仅更有信心,而且自修复以来,我们已经增加了我们的负载,我们有信心在未来一年内实现 10 倍的增长——这是由我们增强的技能和对任何并行和分布式系统的特定需求的理解以及实现 50%性能提升的成功推动的。****

2023 年黑色星期五准备工作的 5 个考虑事项

原文:https://www.algolia.com/blog/ecommerce/5-considerations-for-black-friday-readiness/

很难想象在距离上一个黑色星期五不到 4 个月的时候还会有黑色星期五,但根据最近的2023 年电子商务搜索趋势报告 ,这正是许多零售商和电子商务公司正在做的事情。许多人已经开始寻找创新的方式来为即将到来的假期做准备。

黑色星期五自动化和规模化

黑色星期五对整个组织提出了巨大的要求。它也变成了一个移动的目标。2022 年,消费者和零售商在黑色星期五早早开始。交易提前了一个多月。消费受到大幅折扣的推动,这是消费者在跳过亚马逊(Amazon)和塔吉特(Target)等主要零售商的早期假日交易日之后等待的东西。

假日折扣和降价在 12 月销售额同比增长中发挥了关键作用,但它们不足以吸引消费者从 11 月开始表现出改善。但是,这并不意味着每个人都立即购买。与 2021 年疫情的高峰期相反,消费者愿意在旺季为商品支付更多费用,因为担心零售商会耗尽库存,2022 年的消费者非常清楚库存过剩,并决定在等待最新和最大的交易时捂紧钱包。

这种动态——可能需要发布活动,并根据竞争对手、购买趋势、库存盛宴和饥荒做出快速改变——给公司带来了压力,要求他们找到应对挑战的解决方案。调查受访者表示,他们已经开始寻找自动化劳动密集型工作流的方法,帮助他们扩展并在移动中迭代。

state of ecommerce report

黑色星期五技术注意事项

鉴于黑色星期五准备工作的复杂性,我们整理了一些值得考虑的建议。

  • 保持一致性
  • 混合人工固化和人工智能
  • 胖头、矮胖中间和长尾优化
  • 精确的即时分度
  • 正常运行时间的性能和可扩展性

保持一致性

假日销售不仅速度快,而且充满活力,不断变化。很容易记住更新一件事,而忘记另一件事。除了寻找管理创意的数字资产管理解决方案,商家还需要考虑信息在哪里以及如何共享。

无论有人在使用你的搜索栏还是浏览产品列表页面(PLP ),黑色星期五的促销活动都需要保持一致,以最大限度地增加销售机会。这是搜索技术可以帮助的一个领域。许多 PLP 是完全动态的——它们实际上是查询——就像现场搜索结果一样。换句话说,你所拥有的系统应该能够将黑色星期五的销售商品推至搜索结果和 PLPs 的顶端。知道你准备的内容会被送到你的品牌买家购物的任何地方,这应该会让你松一口气。

哦,别忘了手机!移动搜索和 PLP 设计和交付需要快速响应,以最大限度地增加移动或沙发上买家的销售机会!

融合人工策化和人工智能

AI 在特定用例中表现非常出色。机器学习算法可以非常擅长预测和个性化。它可以大大增强您的团队正在做的工作,并以闪电般的速度计算结果,以便在正确的时间向正确的人提供正确的报价。尽管如此,有些时候你会想要掌控局面。

例如,您可能希望指导您的商品销售解决方案在目录的特定部分应用基于人工智能的优化,但手动管理其他区域。人工智能非常适合基于实时数据提升结果,例如将最畅销或高利润的商品推至顶部。另一方面,规则有助于创造身临其境的品牌体验和控制赞助项目。因此,在评估人工智能解决方案时,询问控制和灵活性。

胖头、矮胖腰、长尾优化

这个季节,你的买家会在你的网站上搜索“给娜娜最好的围巾”以及其他长尾和不常见的问题。这些长尾查询可能占你网站查询的 50-70%。它们难以预测,没有简单的方法来为它们写规则和同义词(比如“娜娜”是“奶奶”的同义词等等。).

long tail volume

更广泛地说,人们越来越多地按照自己的想法进行搜索,因此搜索解决方案应该能够解读查询意图,以返回相关结果。

当谈到黑色星期五的扩展时,搜索解决方案需要处理这些多种类型的查询——这就是端到端人工智能发挥作用的地方。

  • 查询理解 :搜索引擎需要自己解析查询。人工智能查询理解模型,如自然语言处理(NLP) 将使用句子编码、错别字容忍度和词汇化等功能来准备查询以供检索。
  • 检索 : AI 检索就是矢量搜索发挥作用的地方。向量是人工智能理解背后的技术,它们允许访问者按照他们的想法进行搜索。例如,即使你的网站上没有“红色闪闪发光”这个词,人们也可以输入“红色闪闪发光的衣服”并得到亮片衣服。向量是好的,但是对于规模,你也需要它有神经散列和关键字。这种组合有时被称为混合搜索,这是优化大范围查询的唯一方法——从肥头到长尾。
  • 排名 : AI 排名强化学习等能力会不断将更好的结果推至榜首。“更好的结果”是指获得最多点击、转换、购买、评级或其他积极信号的结果。

对于黑色星期五规模,人工智能“混合”搜索可以改善所有三种搜索的发现——从肥头到长尾。人工智能搜索不仅显示最相关的结果,还扩大了产品发现的足迹。嘿,谁不想让消费者更容易地要求 Alexa、谷歌或 Siri“在我的购物清单上为 nana 添加一条漂亮的围巾”,并将其放在我的[品牌名称]篮子中呢?

即时标引

许多零售商和市场每晚都会更新他们的搜索索引。有时每小时一次。更新对于反映最新的产品品种、价格、新的 SKU、库存水平等至关重要。您的搜索提供商需要能够处理频繁和大规模的变化,这也可能包括曲线球,如模式更新、客户评论、新商家等。,它需要在不影响搜索性能的情况下进行这些更改。在选择搜索提供商时,最好测试一下索引功能,以确保他们能够胜任假期的工作——这是对大规模速度的真正考验。请记住,如果你的买家找不到它,或者找到了不可用的东西,这不会带来好的结果。

正常运行时间的性能和可扩展性

黑色星期五给你所有的系统带来了巨大的限制。他们中的许多人要么无法扩展,要么需要准备不人道的开支。考虑这样一种架构,它允许企业在不增加 10 倍系统调整成本的情况下进行扩展。现代云体系结构允许您不必手动增加和减少专用基础架构。

在黑色星期五,网络延迟给零售商带来了真正的问题,因此,当务之急是通过现代基于云的架构,在网站上的所有服务中找到获得更快响应时间的方法。例如,基于 API 的搜索平台(如 Algolia)是限制您的商务和内容平台流量的有效方法,不仅适用于搜索用例,也适用于买家浏览 PLP 的情况。

黑色星期五可能感觉还很遥远,但它以一种令人惊讶和偷偷摸摸的方式很快就到了。当你为大销售活动做准备时,找到帮助你扩大规模和最大化利润的解决方案是很重要的。下载一份 2023 年电子商务搜索趋势报告 ,或 联系我们 了解更多关于 Algolia 可能提供帮助的信息。

你不应该忽视的 5 个电子商务搜索趋势

原文:https://www.algolia.com/blog/ecommerce/5-e-commerce-search-trends-you-shouldnt-ignore/

在当今的网络世界,用户的期望值比以往任何时候都高。消费者知道他们想要什么,他们现在就想要那些东西 。如果网站访问者不能立即找到他们需要的东西,他们会很快离开页面,使网站失去潜在的销售机会。

一个优秀的电子商务网站搜索可以快速有效地引导客户找到相关产品。网站搜索是电子商务用户体验的一个重要部分,它推动了转化率、参与度以及最终的收入。电子商务网站搜索根据用户和行业需求不断变化。在这篇文章中,我们将讨论每个电子商务网站应该知道的趋势,以推动网站搜索的最大价值。


5 电子商务网站搜索趋势

消费者的在线行为和电子商务的格局已经发生了巨大的变化。随着收购比以往任何时候都难,每天都有更多的竞争对手进入该领域,提供有意义的体验已成为电子商务公司的优先事项。以下是电子商务搜索发生变化的五种方式:

1。客户从多个平台搜索

如今的用户通过各种设备访问网站,包括手机、。通常情况下,企业会投入时间和金钱来改善在线网站搜索体验,而忽视其他平台。无论用户从哪里开始搜索,他们只会继续与品牌互动,如果这样做很容易,甚至很愉快的话。

因此,跨平台优化电子商务网站搜索比以往任何时候都更加重要。无缝、集成和相关的搜索体验对于留住和吸引购物者以及推动销售和转化至关重要。

2。更少的复杂搜索功能

在电子商务搜索中,复杂的多条目搜索功能在很大程度上已经成为过去。像 高级搜索 这样的复杂搜索功能允许用户填写多个字段,以在详细的搜索表单中指定感兴趣的项目、产品或服务。复杂的搜索表单仍然在学术数据库或网站中使用,在这些网站中,需要多个参数来充分搜索数据库,如航空公司网站。在其他大多数情况下,用户习惯于 的简单搜索

客户习惯于响应迅速的搜索界面。最终,高级搜索可能会耗时、令人沮丧,而且最终毫无结果。

取而代之的是,电子商务网站搜索工具拥有强大的搜索引擎,其相关性和排名规则可以为企业和客户定制。这意味着每次搜索都可以返回有意义的结果,而用户不必确切知道他们需要什么。此外,网站还允许用户通过过滤器和方面来细化他们的搜索,这可以帮助客户比使用高级搜索更快地缩小他们的关注范围。

3。帮助用户搜索

用户并不总是知道他们需要什么,即使他们知道,他们有时也不知道要搜索的最佳关键词。当用户确实知道要搜索什么时,他们经常会犯错误或打字错误。

随着电子商务网站搜索变得越来越先进,它对用户错误的容忍度也越来越高,并且更有能力帮助客户找到他们需要的东西。以下是电子商务网站搜索帮助引导客户搜索体验的几种方式:

  • **自动完成—**当客户键入时,自动完成(或自动建议)会显示已知会返回结果的热门查询。 为 客户指定自己查询。这导致了更多成功的搜索,销售额增加了 24%,这也加快了搜索过程,因为客户可以点击最匹配的建议。

  • 相关搜索和产品建议—流行的搜索建议不仅对用户体验有帮助和强大的功能,而且在电子商务网站上也变得很常见(也很常见)。这一功能为在线零售商提供了一个真正的机会,他们可以向搜索类似商品的用户显示他们最受欢迎的产品或内容。它帮助客户发现新事物,并为交叉销售和追加销售创造机会,所有这些都在搜索体验中。


https://www . algolia . com/doc/guides/solutions/gallery/predictive-search-suggestions/

4。每个客户的个性化搜索结果

虽然两个不同的客户可能在搜索栏中输入相同的查询,但他们可能不会寻找相同类型的结果。越来越多的电子商务网站正在转向个性化结果,这使得以前的行为、用户档案和偏好能够影响客户看到的相关内容或产品。

这非常有价值,因为用户每次与你的品牌互动都会获得更好、更相关的搜索体验。

但是不仅仅是消费者极大地受益于个性化。研究显示,48%的消费者在体验个性化时会花更多的钱。利用个性化有助于满足用户的期望,从而增加参与度和转化率。用户也会在你的网站上停留更长时间,从而带来更多的 产品发现 和潜在销售。

5。搜索栏的标准化

随着搜索成为电子商务网站的基石,企业开始意识到采用一些基本设计最佳实践的重要性。

一些有助于简化用户体验的实践包括在每个页面的相同位置放置搜索栏,包括一个放大镜以获得更好的可视性,以及在栏中包含占位符文本(或缩微文本)以鼓励用户搜索。

电子商务搜索的未来

随着技术的发展,用户的期望只会继续增加,这意味着他们会想要更加个性化和无摩擦的体验。电子商务的未来是光明的,这些即将到来的趋势即将出现:

身临其境的体验

Gartner 预测,到 2022 年, 70%的品牌 将在消费者身上测试沉浸式技术。对于电子商务网站来说,这意味着用户有机会尝试虚拟产品试穿或 AR 过滤器,让他们在购买前看到家中的一件家具。这种未来派的个性化将增加收入,并以一种新的令人兴奋的方式吸引用户。

虽然身临其境的功能看似遥远,但许多品牌已经开始利用这项技术进行转化。例如,耐克在 2017 年开始使用增强现实 让购物者在网上购物前虚拟试穿鞋子。随着这项技术越来越容易被其他电子商务品牌使用,身临其境的体验无疑将成为许多在线购物者的一个基本特征。

视觉搜索

虽然视觉搜索是一种趋势,但仍处于应用的早期阶段,其在电子商务中的潜力不容忽视。

视觉搜索允许用户在搜索功能中输入照片、截图或互联网图片来查找产品。例如,如果一个人喜欢他朋友的夹克,他们可以拍一张照片,然后在一个网站上搜索相同的夹克(或类似风格、图案或颜色的夹克)。

这种功能为在线零售商打开了一扇新的大门,因为他们的客户将能够以更具互动性的方式与他们的品牌互动。电子商务公司获得的分析将提高他们对增长趋势和用户偏好及风格的理解。

语音搜索

随着手机、语音助手和智能音箱使用的增加,语音搜索已经越来越受欢迎。然而,在被客户完全采用之前,还有许多挑战。

这部分是由于围绕 UX 的难度水平,因为讲话有时会比打字更少】,而且对人类交谈的期望很难达到。速度对于流畅的对话至关重要,任何延迟都会破坏搜索体验。

随着用户越来越习惯对着自己的设备说话——甚至在公共场合——我们可能会看到语音搜索的使用增加。未来,语音搜索将是被动和主动的。公司将需要根据自然语言请求来定制搜索和内容,以使用户体验尽可能友好。电子商务网站也将受益于了解用户和他们的偏好——他们最近在问什么,他们住在哪里,当地天气等等。

语音搜索的未来将在很大程度上取决于服务提供商、卖家和用户对其可能性的投资和购买程度。

用现代有效的电子商务搜索取悦您的客户

电子商务搜索通过品牌和业务 KPI 推动客户关系,因此为客户提供现代、强大且相关的网站搜索以跟上趋势和行业挑战至关重要。

Algolia 以创新为动力,电子商务企业可以即时获得更新和升级。在我们的电子书“ 框外搜索 ”中,了解更多有关 Algolia 如何应对关键电子商务挑战的信息

增加网站搜索分析点击的 5 个理由(和代码)

原文:https://www.algolia.com/blog/product/5-reasons-to-add-clicks-to-site-search-analytics-and-code-to-do-it/

点击(和转换事件)捕捉用户行为和意图不应该是事后的想法。你在网上的成功取决于你以直接和即时的方式跟踪和回应用户的能力。这种直接性提供了关于他们意图的无价 洞察力 。除了打电话问他们,你最好的选择是将点击分析整合到你的网站搜索分析中。

正如您将在下文中看到的,通过网站搜索分析以及点击和转化数据获得的洞察力构成了更高级和更具竞争力的搜索功能的基础,这些功能让您能够利用您的搜索工具获得乐趣和利润。

好处:实现出奇的简单:在本文中,我们包括了所需的单行代码

站点搜索分析,点击分析,洞察 API:为什么你应该阅读这篇文章

  • 了解 网站搜索分析点击分析的区别
  • 了解点击分析对于动态相关性、A/B 测试、推荐和个性化的必要性
  • 了解使用我们的 Insights API 实现点击分析有多简单

比较网站搜索分析和点击分析

网站搜索分析 提供关于用户搜索内容和最常用术语的见解。但是 搜索分析 对于你的网站来说只是故事的一部分;它错过了用户旅程的很大一部分。

点击分析 从那里拿起并告诉你你的用户做了什么 之后他们执行搜索——他们是否点击或查看项目,以及他们是否转换。

什么是点击分析?

点击分析 收集用户搜索时查看和点击的详细数据 ,让您准确了解他们的产品兴趣和行为。在这方面,它类似于Google Analytics,但其用途也不同于 GA

点击分析对提高你的 网站搜索 至关重要,因为它给你 关于你的目录的洞察力 ,这是你根本无法通过任何其他方式获得的。它会根据用户购买、添加到购物车、收听或观看的内容生成 转换率 。与转换分析一起,它提供并实现了 ML/AI 驱动的功能,如 个性化A/B 测试动态重新排名 ,所有这些都使您能够产生与不相上下的消费级搜索体验

使用 Insights API,您只需一行代码就能实现所有这些。

添加点击分析到你的网站搜索分析的 5 大理由

在深入技术细节之前,让我们看看点击分析提供了什么。可以:

1。查看一段时间内的趋势

实现点击分析可以让你 保持对指标 的跟踪,包括点击率(CTR)、转化率、无点击率,所有这些都揭示了用户意图。

  • 点击率 意味着一个条目被点击的搜索百分比高。它表明客户参与度。

  • **转换率 意味着某个项目被转换的搜索百分比很高。这表明,用户可以找到他们正在寻找的,他们想转换。**

*** 无点击率 意味着没有产生点击的查询百分比高。它表明,项目可能不再是趋势,或在市场上获得较少的牵引力。

**这些指标衡量了你当前的表现,并帮助你迭代和改进你的搜索解决方案。随着网站搜索分析的持续流动,加上点击和转换,当你改变相关性设置时,你会看到这些指标如何随着时间的推移而增长。

2。融入“群众的智慧”(有一点人工智能的帮助)

——一种基于最近点击调整结果顺序的功能——是点击分析如何直接影响用户搜索和发现体验的显著例子。此功能会对用户最近的行为做出响应,并将您的最佳表现项目推至用户结果的顶部。

例如,如果一个项目出乎意料地出现趋势,动态重新排名会抓住该趋势,并将该项目的位置提升到顶部。流行艺术家的新电影和音乐一发布就自动被送到顶端。季节性和突发性的时尚趋势也得到推动。

3。实现个性化搜索体验

当您将 用户特定信息 添加到您的点击和转换事件中时,您可以利用您的分析数据来实现个性化:这是一种广泛使用的功能,可以根据用户对特定方面或类别的个人偏好来提升产品。个性化将特定于用户的上下文添加到查询中,并使转换更有可能。

4。改进搜索结果并定位问题查询

每次查询的点击率和转换率有助于您找到表现不佳的查询。通过 深入了解您的点击分析 ,包括点击 位置 ,您可以准确了解您的用户如何与他们的搜索结果进行交互。这些数据在 Algolia 的仪表板上很容易查看,应该可以帮助您分析特定的查询并优化相关性,或者创建 规则 来提高它们的性能。

5。测试用户如何与优化互动

除了衡量特定查询的成功,您还可以更改引擎中的设置,并衡量其对整体成功的影响。Algolia 处理一个 A/B 测试 的所有变量切换。你要做的就是设置好你想改变什么,改变多久。

持续测试您的相关性可以微调您的解决方案设置,并确保直观的相关性和 个性化策略。

点击分析和洞察 API:免费使用,昂贵不使用

网站搜索分析和点击分析不是成本与收益的问题。点击分析是免费的。我们的 Insights API 公开了一组简单的方法来捕捉用户的点击;就时间和资源而言,成本可以忽略不计。而且,正如您将看到的,实现起来非常简单。

上述五项关键优势非常巨大,使得点击分析成为每个搜索解决方案的必要组成部分。从用户那里获得关于他们的行为、兴趣和期望的直接而准确的反馈有助于你衡量你的搜索解决方案的成功并提高客户保持率。

如何使用 Insights API 实施点击分析【技术🤓]

提前了解实现给定组件的复杂性(或者在这种情况下,简单性)总是有用的。

所以你会很高兴地知道,有了点击分析,你只需要采取一个行动:发送用户 事件 到 Algolia。

您可以发送这些事件:

  • 点击
  • 转换
  • 刻面选择
  • 页面或产品浏览量

一旦你开始发送这些事件,Algolia 就会完成剩下的工作。

点击分析是关于收集关键用户事件以建立用户活动数据库,然后分析和综合这些数据以得出关于用户行为、需求和偏好的准确见解。

当你有大量的流量时,在很短的时间内,你的分析数据将产生前面讨论过的好处。

如何发送事件?我们的 Insights API 的快速概述

很简单,Algolia 需要用户旅程中缺失的部分:当用户从搜索中得到结果时,他们做了什么。

第一步是告诉 Algolia 你将在用户执行查询后发送事件。如下图所示, Algolia 为每一组结果返回一个queryID ,您可以使用它将查询与后续的点击事件关联起来。该图概述了当用户执行查询、查看结果、单击项目并将项目放入购物篮时发生的情况。

要轻松地将这些信息发送到 Algolia,您有许多选择(API 客户端或前端库)。最重要的部分是决定哪一个最适合您的技术堆栈。

你用哪个库或者 API 来发送事件?

Algolia 让发送事件变得尽可能简单,您选择的路线将取决于您的技术能力和您想要做的事情。

您可以根据您是否使用 即时搜索 以及您希望从前端还是后端发送事件来决定:

  1. 你在前端使用即时搜索
    • 新增! 在搜索结果页面使用 洞察中间件进行事件 (需要 InstantSearch.js v4.8.3)
    • 使用 Insights 客户端库处理事件 和任何其他需要事件的页面,如结账或意愿列表页面,
    • 注意: 我们有普通 JavaScript、React、Angular、Vue、iOS 和 Android 的即时搜索版本。
  2. 你是 不是 在你的前端使用即时搜索,但是你想从前端发送事件。
  3. 你是 不是 使用 InstantSearch,你有一个后端实现,你想从前端发送事件
  4. 你是 不是 使用 InstantSearch,你有一个后端实现,你想从后端发送事件

我们建议您使用 Algolia 的即时搜索库 ,让即时搜索管理对我们的Insights API的调用。也就是说,Insights API 非常简单,只需要一个调用就可以创建点击事件。

好了,我们来看代码(一分钟读完)

那么我们的洞察库是什么样的呢?它如何使实现变得更容易?

下面的标准代码片段说明了您需要的代码。它向 Algolia 的分析引擎发送以下信息:

  • 用户令牌
  • 查询 ID
  • 单击项目的对象 ID
  • 项目在结果中的位置
  • 事件类型(点击、转化、查看)

这是发送点击事件的代码:

insights_library('clickedObjectIDsAfterSearch', {
    userToken: 'user-123456',
    eventName: 'Product Clicked',
    index: 'products',
    queryID: 'cba8245617aeace44',
    objectIDs: ['9780545139700'],
    positions: [7],
}); 

就是这样。

如需完整代码,您可以将其复制到您的应用程序中,请查看我们的 发送点击事件文档

对于那些喜欢看现场编码的人,看看我们如何在 5 分钟内构建一个发送分析事件的应用

这段代码是做什么的?

代码背后的一般思想是发送特定类型的事件。这里,事件是用户在搜索结果上点击 的

还有其他种类的事件。例如,我们给上面的“点击”事件添加一个“转换”事件:

insights_library('convertedObjectIDsAfterSearch', {
    userToken: 'user-123456',
    index: 'products',
    eventName: 'Product Wishlisted',
    queryID: 'cba8245617aeace44',
    objectIDs: ['9780545139700', '9780439785969']
}); 

这个发送一个 wishlist 转换 事件。该函数的参数表明用户向他们的愿望列表添加了两个对象( 97805451397009780439785969 )。

要获得完整的代码,您可以将其复制到您的应用程序中,请查看我们的 发送转换事件文档

这些事件告诉我们用户的旅程和购买偏好是什么?

首先,用户搜索“哈利·波特”。然后做了如下操作:

  • 点击一个结果(假设“哈利波特,第一册”,用它的objectID表示)
  • 《哈利波特,第一部》加入他们的愿望清单
  • 改装另一本书(《哈利波特,第二部》)

你能从这次旅行中学到什么?

  • 该用户显示出对儿童物品以及冒险或奇幻书籍的喜爱。您可以使用这些信息来个性化他们的结果。
  • 如果许多用户做同样的事情,那么《哈利·波特》应该会出现在搜索结果中更靠前的位置。如果这是一种趋势,并且你已经启用了动态排名,那么搜索引擎会自动这样做。否则,您可以改进您让与您的点击事件一起发送的position值(该值保存在分析数据库中)。这个例子你发了positions: [7],可能太低了。您可以通过 提炼和重组您的数据 和/或 调整您的设置 来提高职位。

延伸阅读

我们的文档很好的解释了 发送事件 的各个参数。他们还展示了其他 11 种语言的代码片段( PHPJavaScript, RubyPythonC#/。NETJavaSwiftAndroidKotlinGolang

我们也有很多有用的教程;例如,查看我们的 点击分析解决方案

接下来是什么

现在你知道了实施点击分析的五个关键原因。概括地说,它让您:

  • 检测点击和转换行为的模式,然后您可以使用这些模式来配置您的设置和重新排序结果
  • 检测最近的购买趋势,搜索引擎可以利用这一趋势将表现最佳的商品推至搜索结果的顶部——动态且即时
  • 捕捉每个用户独特的搜索和点击活动,针对一组特定的方面或项目类别个性化他们的结果
  • 检测并帮助解决低效的搜索体验
  • 使用 A/B 测试测试搜索设置

搜索栏可以提供如此多的见解,这仍然有点新奇。或者是?Google Analytics 已经存在一段时间了,它帮助在线企业迭代他们成功的最佳公式..我们已经描述了如何使用点击分析来获得类似的洞察力,

我们的建议:让您的业务和开发团队一起实施Click Analytics Insights API。****

迁移到无头架构的 5 个理由

原文:https://www.algolia.com/blog/product/5-reasons-why-retailers-move-from-a-monolithic-to-headless-architecture/

近年来,电子商务行业经历了重大转变,带来了巨大的变化,需要面向未来的技术堆栈架构。许多传统零售商发现自己正与纯数字零售商激烈竞争,在一个不同于他们习惯的空间竞争。这种转变带来了一系列新的功能、行业标准和要求。

一家采用整体电子商务平台架构的零售商面临着功能和可扩展性方面的限制。此外,对于任何无法过渡到或可组合架构的公司来说,未来的增长机会都变得遥不可及。

单片架构

典型的 单片架构 本质上是非常限制性的。一方面,它给了用户“一切都在一个地方”;另一方面,它不能为现代电子商务平台提供最佳性能,以保持竞争力,并提供快节奏零售业所需的卓越数字体验。由于业务逻辑被困在一个整体框架中,每一个小的变化都需要广泛的跨团队协调,降低响应速度,并引入多个失败机会和不必要的复杂性。

无头建筑

无头架构 将前端与后端(电子商务解决方案提供的逻辑)分离,使公司能够专注于客户体验和交互,而不必担心每次迭代对关键后端系统的影响。无头架构意味着电子商务平台背后的商业逻辑充当“核心体”,通过 API 交付。这个主体然后被附加到许多“头”上,这些“头”代表内部系统面向客户的接触点(交易发生的地方)和面向员工的接口。

可组合架构

可组合架构 将 Headless 提供的灵活性向前推进了一步。如果当前使用的主要平台仍然是全栈,无头商务的业务逻辑有时仍然会被困在 monolith 中,这会限制平台的功能。可组合商务提供了一种架构,其中每个元素完全独立于彼此工作,并且可以被替换,而不会对系统的其余部分造成任何影响。每个元素被称为“打包业务能力(PBC)”。每个 PBC 的目标是解决一个非常具体的问题,易于实现,并通过 API 层连接到系统中的其他部分。这种设置允许电子商务公司在一个系统中结合最佳元素,并为其独特的使用案例和业务需求实现最佳架构。

为什么要移动到无头?

monolithic to headless architecture

向无头架构的数字化转型的好处源于前端与后端的分离。解耦架构使公司能够挑选最佳的构建模块,并允许他们快速迭代和适应任何内部或外部变化。

由于采用了无头方法,零售商获益:

    • 灵活性–消除对功能有限的单一解决方案的依赖
    • 速度——快速轻松的部署、变更、迭代和策略修改
    • 定制–选择最佳构建模块来创建定制解决方案,以适应每种独特的使用情形
    • 全渠道能力–在任何平台或设备上提供最佳的最终用户体验
  • 未来的增长和机遇

    • 接触和顺应新趋势,如移动语音频道&社交商务或直播商务,这些都在迅速普及
    • 通过提供更好的用户体验增加您的预期收入
    • 随着消费者习惯的改变,通过在客户选择的平台上提供多渠道服务来提高用户参与度&忠诚度。

学习电子商务行业领导者的成功转型:

Gymshark 的马赫之旅:搜索与导航的实用案例

结论

电子商务公司从整体架构过渡到无头或可组合架构可以获得多种好处:构建最佳解决方案的灵活性,并针对特定的用例或需求进行定制,而不局限于单一工具;迭代和推出新产品和服务的速度:无论平台或设备如何,都能够为客户提供最佳体验。这一转变开启了未来的战略增长机遇。

如果您计划迁移到无头架构,但不确定从哪里开始或需要更多信息,请随时 联系我们的团队今天

如何扩大 SaaS 企业的规模:Jason Lemkin 的 5 个增长技巧

原文:https://www.algolia.com/blog/product/5-saas-scale-growth-tips/

大多数 SaaS 的创始人都是以同样的方式起步的——在产品的技术细节方面拥有丰富的专业知识,但在销售等其他方面的经验有限。

在我们的 SaaS 专家系列中,我们向 SaaStr 的创始人、一位成功的初创公司投资者杰森·莱姆金(Jason Lemkin)请教,如何创建一个强大的框架来扩大一家高绩效 SaaS 公司的规模。

1。在早期阶段寻找产品与市场的匹配

杰森将产品/市场契合度(PMF)定义为一个阶段,在这个阶段,一家努力争取客户的初创公司突然看到了增长,但他们不知道为什么。例如,可能是因为他们推出的某个功能远比他们想象的重要,等等。

杰森举了一个例子,当 PMF 开始时,阿尔戈利亚是如何找到它的。Algolia 打造的第一款产品从未达到产品市场契合度。当它开始时,Algolia 是一个轻量级的移动 SDK,预计在 2012 年移动电话上固有地工作,当时手机的功能远不如今天。虽然每个人都喜欢搜索功能可以如此简单地实现,但没有人付费购买该产品。在移动领域,这还不是一个大到你可以围绕它建立业务的问题。

“所以他们采用了同样的技术,并将其重新包装成 API。然后嘣!”基本上,这是一种不同的技术表达/用例,但却是适合市场的。

实现产品与市场匹配的下一步是与付费用户就功能差距展开对话。理解并专注于能让他们支付更多的功能。“你每月付给我 500 美元。我能为你建造什么给我每月 2000 美元?如果你的客户爱你,他们会想从你这里买更多,”杰森在与他们交谈(一遍又一遍)以开发 PMF 时说。

2。持续获取客户

你可能没有那个神奇的销售人员,但作为创始人,你就是要销售。创始人销售的诀窍是:客户和潜在客户喜欢和首席执行官交谈。如果你能解决潜在客户的问题,而你是首席执行官,那就利用这一点。作为创始人,你不需要成为世界上最好的销售人员,你只需要努力去销售。

然后,还有你的超能力。在早期,创始人擅长一两个方面——这些方面对你的公司很有帮助。这些就是杰森所说的你的超能力。

例如,当 Algolia 试图起步时,联合创始人 Nicolas Dessaigne 经常出现在活动的舞台上,这引起了很多关注和对产品的兴趣。

他还会参加开发者网络活动,并管理一个展位。当 Algolia 成为开发商中的知名品牌时,他的不懈努力得到了回报。

Algolia 的另一位联合创始人朱利安·莱莫因写了一篇数据丰富的博客文章,将 Algolia 与其当时的顶级竞争对手进行了比较。这是一篇认真的文章,讲述了竞争对手优于 Algolia 的例子,反之亦然。这篇经过充分研究并有数据支持的文章在很长一段时间内带来了一致的线索。这产生了大量的线索和可信度——甚至在内容营销成为考虑因素之前。

这个想法是确定你的超能力并加倍努力。大多数 SaaS 初创公司的创始人都有闪亮物品综合症——他们想同时尝试各种活动、博客文章、合作伙伴项目和对外宣传。这会分散你的注意力,让你无法完全专注于一个频道。在销售线索挖掘方面,跟踪和加大对有效渠道的投资也变得非常困难。

另一个要记住的技巧是:营销努力会随着时间的推移而复合。

Jason 说,“无论什么方法有效,都要多做,给自己 24 个月的时间,观察有什么化合物”。

3。雇佣你的第一个(第二个,第三个)销售人员

有一天,你会有一个很棒的销售副总裁,他会培训和雇佣不同的人。一开始,你必须换个角度思考。想想你是否会从这个人那里购买你的产品。请记住,虽然你可能希望有人在 Twilio 或 SendGrid 击败它,但这个人可能不是你创业的最佳人选。

对于你的第一个销售“魔术师”,你需要一个非常非常了解你的产品的人——远远超过 100 号销售人员。“我经常发现,可能在不同行业的古怪、创新、超级聪明的人在这些职位上表现出色,”杰森说。

有一天,你会有一个很棒的销售副总裁,他会培训和雇佣不同的人。一开始,你必须换个角度思考。

4。雇佣 CRO 或 CMO

为公司的正确阶段雇佣正确的人比为了某个头衔而大量雇佣更重要。此外,杰森建议初创公司的创始人要小心头衔膨胀,因为这会给公司和员工带来误导性的期望。

在大多数情况下,公司希望招聘一名销售副总裁,但却将其与 CRO 或 CMO 混为一谈。首席营销官(CMO)或首席收入官(CRO)不是营销或销售副总裁的扩展角色。当 CRO 或 CMO 不能真正拥有全部职能时,他们就在为自己的失败做准备,而他们本来可以作为副总裁成功地完成大部分相同的工作。

SaaS 的角色变得越来越跨职能,所涉及的团队必须保持一致,以实现持续增长。CRO 调整收入生成,以便营销、销售和客户成功副总裁一起工作,在不偏离核心目标的情况下实现收入最大化。

5。如何应对全球危机

自 3 月初以来,企业一直在应对新冠肺炎的影响。虽然其中一些公司,如 Zoom,是“COVID 的受益者”,但许多在旅游和酒店领域经营的公司却受到了冲击。

“我不是说你不会受伤。但是不要太关注不好的一面,要把所有的努力都投入到成功的领域中去。

旅行依然存在,已经从最低点反弹。你能做些什么来让旅行的人们过得更好?

他认为收入不会达到 2020 年初的预期,必须重新定义和确立第三季度的目标。他说:“了解它工作的地方,并在那里指导团队。”

他举了 SaaStr 的例子,这是他在每年第一季度举行的年度贸易会议。这项活动吸引了来自世界各地的 15,000 人。今年,由于 COVID 的限制,它不得不被取消。他们立即转向在线活动,自那以来已有 3 万人参与。

想了解更多创始人智慧、演讲录音、搜索和发现知识,请前往 Algolia 资源库

五大语音搜索趋势值得关注

原文:https://www.algolia.com/blog/product/5-voice-search-trends-to-look-out-for/

多年来,人们一直在预言语音搜索将很快超过所有其他搜索。但是,随着尘埃落定,我们看到的增长比预期的要温和得多。仍然有许多用户倾向于语音搜索,语音优先设备和虚拟助手如 Google Home、Alexa 和 Siri 成为许多家庭的必需品。很明显,语音搜索在搜索的发展中扮演着重要的角色,而且随着越来越多的消费者对语音搜索越来越熟悉,它将会继续发展。

但这种不断变化的格局让许多网站和企业想知道语音搜索会对他们产生怎样的影响。哪些语音搜索趋势会持续下去?如今语音搜索的现实是怎样的?语音搜索在未来会是什么样子?

语音搜索简史

今天的语音搜索可以追溯到一些早期的前辈。

语音识别

语音识别出现于 20 世纪 50 年代,贝尔实验室开发的软件可以识别基本的数字。从那时起,创新和改进出现了,包括 70 年代美国国防部的 DARPA SUR 项目,80 年代马尔可夫模型的开发,以及 90 年代更快的微处理器的出现。

在早期,谷歌创造了“ 谷歌语音搜索 ”一个利用云数据中心处理能力的 iPhones 应用程序。在接下来的几年里,谷歌继续创新,用大量人类语音和训练数据的例子来微调他们的软件。

互动语音应答

语音优先技术允许人类通过语音与计算机系统进行交互,但早期的交互式语音响应(IVR)设备首先做到了这一点。今天,大多数现代用户通过呼叫中心与 IVR 进行交互,呼叫中心的自动化系统允许用户通过语音或键盘进行选择。这项技术最早出现在 60 年代,当时人们试图通过改进合成语音来提高呼叫中心的效率。更先进的 IVR 尤其引人注目,因为它首次将语音和网络真正连接起来。

这些技术为我们今天看到的语音识别和语音搜索技术奠定了基础。

语音搜索现在在哪里?

在 2014 年的一次采访中,吴恩达 有一个著名的预测 ,“在五年时间里,至少 50%的搜索将通过图像或语音进行。”

嗯,我们刚过了 5 年。那么语音搜索和预测相比如何呢?

证据显示 语音和图像搜索尚未达到全部搜索的 50%。然而,有很多令人兴奋的研究表明,语音搜索是多么强大,以及用户如何将其融入他们的生活。

对于用户:

对于公司:

  • 91%的公司正在进行 重大投资 语音
  • 76%的受调查公司报告称从语音和聊天计划中获得了 可衡量的收益
  • 一些公司发现客户服务成本降低了 20%

5 语音搜索趋势

然而,所有这些最新的数据在实践中意味着什么呢?企业和用户应该注意哪些趋势?首先:

1。人们对语音搜索越来越适应了

尽管语音搜索的增长更加稳定、稳健和适度,但用户无疑正在将语音优先的设备和功能融入他们的生活。而且,语音搜索带来的舒适意味着搜索行为的改变。事实上, 71%的用户更愿意通过语音搜索,而不是使用键盘 。其他研究显示 40%的千禧一代在购买前通过语音 研究产品。这些统计数据讲述了一个引人注目的故事:人们已经准备好进行语音搜索了。

2。以关键词为中心的搜索变得不那么流行了

多年来,在谷歌等网站和搜索网站上搜索意味着在搜索栏中输入几个关键词。如今,现代互联网用户正在远离传统方法,转向更多的 对话式查询

当用户对着支持语音的设备和助手说话时,他们倾向于使用自然的说话模式,而不是生硬的关键词结构。事实上, 对谷歌助手 的 70%的查询都是用自然语言。这意味着查询包括更多的短语、完整的问题和自然语言的常见字符串。

3。用户有更高的期望

像谷歌、YouTube 和其他知名网站这样的主要参与者的速度和相关性已经提高了网站的赌注。用户现在希望每个查询都能得到快速、相关和个性化的结果。因此,当用户使用语音搜索时,他们希望得到完美的结果。

不幸的是,尽管用户期望很高,语音搜索的头号痛点是无法得到他们查询的正确答案。用户期望不会很快降低。因此,对于语音搜索来说,最重要的是快速达到与更传统的基于文本的搜索方法相同的相关性 的水平。

4。网站和网站内容正在针对语音搜索进行优化

许多公司已经在投资优化他们的语音搜索网站。不幸的是,有些人在其策略中过分强调了语音相关的 SEO 改进或特定语音搜索技能的编程。

实际上,为语音搜索做准备要多得多。它要求首先理解并优先考虑客户的需求,这样网站搜索和内容才能适应自然语言的需求。公司需要优先在自己的网站和应用上提供出色的搜索体验。

5。语音搜索正在向实体店蔓延

语音搜索不仅仅局限于个人设备;许多实体店也在利用这一优势。使用语音优先设备,如在实体位置的 语音信息亭 帮助客户定位物品,可以确保总有人在那里,以改善客户的实际体验。

未来使用语音搜索

随着语音搜索功能的不断扩展,客户表达需求的方式和公司满足这些需求的方式都将发生变化。语音搜索未来可能的发展方向包括:

  • 语音搜索会更加主动。

随着时间的推移,语音搜索设备将开始理解顾客可能在寻找什么,甚至在他们搜索之前。通过人工智能功能,搜索系统将能够学习客户偏好,并与相关背景(如位置、天气等)联系起来。向用户提出最有价值的产品和内容建议。

  • 语音搜索将取决于客户和公司对它的投资力度。

最终,语音搜索将继续受到用户选择如何将其融入生活的驱动。基于到目前为止的强劲采用,很明显用户看到了强大的自动语音识别(ASR)和自然语言处理(NLP)的价值。随着这种买入的继续,公司将被激励继续投资、改进和提供技术。

同样,语音搜索的未来取决于公司对它的接受程度。他们可以选择投入足够的资源,将虚拟助手的语音集成到他们的网站和应用程序中,确保助手生态系统可以互操作,并建立自己的助手。或者,他们可以采取简单的方法,只需在他们的移动应用程序上安装麦克风,或者只需插入现有的助手。

  • 语音搜索将有助于简化常见任务

随着人们越来越习惯于在公众面前与 Alexa、电视、我们的手机以及普通的计算机交谈,更平凡的“人类”或重复性任务将被交给计算机。这种情况将会发生,就像手机银行取代了去银行存款一样。家用设备已经可以执行诸如降低或提高温度或灯光以及打开厨房电器等任务。这项功能将继续扩展。

  • 语音搜索将会有无人探索的用途!

当然,语音搜索可能提供的功能还没有被想象出来。想象一下,去一家家装店,通过语音搜索获得产品推荐并找到这些产品。同样,在任何活动或景点购买门票也可以通过语音应用程序轻松完成。一旦技术赶上了用户的期望,语音搜索就前途无量。

语音搜索是你搜索策略的一部分吗?

语音搜索肯定会继续存在。确保 语音搜索 是你优化的、直观的网站搜索策略的一部分。

在我们的电子书 中阅读更多关于为语音搜索的未来做准备的信息 下一次技术革命即将到来

A/B 测试你的搜索相关性的 5 种方法

原文:https://www.algolia.com/blog/ux/5-ways-to-ab-test-your-search-for-relevance/

优秀的搜索应该尽可能快地引导用户找到他们的需求,但是为你的网站达到合适的相关性水平并不总是简单明了的,而且需要时间来做好。有了一个可靠的搜索即服务提供商,你的默认排名应该已经相当不错了。尽管如此,由于每个企业都是独特的,搜索变化会影响 KPI 和用户体验,您可能会想要衡量添加自定义排名因素、新属性等对您的整体搜索相关性的影响。

通过 A/B 测试,您可以利用数据实时验证您的决策,并满怀信心地对您的搜索进行更改。

什么是 A/B 测试?

A/B 测试是同时运行两个不同版本的用户界面组件,同时收集指标以确定对 KPI 的影响的过程。对于搜索工具来说,这在测试相关性算法和配置的变化时是有用的,因为有清晰的成功指标可以监控,例如点击率和转化率。

运行搜索相关性的 A/B 测试有几个步骤:

  1. 选择哪些指标和统计方法与测试及其结果相关
  2. 决定要回答的相关问题、要衡量的 KPI 和指标 以及它们与您提议的变革之间的关系。这可能包括你试图验证的假设。
  3. 同时运行两个版本的用户界面 来控制可变性。应该随机分配用户,以最小化任何统计噪声或偏差。确保您运行测试的时间足够长,以收集具有统计意义的数据。
  4. 分析测试结果这些指标是大幅增加了,还是下降了,还是保持相对稳定?这与历史数据相比如何?
  5. 行动起来! 如果测试结果表明 KPI 有所改进,那么就向所有用户推广这一变更。如果失败了,就放弃它,重新开始。

为什么要测试你的搜索?

搜索是在线体验的基础部分。事实上,Forrester research 发现,零售网站上的 43%的用户 会直接进入搜索栏。此外,由于谷歌和其他全球搜索引擎,用户期望在他们访问的每个网站上都有快速和高质量的结果页面。通过 A/B 测试优化的搜索体验通过帮助用户快速找到他们想要的东西并最终转化来促进用户参与。

A/B 测试是优化你的搜索框搜索体验的好方法:

  • 与用户输入 完美关联。优化搜索和调整相关性的目的是为用户提供更好的结果。通过 A/B 搜索测试,您的用户将直接参与到这个过程中。您可以跟踪用户如何与您的搜索互动,并根据真实的反馈而非猜测进行改进和更新。时尚平台 Videdressing 定期使用 A/B 测试 来验证从超过 100 万个产品目录中购物的顾客的产品变化。
  • 利用数据驱动的洞察力 。用户很难预测,A/B 测试结果有助于准确显示他们对变化的反应。当您针对一个可比较的控制组收集了足够的数据用于一个单独的变更时,您可以通过统计数据确信结果是有意义的,并从中做出可操作的决策。
  • 不冒风险获取知识。 A/B 搜索测试允许您对您的用户的代表性样本进行测试变更。由于您的大多数用户不会受到影响,因此您可以放心,收入和 KPI 也不会受到影响。

测试你搜索 A/B 的 5 种方法

鉴于搜索几乎适用于所有行业,有多种方法可以试验相关性规则和公式的变化,看看它们如何影响你的 KPI。这里有五个重要的测试类型的例子,你可以运行它们来改进这些指标:

1。查看社交证明数据如何影响您的搜索

在你的网站上利用 社交证明 对你的用户来说是非常有价值的,也是业务的重要数据点。在网站上展示喜欢、评论和意见可以提高访问者的兴趣、信心和参与度。它还可以向企业表明哪些产品或内容特别受欢迎、有用、有意义或受欢迎。因此,按照参与度对搜索结果页面进行排序通常是值得尝试的。

如果假设具有更多喜欢或分享的内容与用户更相关,那么您可以显示基于您现有排序行为的一个用户细分结果和根据参与度排序的另一个用户细分结果。跟踪这如何影响关键绩效指标,如点击率,以确定搜索结果实际上是否与用户更相关。

2。了解新的可搜索属性如何影响您的搜索相关性

当您修改文档结构时,索引内容通常会随着时间而变化。例如,如果您添加了一个额外的属性,比如“简短的产品描述”,那么这个内容可能会影响用户探索和使用它的方式。

因此,您可以尝试在搜索词和查询中包含这些内容,并改变该字段相对于其他字段的提升程度。如果提升新属性显示 KPI 相对于现有搜索算法的改进,那么它可能有助于搜索结果的更好相关性。

3。比较包含和不包含商品的查询如何执行

搜索营销 是一个强大的机制,用于推广对你的商业战略很重要的产品。然而,推广特定产品会影响搜索结果的相关性。

因此,在整个网站开展营销活动之前,A/B 对照控制测试变化,以首先了解它如何影响 KPI,这可能是有价值的。例如,您可以 A/B 测试一种销售技巧,如当用户键入类别名称时提升类别,以了解其表现如何。如果提升类别对点击率有负面影响,那么你可能会认为不值得向其他用户推广这一活动。

4。对比带有和不带有个性化的搜索

个性化 允许您根据用户的历史数据定制搜索结果。这可能包括过去的搜索、添加到购物车的产品、购买或其他相关指标。由于每个用户都有自己独特的需求和偏好,这对于让他们更快地找到相关内容是很有价值的。然而,有许多方法可以将个性化因素分层,因此 A/B 测试这些变化以了解它们如何影响 KPI 是很重要的。

例如,您可能假设向用户展示与过去购买相关类别的产品会增加他们的购买倾向。通过 A/B 测试这一理论,你可以相信,相对于你现有的算法,这种改进确实增加了转化率——或者你可以尝试不同的个性化方法。

迪卡侬新加坡公司使用 A/B 测试来衡量个性化对每个搜索词和查询的影响。他们的测试显示,个性化查询 的转化率提高了 50%,这使他们能够找到不同属性的个性化平衡。

5。从您的排名公式中添加和删除一些标准

搜索排名标准过多或过少之间有一个微妙的平衡。拥有大量参数似乎是一个好主意,因为您可以根据客户的需求高度调整结果,但这可能会导致范围过于狭窄,并降低您处理多样化客户群的灵活性。相反,一个宽泛而简单的排名公式可能在范围上是灵活的,但是它可能太笼统而不能给你的用户提供相关的结果。没有一个放之四海而皆准的方法来优化这种平衡,因此应该使用 A/B 测试来确定添加或删除这些标准会如何影响所有用户的相关性。

开始为您的搜索设置 A/B 测试

A/B 测试搜索对于所有拥有用户经常浏览和探索的内容目录的网站都很重要。你的用户看到的结果越相关,他们就越有可能保持参与并继续使用你的服务。要做到这一点,您需要一个搜索即服务提供商,它提供所有必要的工具来 运行有效的 A/B 测试

观看我们的大师课 ,了解 Algolia 如何帮助您为您的搜索进行稳健而成功的 A/B 测试。

选择网站搜索工具时需要考虑的 6 个特性

原文:https://www.algolia.com/blog/product/6-features-to-consider-when-selecting-a-site-search-tool/

Web 近年来,网站和应用内搜索功能变得更加强大。随着消费者开始在亚马逊(Amazon)等电子商务网站上享受更快、更高质量的搜索,他们也开始期望能够即时访问其他网站和平台的内容。他们不想等待,也不想玩侦探游戏来导航到他们需要的项目。

因此,网站和应用必须为用户提供无缝的搜索体验。购物者需要能够快速搜索、访问和接触他们想要的产品和内容。如果你的网站搜索很慢,提供了错误的内容,或者受到用户体验挑战的困扰,潜在客户会去看看你的竞争对手是否提供了一条更容易的路径。这一点之所以重要,背后的驱动力在于数字:使用现场搜索的购物者的转化率比不使用现场搜索的购物者高出近 2 倍。 没有创新的解决方案和战略,你将失去收入和客户群。

对于是应该在内部开发解决方案还是寻找供应商,公司经常会陷入“分析瘫痪”。每条道路都可以带来网站搜索的增长,但两者之间的财务差异是有形的。第三方工具通过开发五个功能将 搜索成功率提高了 7-8%。这是一个显而易见的差异,但在此之后,通过第三方工具取得高度成功的公司数量比使用内部开发工具的公司多 20 个百分点。

您利用的任何解决方案都必须能够快速轻松地部署。它还应该是可扩展的,带来底线增长,等等。

看看这些必备的搜索功能,可以帮你找到合适的平台:

1。提高了搜索结果和内容页面的加载速度

客户总是在不断变化,对于不与他们一起变化的公司来说,这可能是代价高昂的。近四分之三的美国消费者不会等待 5 秒钟来加载网页。 加剧这一挑战的是,页面加载速度每延迟 1 秒,公司每天就会损失约 250 万美元。

搜索结果页面加载速度与内容页面加载速度有什么关系?它们是网站性能和用户体验的两面。用户宁愿离开你的网站,也不愿等待一个缓慢的页面加载,不管这个页面是搜索结果页面还是内容页面。考虑到客户使用的各种设备,以及他们是通过语音还是通过查询进行搜索,确保最佳的网站性能成为一项挑战。

好的供应商不仅意识到这一点,他们还能为你提供策略和技术能力,确保你的搜索结果页面和内容页面的加载速度是完整的,并且紧密结合在一起。这些方面不应该被认为是用户体验的独立组成部分。客户可能会等待几秒钟来加载一个内部搜索引擎结果页面 ,但是一旦他们点击了一个内容页面,如果他们不得不再等待几秒钟来加载页面,他们很可能会放弃,而你的竞争对手将会收获他们的挫败感。

2。语音搜索

语音搜索已经成为网上购物客户体验中无处不在的一部分。目前,全球 27%的在线人口使用移动语音搜索。 这是全球超过四分之一的消费者,他们在任何时候都会拿起智能手机向消费者提问。

每个电子商务网站都需要一个内部搜索引擎,能够利用语音搜索将购物者的口头意图转化为推动销售的相关内容。想象一个场景,一个顾客正在使用你的网站的语音搜索功能寻找一件红色的衬衫。糟糕的语音搜索可能会让搜索引擎寻找“redd shirt”或“read shirt ”,这将不会提供任何结果,并产生一个沮丧的购物者。一个供应商必须能够在你的搜索 网站的整体功能中充分集成这项技术,为用户提供相关的、适用的结果。

根据 Review42 的一项研究,从 2016 年到 2018 年,语音搜索在千禧一代、x 世代和婴儿潮一代中的使用越来越多。 此外,研究显示,98%的 iPhone 用户和 96%的 Android 手机用户使用 Siri 和 OK Google 作为他们搜索体验的一部分。 越来越多的人使用语音搜索,这凸显了与能把它融入网站用户体验的供应商合作的重要性。

3。人工智能工具

48%的智能手机用户和 64%的平板电脑用户预计未来会更多地使用这些设备的语音搜索工具。⁷然而,70%的消费者抱怨说语音搜索并不总能提供他们想要的结果。t38】

决定客户语音搜索体验好坏的因素是什么?人工智能!人工智能是将用户的语音搜索查询转换成相关结果,并对附加内容提出建议。例如,在“红衬衫”的例子中,AI 可以有效地搜索并列出网站上所有的红衬衫,以及可能与它搭配的裤子和鞋子。它甚至可以根据顾客的搜索和购买历史来预测他们可能想要什么。

当你与供应商接洽时,寻找那些提供 人工智能网站搜索 的供应商,这些搜索足够先进,能够真正了解客户并理解他们在寻找什么。一个好的人工智能解决方案提供语义和自然语言理解(NLU)工具,以确定搜索背后的意图,并帮助用户更快地找到他们想要的东西。基于同义词的解决方案将用户搜索请求中的形容词与相似的术语进行匹配。“red shirt”查询不仅会提供红色衬衫,还会显示类似颜色的衬衫,如深红色和猩红色,即使描述中不包含单词“red”或其任何变体。卓越的人工智能解决方案可以更快地呈现相关内容,以推动销售。

4。个性化体验的交付

两项统计数据强调了人们对个性化体验的日益关注,这两项统计数据解释了它们对购物者的影响:

  • 80%的客户将网站的用户体验等同于公司的产品和服务
  • 当用户体验根据他们的购物偏好量身定制时,48%的用户会花更多的钱

那么,如果一个更加定制化的 UX 能带来近 50%的销售增长,再加上一个积极的品牌印象,那你怎么能做到呢?答案是 分析

分析可以通过查看客户的搜索历史(以及浏览和购买记录)来阐明他们想要什么,然后建议相关的个性化内容。现场搜索空间中的供应商应专注于帮助您的客户获得的卓越体验。这意味着在如此精细的水平上利用分析(人工智能的最终阶段),就好像根据内容、销售和其他因素,每个用户都真正获得了自己的个性化体验。将更受欢迎的内容直接呈现在消费者面前会带来更大的收入。

5。移动优化搜索

近一半的网络流量来自移动设备,在 2020 年第二季度,仅手机就占了该流量的 51%以上。 最近的一份 爱立信移动报告 预测到 2025 年移动流量将增长 25%。

越来越多的客户使用移动设备来寻找他们想要的内容,销售和营销团队不应该认为他们只通过谷歌搜索来寻找。品牌忠诚者,甚至那些把你的公司作为考虑因素的人,会直接去你的网站(或应用程序)搜索。移动友好还不够。您的内部搜索功能需要针对 移动 进行全面优化,以利用消费者日益增长的使用设备进行搜索的需求。

当你浏览市场时,寻找那些能让你超越标准的现成解决方案的搜索供应商。询问供应商,他们是否有能力针对客户使用的各种移动设备优化您的内部搜索功能。这包括拥有一个易于访问和使用的搜索栏,以及包含建议或相关结果的能力。

“错别字容忍度”是针对用户输入错误字母或数字的另一个关键要素。将移动搜索栏与用户体验结合起来的策略推动了手持设备的成功。搜索必须在 iPhones 和 Android 手机上,在应用程序中,以及在不同的网络浏览器中都能很好地运行,并且必须在必要时自动调整搜索结果。

6。基于用户分析的适应性搜索性能

分析在谷歌上使用的搜索词是数字营销的基石之一,也是了解客户的最有效策略之一。

那么,为什么只有 7%的公司通过查看 内部 搜索数据来了解他们的客户呢? 检查内部数据的基本好处是显而易见的:在一项研究中,只有 30%的网上购物者利用了公司的现场搜索工具,而这些购物者转化的频率是普通人的 6 倍。t24】

最好的网站搜索例子应该是多方面的。是的,他们应该将用户与被查询的内容联系起来。但现代供应商也应该提供使用人工智能和分析的搜索功能,以不断了解客户在寻找什么,重点是关键词和模式。

随着时间的推移,公司将能够根据用户先前的查询,在搜索结果中有策略地提供产品和服务。在某些情况下,他们甚至能够在客户开始输入搜索词之前,根据过去的搜索来推荐内容。分析甚至可以围绕用户参与度和销售额提出业务见解,以帮助公司重组其内容计划,从而更有效地实现其关键绩效指标。

关于阿哥利亚

Algolia 是搜索和发现领域的领导者,提供一套现场搜索解决方案,将您的内容和产品组合起来,提供更吸引人的用户体验。

Algolia AI 是一个用自学习 AI 搭建的搜索云平台。它分析数以万亿计的搜索结果,以更好地理解用户意图,分析参与度指标,并解释打字错误。它甚至利用自然语言处理(NLP)来支持多语言查询。语音搜索产品提供了更个性化、更精确的客户体验,可以在移动、网络和语音优先平台上快速实施。

知道向供应商询问什么是提升你的网站搜索功能的第一步。

今天就注册免费试用 Algolia 的,探索更好的搜索策略如何为更好的用户体验提供动力 驱动您的底线!

6 种利用电子商务推荐的方法,作为搜索的一部分

原文:https://www.algolia.com/blog/product/6-ways-to-leverage-recommendations-for-ecommerce-retailers/

在电子商务平台上设计一流的购物体验时,我们必须考虑每个接触点的用户体验。我们已经确定了用户在电子商务网站或应用程序上发现产品时的两种基本行为类型:

  1. 搜索:通过在页面的搜索栏中输入查询进行发现
  2. 浏览:发现模式,包括搜索之外的任何其他活动,例如导航到不同类别的页面,点击横幅,过滤和排序产品列表页面上的结果,等等

毫无疑问,搜索在电子商务网站的最终用户体验中扮演着核心角色。有效的搜索解决方案对关键销售业绩指标的影响不可低估。有多种方式可以增强和优化平台上的搜索和发现体验,以适应各种电子商务用户旅程场景:

  • 添加建议搜索,让用户从最流行的搜索查询中进行选择。
  • 应用个性化,以确保始终为用户呈现与其独特偏好最相关的结果。
  • 激活人工智能同义词建议,让您的用户使用不同的词来搜索相同的产品。
  • 在顾客旅程的每个接触点添加建议。搜索和推荐是互补的产品。当一起使用时,它们能够为电子商务平台用户提供一流的发现体验。

结合搜索和推荐的引擎功能

在下面的例子中,体育用品时装零售商 Gymshark 除了使用 Algolia 搜索来支持 Gymshark 的网站之外,还使用由机器学习支持的 Algolia 推荐 API 来增加收入:

Gymshark 的成功指标:

  • 在黑色星期五,新用户的订单率增加了 150%,而“加入购物车”率增加了 32%
  • 回头客的订单率和“加入购物车”率分别提高了 13%和 10%
  • 每用户 1.4 次点击,而之前的解决方案为 1.1 次

了解领先的电子商务零售商如何利用人工智能推荐引擎的能力来实现他们的数字销售目标: Gymshark 增加了 Algolia 推荐来处理关键的黑色星期五期间

利用不同接触点的建议

推荐是利用人工智能能力提高可发现性、追加销售相关或经常一起购买的产品、增加平均订单量和提高收入的明智方式。

有多种方法可以在类别页面及其他页面上使用推荐:

  • 首页。 当用户登陆主页时,他们会看到一个动态的产品转盘,上面有推荐的产品,它会根据用户的需求调整推荐。
  • 类别列表页面或产品列表页面。 可在类别页面上展示推荐,以增加平均订单价值和每个订单的商品数量。

例如,在一个以跑鞋为特色的分类页面上,用户可以看到经常与跑鞋一起购买的商品的推荐,比如袜子。

  • 产品描述页面。一旦用户登陆一个产品描述页面,他们可能会对提供相似的产品或经常一起购买的产品感兴趣。

例如,用户点击了一件浅蓝色的 t 恤。他们不确定这个产品是否完全符合他们的风格。他们注意到“相似产品”图库下有一件相似的模糊 t 恤,正是他们正在寻找的,于是将它添加到购物车中。此外,他们在“经常一起购买”图库下看到了一条短裤,这是与他们的 t 恤相匹配的套装的一部分,并决定将该产品添加到他们的购物车中。

  • 添加到购物车页面。一旦用户将产品添加到购物车中,追加销售的机会就出现了。人工智能生成的推荐可以帮助你提供合适的产品,以匹配你的用户已经表现出购买意向的商品。
  • 结帐页面。 结账页面是使用人工智能推荐引擎追加销售类似或相关产品的额外机会

例如,一个用户在购物车中添加了一条牛仔裤和一件衬衫,现在准备结账。你的商店为超过 99 美元的订单提供免费送货,但这位顾客的订单低于免费送货的最低限额。这是一个推荐额外产品的机会,例如搭配腰带、袜子或帽子。这对公司来说是一个双赢的局面,获得更多的收入和订单量,对客户来说,以免费送货的形式获得折扣。

  • 邮件推荐。有时,用户会放弃虚拟购物车,对尚未上市或暂时缺货的产品表现出兴趣,或者只是点击商品而不进行购买。通过使用人工智能推荐引擎向他们发送相关产品的电子邮件推荐,您可以重新介绍或提醒他们引起他们注意的商品。

结论

利用客户旅程中多个接触点的推荐功能,并将其与高级搜索功能相结合,使电子商务零售商能够在其平台上为用户提供卓越的用户体验。实施建议有助于提高订单率、“加入购物车”率、平均订单价值和每份订单的商品数量。

要了解如何以最小的努力在您的电子商务网站上实现产品推荐,请查看这个简短的 现场编码视频记录

要了解如何在高重要性销售活动中利用产品推荐,如黑色星期五,请参考: 可组合商务如何在黑色星期五和网络周 期间促进客户消费。

关于 B2B 零售推荐实施,请参考 B2B 商务数字化转型:营销和 AI 优化

7 个伟大的网站搜索用户界面的例子

原文:https://www.algolia.com/blog/ux/7-examples-of-great-site-search-ui/

伟大的搜索不仅仅是主页上的一个框,你的网站开发者一直坚持要把它包括在内。经过适当的设计和优化,用户界面可以成为一个强大的门户,将您的用户与他们的需求联系起来,甚至是他们尚未发现的需求。一个设计良好的搜索界面是帮助用户保持参与并轻松找到他们想要的东西的好方法。

为什么搜索 UI 设计要紧

虽然今天大多数网站都有搜索栏,但许多网站并没有提供全面的搜索体验。 伟大的搜索超越了搜索栏 包括了一系列的功能、结果的相关性和设计。那么,为什么仔细关注你的搜索用户界面很重要呢?

嗯,搜索界面可能是你的用户在你的网站上互动的第一件事。这可能会影响他们对你的产品的印象,他们对你的品牌的认知,以及他们对你的网站的整体体验。只看以下统计:

Search Ui matters

另外,搜索的用户 转化 的可能性比浏览的用户高 200%。如果你的界面很难使用并且提供无用的结果,你的网站就不能从搜索中获益。优化网站搜索的功能和用户界面会让访问者更加满意,并提高转化率、参与度和粘性。

相关链接–

  1. 了解 Algolia 的所有预建 UI 组件
  2. 来自 Algolia Code-exchange 的 UI 启动模板
  3. 【react、angular、vue 和 mobile 的预建 UI 设计套件。

7 恒星搜索 ui 的例子

有许多搜索 UI 组件,您可以对其进行微调,以提供有益且吸引人的体验。搜索栏的设计和功能、搜索结果页面的布局和功能、搜索过滤器和方面等都可以针对您的特定用例进行优化。让我们来看看 8 个定制了搜索用户界面来为用户提供最佳服务的网站。

1。with microcopy 的有用提示和建议

Microcopy是网站上帮助用户导航和使用界面的简短而有用的文本的术语。通过确保用户理解不同搜索组件的意图,Microcopy 提高了网站的可用性。

birch box使用搜索栏中的 microcopy 向用户传达搜索品牌和产品都会得到结果。该网站还在搜索栏下方使用 microcopy 搜索建议。通过在顾客很难错过的地方突出目标品牌,这可能是公司推动业务目标的一种战略方式。

Birchbox uses microcopy
注—创建动画占位符文本的开发人员指南

2。卡地亚—一致的搜索栏位置

对于某些网站,导航是突出产品的主要方式。即便如此,搜索也不应该被忽视。虽然搜索可能在位置和样式上不太受重视,就像在 卡地亚 的网站上一样,但将搜索栏放在用户习惯找到它的地方仍然很重要。卡地亚的搜索栏很小,对比度极低,但不管是哪一页,都可以在右上角找到,就在用户期望找到的地方:

Cartier - consistent search bar placement

3。ManoMano —自动完成或查询建议

自动完成查询建议 ,也称为预测搜索或自动建议,是在用户键入时实时给出的搜索建议。这些建议与用户的查询和/或网站上的热门查询上下文相关,旨在通过加快搜索过程和增加点击率来满足用户的需求。当用户在 的搜索栏中键入 ManoMano 时,他们会得到具体的产品建议以及更广泛的类别建议。为了帮助用户快速选择最适合他们的选项,建议之间的差异以粗体显示。

ManoMano - autocomplete and query suggestion
注—创建预测性搜索建议的开发者指南

4。JB Hi-Fi —从搜索栏进行即时过滤

搜索过滤器和方面 帮助用户在浏览你的网站时提炼他们的意图。方面过滤器,通常显示在搜索页面上, 帮助用户使用预定义的类别缩小搜索范围 。这对于大型目录或产品具有许多不同属性的目录非常有用。为了指导用户,JB Hi-Fi 利用搜索栏下拉菜单来利用 facets。当客户搜索大类别的商品(如电视)时,会出现过滤器类别,帮助用户从搜索体验的开始就指定他们的搜索。

JB Hi-Fi — Instant filtering from the search bar
注—为电子商务商店创建自动选择方面的开发人员指南

5。Birchbox —联合搜索的综合结果

通过 联合搜索 ,您可以在一个易于使用的界面中为用户提供多样化的结果,如产品、文档、产品指南、文章等。这为公司带来了 诸多好处 ,包括更好的客户参与度和更高的转化率。

只需在birch box网站上敲几下键盘,顾客就能看到相关的产品、顶级品牌、有用的类别和相关的文章。这创造了更全面的搜索体验,可以大大减少搜索时间。联合搜索还可以加强客户对品牌的感知,因为策展背后的思想水平对用户来说是显而易见的。

Birchbox — Comprehensive results with federated search
注—开发人员使用联邦搜索创建自动完成体验的指南

6。国家地理探险——动态浏览体验的方方面面

虽然 facets 可以很好地缩小搜索结果的范围,但它们也为探索性的导航体验提供了强大的基础。 【国家地理探险队】 利用 facets 提供独特的浏览体验,引导用户浏览内容,无需搜索栏。在 expeditions 主页上,用户可以根据目的地、旅行类型和出发月份来搜索旅行。

在结果页面上,他们可以根据价格、行程长度、兴趣等方面进一步细化搜索。这些方面很容易调整,不需要用户从头开始搜索。所有这些都可以在用户不需要在搜索栏中输入的情况下完成。最终,你的搜索用户界面应该以一种最符合你的用户需求和你想要为他们策划的体验的方式来设计。

Facets for a dynamic browsing experience

7。安德玛——有用的“没有结果”页面

一般来说,“没有结果”的页面都是 UX 死角,可以通过优化你的搜索来避免 。不过,有时用户会搜索与你的网站无关的产品或内容,或者他们会键入无法理解的搜索查询,而 系统无法恢复这些查询。当这种情况发生时,为用户提供一条快速返回到他们的搜索和发现过程的途径是很重要的。

安德玛 的网站上,如果出现这种情况,会向用户显示与其原始查询相关的搜索推荐以及具体的产品推荐。虽然他们最初的查询可能不成功,但搜索巧妙地引导他们发现他们可能感兴趣的新东西

Under Armour — Useful “No Results” page

设计一个搜索 UI,平稳地引导用户找到他们的需求

设计搜索 UI 时,必须考虑用户旅程和探索过程的每一步。为了提供您的用户期望的服务级别,您需要一个 搜索即服务 合作伙伴,帮助您以灵活和可定制的方式提供所有行业标准功能。阅读我们的电子书“ 超越框框的搜索 ”来学习如何开始为你的用户构建一个伟大的搜索设计。

相关链接–

  1. 了解来自 Algolia 的所有预建 UI 组件
  2. 来自 Algolia Code-exchange 的 UI 启动模板
  3. react、angular、vue 和 mobile 的预建 UI 设计套件

如何建立顶级媒体行业网站搜索体验

原文:https://www.algolia.com/blog/product/7-tips-building-exceptional-media-industry-site-search-and-discovery/

搜索是媒体公司经常忽视的一个话题。我们大多数人都会将搜索这个词与 Google/Bing/DuckDuckGo 等搜索引擎联系在一起。这些有机渠道通常是访问者(有时是内部团队成员)搜索内容目录的方式。但是现在是时候认真考虑一下你的内部网页搜索功能和体验了。

优化内部搜索体验有很多原因,比如:

  • 它揭示了清晰的投资回报,因为它补充了社交媒体和外部搜索。
  • 它有助于阐明用户意图,让你了解导航问题和内容需求。
  • 它如何通过向访客展示更多内容来展示你的产品目录的深度
  • 事实上,优化的搜索使访问者能够找到问题的解决方案,这意味着他们总体上更快乐。
  • 它让记者能够在自己的频道上发现内容,而不是外部频道。

好消息是为媒体网站或应用创造一个优化的网站搜索体验可能比你想象的要容易。

实现一流搜索和发现体验的 7 个技巧

提示 1:了解你的用户意图

你的目标可能是让用户消费内容。然而,在构建该内容的理想路径之前,您必须澄清用户意图:

  • 他们是否在寻找特定的内容,例如“昨天的英超比分”?
  • 他们是否在研究某个特定的话题或主题,例如“环保的生活方式”?
  • 或者他们在寻找灵感?了解新闻吗?

每个用户的意图通过不同的发现模式来解决:搜索、引导发现或推荐。确定所有用户搜索背后的特定意图和动机非常重要。请确保您花时间规划出这一点,然后单独为每个用户服务。

提示 2:审核你的内容目录

  • 与短期内容相比,您有多少长期内容?
  • 在您的实时内容中,今天实际使用的内容占多大比例?
  • 是否有机会向爬虫索引展示更多内容,也许是重新展示历史档案或添加新的合作伙伴内容?

这些类型的问题将帮助您确定发现策略的优先顺序。

最重要的是,你的元数据的质量(出版日期、主题、题目等)。)对于确保良好的用户体验至关重要。请明确哪些属性将决定您的内容在被查询时的排名。想一想你的内容目录的独特之处,比如新鲜度、特定的利基、短小精悍的内容、独特性等等。

提示 3:确定你的优先事项、KPI 和北极星指标

为了打造出色的搜索和发现体验,你需要清楚自己的优先事项和关键指标。也许这是为了增加花费的时间,增加参与度,以支持基于广告的模式。或者可能是增加高级订阅。

媒体公司经营几种商业模式并不罕见:基于广告的、基于订阅的、甚至是电子商务的。此外,优先级、目标和主要指标可能会随着时间的推移而改变。常见的视频行业点播模式包括 AVOD(基于广告的视频点播)、SVOD(订阅视频点播)和 TVOD(交易视频点播)。确定您的主要模型和目标对于构建出色的用户体验以实现这些目标至关重要。

为了实现你的目标,考虑:

  • 参与和发现模式,如相关内容推荐,或使用建议标签的主题提炼。
  • 构建内容发现小部件,让您能够从第三方和合作伙伴网站上浏览您的内容目录。
  • 个性化推荐和其他吸引忠实用户的方式。帮助他们发现新内容,并从您的平台中获得更多价值。

技巧四:构建你的发现地图

确定您的目标和核心指标后,您应该构建反映您的目标和具体需求的发现图。这里有一个模板和例子可以使用。

  • 在 X 轴上:描述你不同的内容类型:新鲜的新闻和简短的阅读,报道和长篇,档案,小众内容等。
  • Y 轴:你的各种用户或角色的意图
  • 在这个矩阵的每个内容类型框中,你描述一个“发现场景”。例如,什么是更好的接触点(如“搜索框”、“发现标签”或“主页”),或者什么是你的内容最重要的排名标准(如“出版日期”和“主题”),和/或什么是补充你的北极星指标的 CTA(如“阅读另一篇文章”或“登录”)

| | 内容类型 1 | 内容类型 2 | 内容类型 3 |
| 用户意图 A | 发现场景=

  • 首选接触点
  • 最重要的内容属性
  • CTA

| 发现场景=

  • 首选接触点
  • 最重要的内容属性
  • CTA

| 发现场景=

  • 首选接触点
  • 最重要的内容属性
  • CTA

|
| 用户意图 B | | | |
| 用户意图 C | | | |

提示 5:评估你现有的搜索和发现

接下来,审核您现有的设置。从评估您的各种发现场景开始,并注意它们的优缺点。

以下是在整个审计过程中需要评估的其他项目的示例。你是怎么管理的:

  • 错别字?例句:“我想看拉拉兰德”
  • 宽泛的查询?例句:“我想看浪漫喜剧”?
  • 自然语言查询?例句:“我想看电视连续剧”?

还有很多。记住:你对现有搜索的缺点和机会分析得越好,你就能越快地优化它们。

技巧六:在 AI 主导和人类主导的策展中找到合适的平衡点

整个媒体行业的监管策略千差万别。虽然出版商通常严重依赖编辑团队,但视频平台通常是由算法控制的。做这件事没有对错之分;找到平衡是关键。

例如,人工智能可以是一种展现你在内容发现地图中概述的内容的方式。在你已经考虑的发现场景中,思考人工智能如何帮助增强你的团队的工作。它可以弥补差距或节省编辑时间。找到这种平衡可以提高效率,关注质量。

有许多不同的方式来利用人工智能,这里有一些。可以:

  • 利用各种推荐模型完全驱动内容块或行
  • 用于手动管理的区块之上,根据其受欢迎程度对内容进行动态重新排序
  • 通过利用意图检测和显示内容或类别的个性化建议,缩短获取内容的路径

提示 7:选择适合你的解决方案

遵循本文概述的提示后,您将能够更好地为您的企业和团队选择合适的解决方案。您的实现是否包括构建自己的搜索和推荐引擎,或者是否包括从为开发人员设计的外部平台构建,或者您可能会购买现成的站点搜索解决方案。

在做出这些决定时,这里还有一些在该阶段很重要的考虑因素。

  • 从短期和长期可扩展性的角度考虑您的独特需求。例如,在地理足迹、扩张和管理观众高峰的能力方面,并非所有的解决方案都是相同的。
  • 同样,在考虑如何构建和维护所选择的架构和服务时,要理解您团队的独特情况。如果在内部构建东西看起来是你最好的决定,考虑维护、扩展和处理常规的变更请求以及开发特性和迭代需要什么。
  • 思考发现的未来:你今天对发现地图的定义可能会像消费者的行为一样迅速发展和变化。考虑一个经得起未来考验的解决方案,使您能够始终如一地为客户(和团队)提供最愉快、最有价值的体验。

我们希望这些技巧能帮助你为你的客户和团队创造最佳体验。祝您在规划、审核和创造独特的搜索和发现体验方面好运。这是值得的,因为有效的搜索和发现将有助于吸引你的网站访问者,并将他们转化为长期粉丝。

如果您想了解更多关于如何根据您独特的受众和情况打造最佳搜索、发现和推荐体验的信息,您可以联系我们的专家团队。我们非常乐意和你聊聊。

Kubernetes 最佳实践-来自过去的爆炸(radius )

原文:https://www.algolia.com/blog/engineering/8-algolia-tested-best-practices-kubernetes/

我们大约在四年前开始使用 Kubernetes。我们有新的服务要部署,即使我们是裸机的大用户,我们也需要更多的灵活性。因此,我们决定在新系统上测试和使用 Kubernetes。两年后,我们的大多数产品都部署在 Kubernetes 上,遵循 Kubernetes 的最佳实践。随着越来越多的团队开始在内部使用它,我们创建了一个内部培训。今天,我们很自豪地将这个培训开源,这样任何人都可以从中学习并做出贡献。

实施两年后,我们从培训中提取了八个实践,我们认为这八个实践是正确使用 Kubernetes 的关键。我们重新发布这些 Kubernetes 最佳实践,作为过去的一个亮点,并为未来关于我们和 Kubernetes 在过去两年中如何发展的文章奠定基础。

1。不要在容器中使用 root 用户

容器范式,以及它在 Linux 上的实现方式,并没有考虑到安全性。它的存在只是为了限制资源,比如 CPU 和 RAM,就像 Docker 的文档解释一样。这意味着你的容器不应该使用“根”用户来运行命令。在容器中运行程序与在主机上运行程序几乎是一样的。如果你有兴趣了解更多,查看这篇文章了解原因。

因此,在所有图像上添加这些行,使您的应用程序由专门的用户运行。将“appuser”替换为与您更相关的名称。

ARG USER=appuser # set ${USER} to be appuser
addgroup -S ${USER} && adduser -S ${USER} -G ${USER} # adds a group and a user of it
USER ${USER} # set the user of the container
WORKDIR /home/${USER} # set the workdir to be the home directory of the user

这也可以通过 pod 安全策略在集群级别得到保证。

2。处理“SIGTERM”信号

每当 Kubernetes 想要优雅地停止一个容器时,它就发送“SIGTERM”信号。您应该监听它,并在应用程序中做出相应的反应(通过关闭连接、保存状态等)。)一般来说,遵循十二因素应用建议被认为是良好的实践。另外,不要忘记在您的 pod 上配置 terminationGracePeriodSeconds 。默认值是 30 秒,但是您的应用程序可能需要更多(或更少)的时间来正确终止。

3。对您的清单使用声明式管理

使用声明性清单,这样可以有效地回滚代码和基础结构。这意味着您的源代码版本应该是您的清单的真实来源。

这意味着您只使用kubectl apply来更新或创建您的 Kubernetes 资源,但也意味着您不使用latest标签作为您的图像容器。容器的每个版本都应该是独一无二的,使用 Git 散列是一个很好的实践。当部署应用程序的新版本时,应该通过为容器指定新版本来更新清单,然后在源代码控制中提交清单,最后运行kubectl apply

4。Lint 你的清单

YAML 是一个棘手的格式。我们使用 yamllint ,因为它支持单个文件中的多文档。

你也可以使用 Kubernetes-specifics 棉绒:

  • kube-score 检查您的货物清单,并强制执行良好做法。
  • kubeval 也检查清单,但是只检查有效性。

在 Kubernetes 1.13 中, --dry-run选项出现在kubectl 上,它让 Kubernetes 检查您的清单而不应用它们。您可以使用此功能来检查您的 YAML 文件对于 Kubernetes 是否有效。

5。配置活动和就绪探测器

活性和就绪性是应用程序向 Kubernetes 传达其健康状况的方式。配置这两者有助于 Kubernetes 正确处理您的 pod,并对状态变化做出相应的反应。

活性探测器在这里评估容器是否仍然是活性的;也就是说,如果容器没有处于中断状态、死锁或任何类似的状态。从那里,它可以作出决定,如重新启动它。

准备就绪探测器在这里检测容器是否准备好接受流量、阻止首次展示、影响 Pod 中断预算(PDB)等。当您的容器被 Kubernetes 设置为接收外部流量时(大多数情况下,当它是一个 API 时),它特别有用。

通常,具有相同的就绪性和活性探针是可以接受的。但是在某些情况下,您可能希望它们有所不同。一个很好的例子是运行接受 HTTP 调用的单线程应用程序(如 PHP)的容器。假设您有一个需要很长时间处理的请求。您的应用程序不能接收任何其他请求,因为它被传入的请求阻塞了;因此它还没有“准备好”。另一方面,它正在处理一个请求,因此它是“活动的”。

另一件要记住的事情是,您的探测器不应该调用您的应用程序的依赖服务。这可以防止级联故障。

6。配置资源请求和限制

Kubernetes 允许您配置 pods 资源的“请求”和“限制”(CPU、RAM 和磁盘)。配置“请求”有助于 Kubernetes 更容易地调度您的 pod,并更好地在您的节点上打包工作负载。

大多数时候你可以定义"request" = "limit"。但是要小心,因为你的吊舱将被终止,如果它超过了limit

除非您的应用程序被设计为使用多个内核,否则最佳实践通常是将 CPU 请求保持在"1"或更低。

7。指定 pod 反关联性

当您部署一个具有大量副本的应用程序时,您很可能希望它们均匀地分布在 Kubernetes 集群的所有节点上。如果你所有的豆荚都在同一个节点上运行,而这个节点死了,这将杀死你所有的豆荚。为您的部署指定一个 pod 反关联性可以确保 Kubernetes 跨所有节点调度您的 pod。

一个好的做法是在节点的主机名上指定一个podAntiAffinity:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: my-application
spec:
 replicas: 2
 selector:
   matchLabels:
     app: my-application
 template:
   metadata:
     labels:
       app: my-application
   spec:
     containers:
     - name: my-pod
       image: my-image:my-version
     affinity:
       podAntiAffinity:
         preferredDuringSchedulingIgnoredDuringExecution:
           - labelSelector:
               matchExpressions:
                 - key: app
                   operator: In
                   values:
                     - app: my-deployment
             topologyKey: kubernetes.io/hostname

这里我们有一个带有两个副本的部署“我的应用程序”,我们指定了一个带有软需求的podAntiAffinity规范(preferredDuringSchedulingIgnoredDuringExecution,更多细节请参见这里的),所以我们没有在相同的主机名(topologyKey: kubernetes.io/hostname)上调度 pod。

8。指定 Pod 中断预算(PDB)

在 Kubernetes,豆荚有一个有限的寿命,可以随时终止。这种现象被称为【颠覆】

中断可能是自愿的,也可能是非自愿的。顾名思义,非自愿中断是指任何人都无法预料到的事情(例如硬件故障)。主动中断是由某人或某事发起的,如节点升级、新部署等。

定义“Pod 中断预算”有助于 Kubernetes 在发生自愿中断时管理您的 Pod。Kubernetes 将努力确保与给定选择器匹配的足够多的资源同时保持可用。指定一个 PDB 可以提高服务的可用性。

结论

四年前,我们使用这些优秀的默认设置,并将它们应用到我们在 Kubernetes 的所有应用程序中。我们建议您根据应用程序和工作负载的具体情况调整实践。

您可以在培训的专门部分找到关于这些良好实践的更多详细信息。

[8 个技巧]如何使用数据驱动的搜索和发现增加收入

原文:https://www.algolia.com/blog/ecommerce/8-tips-how-to-grow-revenue-using-data-driven-search-and-discovery/

头条新闻告诉我们衰退仍在持续,但这并不意味着你的零售业务只能听天由命。有创新的方法可以从每一次客户互动中获得更多。这就是人工智能和数据驱动方法可以发挥作用的地方。在本文中,我将分享 8 个使用数据驱动的站点搜索和发现来提高底线的例子。

把最大的卖家推上榜首

你想最大限度地提高人们每次购物的机会。一种方法是在每个类别和每个网站搜索中推广最好的商品。

像 Algolia 这样的搜索引擎会自动为你的现场搜索和现场收藏完成这项工作。无论访问者是使用你的网站搜索还是仅仅浏览,Algolia 都可以使用滑动 30 天的数据,每 24 小时动态地重新排列项目。

动态重新排名 根据点击、购买、注册或其他积极信号等事件调整结果 。随着时间的推移,它会自动将最好的项目推至顶部。您可以设置动态重新排名,然后忘记它——它会自动完成它的任务——或者您可以在仪表板中预览结果,以准确了解产品结果是如何受到影响的。

给高毛利物品搭车

在经济衰退期间,每一分钱都很重要。动态重新排名给你一个增加销售和收入的好机会。你可以通过提高高利润的商品来更进一步。

通过连接你的后端数据和元数据,例如你的批发价和零售价,你可以“告诉”Algolia 哪些商品的利润最高,然后推广这些商品。

这是用 自定义排位 完成的。它使您能够控制对您的业务最重要的行为和属性,如库存、利润、退货和您正在索引的任何其他内容。

假设你有两个同品类的商品表现很好,转化率几乎一样。然而,一个项目比另一个项目有更好的利润。随着可定制的排名,你可以给它一个凸起。

这些规则将贯穿你的整个目录,因此每一个利润大、受欢迎的产品在排名中都会被提升。你不仅给了自己一个更好的转化机会,而且提高了你的利润!

那你目录里的另外 80%呢?

我们刚刚谈到关注最畅销和利润最大的商品,但这并不意味着你目录中的其他商品都是累赘。虽然帕累托原则认为网上卖家的大部分利润仅来自其产品的 20%,但其余 80%仍有价值。

vector search synonym example

通常情况下,长尾关键词和短语非常具体,可能比“头部”术语(目录中前 20%的术语)还要长。虽然您的团队可能没有时间来优化这些关键字,但 Algolia 引擎可以。我们的 即将推出的混合搜索引擎 使用数据来理解概念,纠正常见的拼写错误,并知道您的目录中哪些产品最相关。

在上面的截图例子中,有人键入了“垂直真空”。他们的意思是“直立的 真空的 ”尽管有错误的术语和拼写错误,搜索引擎还是返回了正确的产品。在查询中添加“best”这样的概念,Algolia 将返回最畅销或高评级的真空吸尘器。

你可以用传统的关键词搜索引擎做到这一点,但这需要编写大量的规则和同义词,并创建其他“技巧”,如关键词填充,才能让它工作。你 也许 有时间为你目录中的前 20%做这件事。人工智能可以为你的 100%的目录自动完成,所以你可以最大限度地利用每一个机会。

提高建议增加购物车订单值

一项研究表明,产品推荐占亚马逊总收入的 高达 35% 。个性化网站的商家可以促进销售。这不仅仅是零售商想要的东西; 56%的网购者 更有可能重游一个有更好推荐的网站。

有不同种类的推荐,也有不同的使用数据进行推荐的方式。一些包括:

  • 趋势 :建议其他流行的、与搜索相关的项目,就像你的客户所做的那样。
  • :人们希望购买数量最多、评分最好的产品。
    *** 个性化 :基于你上次购买的东西、浏览历史、位置或其他因素,我们推荐这些其他产品。我们将在下一节详细讨论这一点。**

**虽然还有其他推荐类型(例如,员工选择的产品),但通过使用数据,您可以快速增强和改善结果,因此您更有可能推荐实际转化最佳的产品。

使用 阿果推荐 ,Gymshark 看到了一个 在结果 :

  • 在黑色星期五,新用户的订单率增加了 150%,而“添加到购物车”率增加了 32%
  • 回头客的订单率和“加入购物车”率分别提高了 13%和 10%
  • 每用户 1.4 次点击,而之前的解决方案为 1.1 次

个性化,个性化,个性化

世界上最成功的电子商务公司都明白 个性化 对于改善客户体验和推动现场转化的力量。

使用高级个性化的公司 报告 每花费 1 美元可获得 20 美元的回报。消费者也想要个性化的体验: 91%的消费者 表示,他们更有可能购买包含相关优惠、信息和推荐的品牌。

无论你只是在自己的网站上销售,还是采用全渠道销售方式,你个性化所需的数据都在那里。它存在于您的客户数据平台(CDP)、会员管理或数据仓库中,包括如下信息:

  • 最近查看或购买的产品
  • 年龄、性别、会员身份、地理位置等。
  • 颜色和品牌偏好
  • 点击的广告和横幅

所有这些信息都可以用来为每个用户的 个性化搜索和浏览 结果。在 Algolia 中,这是一个识别你想要用于个性化的属性,对行为(浏览、点击、转化等)进行分类和加权的问题。),并启用个性化令牌。您甚至可以对个性化进行 A/B 测试,以确定哪种配置效果最好。实时预览显示任何查询的结果可能如何变化。借助个性化数据,您可以快速改善结果以赢得业务。

提升最不可能被退回的项目

很可能最受欢迎的产品最不可能被退回。但是为了以防万一,为了最小化人们购买他们可能会退回的产品的可能性,你可以添加一个规则。

如果您已经将 Algolia 与您的 PIM、库存、运输、退货管理或类似后端系统连接,您可以确定哪些产品最有可能被退回,并将该信息添加为自定义排名属性。在这种情况下,您会希望减少这些项目之一显示在结果中的机会。

数据驱动的商品销售

说到商品推销,你通常是在给定的时间范围内推销特定的产品。例如,您的年终销售可能从 10 月持续到 12 月。借助数据驱动的商品销售 ,您可以创建一个规则来自动促销所有在售或库存较高的产品。

此外,动态排名、推荐和个性化功能仍然适用。您可能只是在促销目录的一个子集,比如打折商品,但是在这个子集内,您仍然可以推行相同的数据驱动规则。

A/B 测试你的搜索算法

那么,你应该从这七个想法中的哪一个开始呢?商品销售?个性化?高利润提升还是更好的推荐?

实际上,这些变化的某种组合可能比任何单一变化更能改善结果。这就是 A/B 拆分测试 可以帮忙的地方。你可能认为 A/B 测试是为你的 CTA 按钮挑选最好的颜色。事实上,它也可以用来测试你的站内搜索算法,以确定哪一个驱动更多的销售。

a/b split testing site search

根据点击量和转化率来衡量,搜索结果有数百种排列方式,可能会导致不同的结果。通过调整搜索结果的显示方式或显示顺序,你可以影响搜索效率、访问者满意度,甚至网站转化率。

让数据引导你做出正确的选择。

保持人数持平的同时

艰难的时刻可能就在前方,但这并不意味着你需要放弃希望。数据驱动的方法有助于在每次访问中释放收入。

这是否意味着你需要雇佣更多的人来帮忙?绝对不行。但是,你需要合适的工具。我们设计了 Algolia,这样任何人都可以调整他们的现场搜索和浏览算法的结果。不需要额外的人数!**

评估搜索的最佳 AB 测试指标

原文:https://www.algolia.com/blog/engineering/a-b-testing-metrics-evaluating-the-best-metrics-for-your-search/

评估一个搜索引擎,或者更广泛地说,一个在线系统的有效性可能是复杂的。因此,选择最可靠、最健壮的 A/B 测试指标非常重要。在线系统永远在移动——内容不断变化,在线用户的搜索和行为方式不可预测。最重要的是,公司永远在升级他们的系统并适应新的用例。除了搜索,这也适用于其他在线系统,如推荐引擎和问答机器人。

这篇博文致力于揭开衡量在线搜索性能的 A/B 测试指标的神秘面纱。您将学习如何评估指标的可靠性,以及在衡量 A/B 测试成功时要考虑哪些因素。我们来看几个流行的指标——收入增长、 转化率(CR 或 CVR)、点击率(CTR)——比较它们的优缺点。这将帮助您决定哪种度量或者度量的组合最适合您的测试类型和特定的用例。

选择最佳的 A/B 测试指标来衡量你的搜索引擎的质量

你可以用两种方法来衡量一个搜索引擎的质量:定量和定性。定量评估着眼于速度和吞吐量等指标。 提供高吞吐量的快速搜索 是必不可少的。然而,你的评估不应该仅仅停留在量化指标上。

在本文中,我们将重点放在定性评估上,定性评估不如定量评估直接。当你听到人们谈论搜索引擎的质量时,他们通常指的是 的相关性。 但是,有什么关联呢?作为一个开始的定义,相关性包括两个部分: 寻找 匹配记录和 排序 (或)它们以首先显示最佳匹配的方式。但是搜索相关性的 含义更深 ,以包括其他排名方法,如受欢迎程度和更高的评级,以某种方式显示结果(良好的用户界面/UX),个性化和推荐结果,以及商品化。

你如何估计和评价 质量 的相关性,即使它有不同的含义?

相关性的主观性如何使搜索变得困难

许多商业角色与搜索有利害关系,他们中的许多人——如产品经理、搜索引擎专家和营销人员——对什么构成良好的相关性有不同的概念。我们可以在 文本检索会议(TREC) 的提案中看到这一点。TREC 提出了一个使用多种检索方法的基准,这表明一个评价基准既是 密集的,又是 复杂的。需要多个判断者来为查询-文档对提供相关性判断。这种判断的多样性表明用户对同一查询有不同的期望和偏好。然后,智能地汇总判断以创建基准。

因此,虽然法官可能很容易区分明显与 相关的内容或与 不相关的内容,但是比较 相关的 文档就比较困难了。

由于这个原因,我们通常定义 A/B 测试指标,我们希望这些指标反映可测量的相关性。但是定义这样的指标可能很复杂。

想象一下,一家电子商务公司的首席执行官希望其网站搜索技术产生更多净收入。这听起来像是一个合理的相关性指标定义:一个产生更多收入的搜索引擎是一个更好地响应客户需求的搜索引擎。因此,工程团队开始监控这一指标。它观察到在公司发布新版本软件的当天,销售额大幅增长。该团队得出结论,更新的软件是造成这种增长的原因。

然而,一周后,他们发现同一个搜索引擎的收入下降了。经过调查,他们意识到在发布的同一天,一款旗舰产品被添加到目录中,而正是 这一 事件实际上推动了一周的收入增长,之后销售水平恢复正常。

正如您将看到的,像这样的错误或误导性结论可以通过 方向性来减轻,这基本上确保了不同的 A/B 测试指标得到适当的加权。

**## 评估具有方向性和敏感性的 A/B 测试指标

Yandex ResearchYandex Research的研究人员,作为俄罗斯领先的互联网搜索引擎的一部分研究机器学习的组织Yandex,在 2019 年信息检索特别兴趣小组(SIGIR)会议 上,在这篇 教程 中阐述了方向性和敏感性的概念。关于方向性,他们说“一个好的指标必须有一个清晰的方向性解释。”

上面的收入场景是方向性的一个很好的例子:收入增加是有方向性的,因为电子商务收入上升总是好的,收入下降总是不好的。但是“收入增加”指标缺乏敏感性。 Yandex 将指标敏感度 定义为“当治疗效果存在时,指标检测统计显著性差异的能力。”

我们可以使用敏感指标来检测应用于搜索体验的最小变化。因此,虽然增加收入提供了一个清晰的解释(方向性),但当你测试新的搜索体验时,这种解释不太可能发生太大变化。准确测试收入增长可能需要多年的努力,因为统计测试很难达到显著性。如果您启动一个 A/B 测试来监控两个系统产生的收入,那么您可能需要运行它几个月,才能确信迭代的正面或负面影响。虽然这在某些监控情况下可能是可以的(例如,当发布一个全新的排名系统时,其影响可能需要在更大的规模上进行研究),但这对于每个迭代都是不可行的。几个月内同时运行太多的测试只会增加复杂性。

考虑到这一点,一种常见的方法是从方向性指标中获得更敏感的指标。两个常用的 A/B 测试指标是点击率和转化率。

两个可靠、高质量的 A/B 测试指标信号:转换和点击

转化率

转换率类似于收入增长指标,因为在电子商务中,转换率相当于销售额。然而,计算销售数量不同于计算收入:更高的收入并不表明活动增加,因为它是基于利润,而不仅仅是销售数量。较大的利润可能会扭曲结果;例如,一笔利润丰厚的额外销售可能意味着收入增加。计算销售额更加简单明了,但是它的优点也包含一个缺点,您将在后面看到。

用转化率作为衡量标准的好处是,它是在一个更小的尺度上计算的:搜索。因为搜索数量的波动比转化数量的波动更快(客户转化的频率远低于他们搜索的频率),如果客户转化更频繁,搜索与转化的比率可能会快速变化。因此,转换可以更容易地检测系统修改。

conversion formula

因此,转换率的方向性不如收入,但可以很快检测出来——也就是说,它更敏感。这个属性使它更适合于 A/B 测试,因为它更快地达到显著性。也就是说,转换率并不是一种完美的衡量方式,因为它对所有销售都一视同仁,不能提供与收入增加相同的商业价值。

点击率

在某些情况下,尤其是在电子商务之外,转化率是一种不充分的衡量方式,实施起来可能很棘手。例如,某个搜索文档的人可能会查看多个文件,然后只下载其中的一部分。下载量作为一个转化信号,作为一个相关性指标好吗?在这种情况下,CTR 是一个更敏感、更容易获得的指标。

click through rate formula

与换算相比,CTR 是一种更为敏感的衡量方式,因为只需点击鼠标即可改变数值。但同样,CTR 失去了一些方向性,因为用户可能不会去他们想去的地方。点击通常表示成功,但并不总是如此。因此,你可能会以做出另一套假设为代价,更快地试图达到意义。

点击和转化是仅有的两个敏感指标的信号。您可以在查询、用户和会话级别定义指标,包括点击、转换、查看时间、平均购物篮数量、退货率和事件间隔时间。所有这些选项都允许增加或减少方向性和灵敏度。

定义健壮的 A/B 测试指标

在这一点上,你可能认为没有免费的午餐,也没有灵丹妙药。某些指标在某些情况下有效,但在其他情况下无效。正如我们将看到的,当你设计一个实验时,你应该额外注意其他指标(比如“花费的时间”,见下文)如何与更具方向性的指标保持一致。

在 Algolia,我们坚持所有 A/B 测试指标都应考虑的两个主要特性,以提高 A/B 测试的可靠性和成功率:明确你的指标衡量的是什么,以及它是否可靠和可行。我们将在下面详细讨论这些。

首先,让我们深入探讨一下 CR 和 CTR 的陷阱。

一个转化率陷阱的例子

比方说,在你公司的电子商务搜索功能中,你想增加利润更高的商品。你总是用转换率来评估一个新系统的运行情况,所以你开始监控它。

在这里,系统 B 与系统 A 的不同之处在于,它会提升利润更高的项目。对于类似数量的搜索,系统 A 在转化率方面表现更好,但 B 在净收入方面表现更好。因此,如果目标是通过提高利润率来增加收入,那么使用 CR 指标来评估这些系统将会适得其反。

假设一周后,您观察到系统 B 的转换率比 a 低。您可以预期或假设,与显示更大范围价格的系统相比,显示过多更高的价格会使客户更不愿意承诺购买并购买产品。然而,系统 B 可能最终会产生更多的收入。这个例子说明了不应该盲目使用度量标准,因为不同的用例需要不同的度量标准。在这种情况下,我们可以通过监控转换率 加权 与项目的利润率(或利润率,MR)来将 CR 与增加的收入结合起来。

我们将保持大致相同的敏感度,因为我们继续依赖搜索数量,但我们整合了转换对业务收入增长的影响,使指标更具方向性。

T3T5点击率陷阱

因为没有灵丹妙药,CTR 也暴露于一些潜在的障碍。有时较低的点击率实际上意味着更好的结果!考虑特定领域的搜索,其中搜索由研究某个主题的学生或专家执行。一个常见的用例是某人在大量冗长的文档中寻找类似“我想知道药物治疗是否会引起某些副作用”这样的查询的答案。在这种情况下,答案是相当简单的,因此没有必要繁琐地浏览文档。出于这个原因,您的团队可能会决定构建一个新的解决方案,由带有答案的信息片段组成(就像 Google,当它检测到问题的答案时会显示片段。)

在这种情况下,你会期望点击率下降,因为对于某些查询,用户不必点击结果来获得答案。这就是为什么点击率的方向性较差:在某些情况下,点击率下降表明相关性更高。

因此,在电子商务环境中,较高的点击率与较高的用户参与度和满意度相关,在回答问题的情况下,或在 研究中 一般而言,您可能希望使用会话之间花费的时间(TS)等指标:在基于文档的研究中,较低的TS 表示用户对专业知识非常满意结果,TS 可能是在基于文档的搜索系统中迭代之后最相关的要监控的度量。

**### 创建更可靠的 A/B 测试指标

我们已经讨论了可以组合的信号示例,其中每种组合都提供了或多或少的方向性或灵敏度。但是你如何决定哪种组合是最好的呢?

一般来说,每个有用的度量应该有两个属性:

  • 根据你对应用于搜索系统的处理将如何影响用户体验的假设,你期望它的发展方向
  • 无法匹配指标

我们已经讨论了第一个要点——方向;让我们继续讨论 指标游戏。

想象一下,一个拥有来自不同作者的各种内容的在线平台。假设它有一个向用户推送内容的推荐引擎。你想提高这台发动机的质量。在花了几个月的时间开发推荐之后,你发布了一个新版本,并开始使用 CTR 监控点击量。毕竟,点击给了你一个评估相关性的可靠信号。

然而,你可能会面临点击诱饵的问题:由于你无法控制发布的内容,作者可以通过发布标题和图片更吸引人、内容却很差的文章来欺骗系统,这些文章可能会比包含相关内容的看起来更乏味的文章被点击。CTR 测量增加的活动,不考虑 clickbait。所以你的推荐系统被玩了:点击量的增加并不意味着推荐系统更好。

不仅仅是作者可以用这个标准来衡量。博客平台也是如此:一些媒体平台 无意中 通过返回最受欢迎的文章来游戏其零结果页面,而不管搜索是否包含与用户的查询匹配的单词。虽然这确保了搜索引擎提供结果,但结果并不一定相关!依赖同义词或相关查询也可以降低零结果率,而不需要冒险。

解决办法?通过不依赖单一类型的指标来避免博弈。

结论和要点

感叹……没有完美的度量标准。在许多情况下,定义一个单一的 A/B 测试标准是不够的。例如,在文章推荐场景中,当你查看点击率时,你还需要查看跳出率:用户是否真的 阅读了 文章?

良好的第一步是审查您在线系统的业务目标,并使用强有力的方向性指标来显示提高的业务价值,如收入增加指标。度量业务价值可以帮助您定义对系统在您所做的变更下应该如何表现的期望。然而,收入增长比其他指标更慢、更敏感。您可以通过添加一组候选指标来改进这一点,这些指标也反映了您的业务目标,但是是在更细粒度的级别(例如,在搜索、会话或用户级别)。

最后,注意你的指标是否可以被游戏化,不管是有意还是无意。定义 A/B 测试度量的全部目的是为了实际地评估一个系统。理想情况下,您应该在 A/B 测试中测量真实的和非博弈的变化,这些变化朝着您期望的方向发展,从而可靠地传达最后一次迭代是成功的。****

用用户意图图创建智能旅程的温和介绍

原文:https://www.algolia.com/blog/ai/a-gentle-introduction-to-intelligent-journeys-with-user-intent-graphs/

传统上,我们将用户意图与搜索引擎如何理解用户的需求和愿望联系起来。但随着网络变得越来越复杂,理解用户意图已经成为设计个性化用户旅程的关键挑战,甚至超越了搜索。

啊,个性化——客户体验的圣杯!每个人都在谈论它,很少有人真正知道如何正确地做它。这有一个很好的理由:个性化不是一个勾选框练习。这是一项复杂的任务,因为每个用户都是独一无二的,需要尊重他们的隐私,同时还要提供个性化的体验。

因此,通过将用户的行为和选择绘制为图上的点,将用户意图表示为数学抽象,使我们能够在保持(某种程度上)匿名的同时可视化用户的独特性。

现在,关系数据自然地由称为实体的网络的图来表示,这有助于我们查看和分析数据点之间的关系。这些图可以应用于解决许多现实世界的问题,例如优化不同位置之间的导航以及构建推荐引擎、社交图和知识图。

一般来说,只要数据表示其实体之间的交互,就可以用图表表示。例如,隐式社交媒体关系可以被认为是一个统一的图形 ,节点代表用户、页面、位置、群组、评论、照片、相册、故事、视频、笔记和事件等实体。该图表示这些节点如何相互交互,例如,用户发布照片、视频或评论;用户用他们的出生地更新他们的简档;喜欢朋友照片的用户。

然而,在我们试图用图形表示用户意图之前,让我们提供一个更正式的描述来说明我们所说的“图形数据”的含义,不要进入大量的数学细节,只需要对图形有一个直观的理解就够了。

图表原理

形式上,图是由一组节点 V 和这些节点之间的一组边 E 定义的。我们表示从一个节点(A)到另一个节点(B)的边。在许多情况下,我们将只关心简单的图,其中每对节点之间至多有一条边,一个节点与其自身之间没有边,并且所有的边都是无向的。

Directed vs. Undirected Graphs

表示图的一种便捷方式是通过邻接矩阵 。为此,让我们考虑电子商务场景中用户(U)和产品(P)之间的关系;我们可以将边的存在表示为该矩阵中的条目:

Users (U) and Products (P) adjacency matrix

当然,一些图也可以有加权边,其中邻接矩阵中的条目是任意的实数值而不是{0,1}。此外,图可以有不同类型的边。例如,在我们的电子商务场景中,用户和产品之间的交互可以采取多种形式:点击、添加到购物车、添加到愿望清单或购买。

我们已经可以看到我们的示例图有两种类型的节点:用户产品。这些被称为二分异构图。多部分图是异构图的一个众所周知的特例,其中边只能连接具有不同类型的节点,即添加类别作为新类型的节点

Users, products, and categories graph

最后,在许多情况下,我们还有与图形相关的属性或特征信息(例如,与产品相关的图片)。最常见的是使用向量或矩阵表示的节点级属性;在异构图中,通常每个不同类型的节点都有自己独特的属性类型。在某些情况下,除了离散边类型之外,图还被设计为支持实值边特征,并且在极少数情况下,实值特征与整个图相关联。

近年来,图神经网络由于其在建模节点间依赖关系方面的能力和灵活性,在各个领域中获得了普及。主要有三种类型的问题可以通过使用带有图形的机器学习来解决:

1。节点分类

节点分类对于根据节点与图中其他节点的关系来推断节点信息非常有用。假设我们有一个大型数据集,包含市场上正在商业化的数百万种产品,我们知道这些产品中有相当一部分是假冒的。识别这些假冒产品对于不想推销假冒产品的公司(更不用说“销售”这些产品的用户违反了条款和服务的事实)和将冒着订购(并支付)可能永远不会到达目的地的产品的风险的买家来说都很重要。

手动检查用户发布的每一个产品是很昂贵的。因此,拥有一个可以将产品分类为假冒(或不假冒)的模型似乎是一个优雅、更具成本效益的解决方案。

这是一个经典的节点分类示例,目标是预测与每个标注相关的标签,可以是类型、类别或属性——即使训练集只给我们节点上的真实标签。节点分类可能是图形数据上最流行的机器学习任务,尤其是在最近几年。

2。关系推理

与节点分类一样,关系推理是更受欢迎的图形数据机器学习任务之一,并有无数的现实世界应用:电子商务场景中的产品推荐,预测药物副作用,或在关系数据库中推断新事实。所有这些任务都可以被视为关系预测的特例。

关系推断的标准设置是给定一组节点 V 和这些节点之间的一组不完整的边,目标是使用这些部分信息来推断缺失的边。在简单的图中,例如仅编码“购买关系的推荐系统,有基于两个节点共享多少邻居的简单试探法可以实现强性能。另一方面,在更复杂的多关系图数据集中,例如编码数百种不同生物相互作用的生物医学知识图,关系预测可能需要复杂的推理和推断策略。

3。聚类

而节点分类和关系预测需要推断关于图形数据的缺失信息,从而使它们在许多方面类似于监督学习;相反,聚类检测更类似于无监督聚类。

同样,在我们的电子商务场景中,假设我们有一个用户配置文件数据库,我们制作一个协作图,连接两个表达相似偏好的用户配置文件。如果我们检查它,我们会注意到该图分成不同的节点群,按产品相似性、订单总值或其他类似的人口统计因素分组。

图聚类中的一般直觉是将更有可能与属于同一聚类的节点形成边的节点表面化。

用户意图图

在对图论的简短介绍之后,我们准备构建我们的用户意图图。在描述节点之间的关系之前,我们首先需要定义节点。乍一看,对于电子商务推荐系统来说,将节点表示为用户和产品,将边表示为交互是非常简单的——正如我们在上面的图表中看到的。

但是我们如何定义意图,如何在我们的图表中表现出来呢?

如果一个用户访问了 3 个产品,我们能知道她的意图是什么?或者,如果同一个用户将一件商品添加到购物车中,我们是否更清楚她的意图?如果她没有完成订单,而是访问了“联系我们”页面,会怎么样?

用户意图被定义为用户一系列动作 的目的。营销人员传统上一直使用一套标准的意图,主要受谷歌搜索算法的启发:

  • 导航 —用户想要找到一个特定的页面或网站(品牌关键词)
  • 信息 —用户想要回答一个特定的问题(包括“如何做”、“是什么”、“在哪里”、“为什么做”的查询)
  • 事务性 —用户想要完成一个动作(转换、注册、电话)

显然,一个有导航意图的用户对他们的登陆页面的期望会与一个有交易思维的用户有很大不同。因此需要个性化。

因此,我们的图的复杂性与我们定义用户、项目和意图的方式联系在一起:如果我们考虑有限数量的意图类(导航类、信息类、事务类),那么我们的图看起来会非常干净。然而,如果一个意向可以根据他们在任何给定时间积极参与的行业的具体情况以及项目本身的特征来取多个值,那么情况就会变得更加模糊。

A user intents graph

这就是为什么,对于电子商务旅程,我们可能会考虑以下类型的意图:(1)面向目标的意图;(2)亲和倾向;(3)面向度量的意图。值得注意的是,我们希望用户表现出多种意图,而不仅仅是一种主导意图。

Example of user intents: goals, affinities and metrics

为了开始表示我们的用户意图图,我们可以想象每个用户(U)都链接到他们的会话(S ),并且在每个会话期间,用户都与产品(P)交互,每个产品都有自己的属性(A)。

A representation of a user intent graph: user-sessions-products-attributes

用户可以在他们的会话中做某些不一定与特定项目相关的事件:注册、搅拌或浏览。而其他链接到商品和购物车:放弃购物车、添加到购物车和结帐。

A representation of a user intent graph: user-sessions-products-attributes and events

用户也可以搜索,在这种情况下,有链接到项目和项目类别的常见查询。

A representation of a user intent graph: user-sessions-products-attributes, events and search queries

尽管用户意图图已经变得如此复杂,我们可以将它""压缩成下图:

*A representation of the compressed user intent graph

在 REST API 格式中,您会期望类似于/1/users//fetch的响应:

在实践中,您希望能够探索用户意图图,并根据任何给定的意图组合轻松提取用户:

intents.cart_abandonment.probability: 0.5 TO 0.9 
AND intents.next_order_value.value >= 50 
AND intents.affinities.brand.value = “adidas” 
AND intents.affinities.brand.probability > 0.5

应用程序

让我们简单谈谈用户意图图让我们能够构建的应用类型。我们已经通过引用个性化开始了这篇文章,但是我们能根据意图个性化什么呢?

1。搜索

对于拥有几乎无限的产品数据库的电子商务网站来说,个性化对于他们的最终用户来说是一项非常重要的能力。如果我们的用户意图图配备了用户亲和力,那么个性化搜索结果就变得非常简单。

2。建议

类似地,我们可以使用下一个订单价值意图作为过滤器,显示用户当前正在浏览的类别中的产品,或者作为购物车中的追加销售机会,匹配用户的购买力。

3。旅程

最后但同样重要的是,我们可以超越现场搜索,根据用户的意图推荐、调整或编排用户旅程。如果我们的用户对购买我们的任何商品都不感兴趣,他们只是随便逛逛,那该怎么办?

为什么不鼓励他们订阅时事通讯,或者注册博客,关注社交媒体等等。?有时候,对用户来说最好的事情不是添加到购物车,而是在决定购买之前阅读更多关于某个产品或服务的信息,这可能会在以后的会话中出现。

帮助用户和个性化她的旅程可以通过用户意图图来实现,用户意图图能够显示用户为了达到某个目标应该采取的下一个最佳行动。例如,如果我们的用户更有可能订阅时事通讯,而不是加入购物车,你认为正确的行动呼吁应该是什么?*

SRE 之旅

原文:https://www.algolia.com/blog/engineering/a-journey-into-sre/

站点可靠性工程师(SREs)设计并管理高效的流程和操作,他们保持公司基础设施的健康运行。

在 Algolia,我们的团队在不到两年的时间里从 4 人发展到了 10 人,这一增长速度与整个公司相当。该团队不仅在人数上有所增长,而且在我们如何一起工作和创建良好的运营流程方面也有所增长。

本博客讲述的是一群勤劳的个人,凭借独特的技能和工作方法,成功创建了一个成功的【SRE】团队

我自己在 SRE 领域的经历反映了这一成熟过程。在我加入 Algolia 之前,我作为一名电信公司的集成工程师周游世界。在不止一个场合,我找到了构建小工具的机会,这些小工具帮助我提高了工作效率。这增加了我在职业上更进一步的信心。从那时起,我开始探究什么是 SRE。以下是谷歌副总裁本·特雷纳对 SREs 的评论:

SRE 是当一个软件工程师被分配 过去被称为运营的任务时发生的事情。

虽然从技术上讲,我不是软件工程师,但我的职业生涯遵循着同样的模式:编写代码来管理运营任务。因此,我对 SRE 这个角色感到兴奋,并准备好了改变。

SREs 在 Algolia 做什么

SRE 团队的每个成员都参与了这三项活动:

  • 项目
  • 操作
  • 随叫随到

项目我们从事不同种类的项目。其中一些对业务有直接影响,另一些有助于改善全球基础设施。

运营: 我们的大部分基础设施都是裸机,这意味着我们需要相当多的自动化和安装/破坏/修复服务器的工作。我们需要调试实时应用程序,并支持其他团队寻求技术建议。最重要的是,我们必须联系提供商来处理提供商的任何问题。

随叫随到:我们需要为整个基础设施提供支持。这意味着我们每个人都必须每周 7 天、每周 4 天、每天 24 小时随叫随到。

会议

每周一我们都会开一个一小时的会,回顾上周并计划本周。我们谈谈:

  • 待命问题
  • 操作
  • 项目状态
  • 个人目标和计划

作战

随着时间的推移,Algolia 的运营也发生了变化。例如,当我加入时,操作是每天进行的,这使得我很难深入了解已经完成了哪些任务。我们的 黄金法则 关于优先权是

  • 首先响应客户
  • 内部回答关于时差的问题
  • 解决突发事件
  • 供应基础设施

现在每周进行一次操作。你可以看到下面的轮换计划。除此之外,我们还有两个级别的随叫随到。最后,随叫随到不应该与我们的正常操作有什么不同。总的来说,运营不仅仅是维护和改善我们的基础设施。

我们如何作为一个团队工作

通讯

我在 Algolia 的第一天,我马上注意到我的同事们主要通过 Slack 交流,即使他们彼此之间只有几米远。这感觉有点冷,特别是考虑到我天生喜欢站起来和人说话。此外,团队分散在办公室各处。它不像是一个有凝聚力的单位。由于这些原因,交流很困难。

有趣的是,我不是唯一一个有这种经历的人。新来的人也注意到了同样的问题。

来者

临界质量可能将我们推向了正确的方向:有太多的任务需要我们像以前一样继续工作。我们的第一步是为每个成员设定期望,这样每个人都会提前知道他们能从彼此身上得到什么。

新人给团队带来了老成员意想不到的好处和品质。此外,如果他们对此持开放态度,老成员实际上可以向新成员学习,并让这些新人/新品质将团队变得更好。新老的正确结合是一个团队伟大的原因。

我们采取的一项举措是创造一种每周两天的工间休息文化。在这些休息时间,我们谈论不同的事情,工作或与工作无关的。我们互相了解,更好地交流。

结对创建团队

最初,团队中的每个成员都在各自指定的项目中工作,为自己选择他们想要研究的主题。这种自主性和个人主动性并不是那么糟糕,但对于一个新人来说,这是压倒性的;它迫使我经常切换齿轮:学习 做我的日常支持想出项目点子 完成它们,全靠我自己。

因为我们在成长,我们很快意识到我们需要改变这种状况,我们需要开始合作。第一步是做一些配对,两人一组。这给了我们一个与团队其他成员互动和认识的机会。

三个项目

1–逆向工程一个金库/领事服务器

在这个项目中,Paul 和我致力于了解当前的部署是如何工作的,我们如何在灾难情况下进行恢复,以及恢复需要多长时间。

这个项目花了两个星期。一旦我们完成了,我们可以选择换搭档或者继续合作。在这两周结束时,我们有:

  • 深入了解项目
  • 自动化部署
  • 复制数据

2–负载均衡器知识分享

接下来的两周,我继续与 Paul 一起工作,深入了解新的负载平衡器。如果你还没有读过他关于一年负载均衡的博文,我建议你去看看。

我们发现的主要问题是,在运营或待命期间,任何关于负载平衡器的请求都必须转发给 Paul。这种知识共享有两个好处:首先,它向不止一个人提供见解;其次,它从拥有所有知识的人身上卸下任务。

最近,一名新成员加入了 Algolia,开始全职从事负载平衡器的工作。对负载均衡器的专门支持不仅为新成员提供了更多的操作技能,还为团队提供了更多的咨询对象。

3–备用方案

在这个项目中,基础小组的三名成员共同合作提出了一个新的备份解决方案。有趣的是,我们决定开始使用 Scrum 方法论。这是一个巨大的成功,因为它让我们:

  • 在更复杂的任务中定义小任务,这样我们三个人会在某个时候一起工作。
  • 建立一个时间估计,这有助于我们预见项目的进展情况。
  • 自动分配任务。这对我来说是最好的部分,一旦我完成了我必须做的事情,就可以开始做其他的事情。
  • 由于我们几乎参与了所有部分的工作,因此对项目有了更大的了解。

旅程继续..

我们的努力非常成功,我们的团队变得非常稳定,以至于我重新审视了我刚开始时遇到的原始“问题”:过度使用 Slack 和分散的团队没有坐在一起。今天,这不是一个问题:我们经常使用 Slack,然而谈话感觉自然而直接。我可以每天坐在不同的地板或桌子上,轻松地与我的团队合作——因为我知道我团队中的人是如何工作的。这就是一个伟大的 SRE 体验的组成部分:有效的沟通,高效的流程。

通过 ab 测试优化您的搜索性能

原文:https://www.algolia.com/blog/product/ab-testing-search/

迄今为止,企业一直在暗中测试搜索相关性,很少甚至没有性能数据或查询后指标来为优化搜索结果提供信息。Algolia 的分析 API 和点击分析解决方案通过为您提供整个搜索生命周期的完整视图开始解决这一挑战——从查询到点击到转化。

今天在我们的企业计划中推出的 A/B 测试功能使您能够测试搜索设置配置变化的性能影响。最好的部分是:您可以完全从仪表板中创建 A/B 测试,而无需一行代码(当然,这也完全可以从 API 中完成)。

为什么要进行 A/B 测试?

搜索和发现是数字体验的核心,相关性是搜索不可忽视的一个方面。对用户体验质量影响最大的莫过于搜索引擎返回结果的相关性。

我们以电子商务为例。

  • **优化转化:**电子商务网站可以使用许多标准来提高相关性,以便用户可以轻松找到他们正在寻找的东西,并更快地转化;例如,在搜索结果中促进产品销售、受欢迎程度、评级。但它会很快变得势不可挡。从哪里开始?如何确保这些新标准不会适得其反?A/B 测试允许连续的、迭代的优化,一个标准接一个标准。
  • **验证业务决策:**定义电子商务业务有各种参数。也许你的运营成本要求你偏爱高利润的产品。但是如何确保这样做不会对销售产生负面影响呢?A/B 测试增加了决策过程的信心。

从文本标记的解析,到您的业务指标对排名公式的影响,再到查询中词的邻近性的重要性,Algolia 提供了数十种功能和设置,允许您微调相关性,以实现出色的搜索结果。

对于阿洛利亚的用户来说,这里是怎么

让我们举一个例子,您有一个当前在生产中使用的索引。姑且称之为 indexA 吧。

该索引的排名策略目前依赖于每个结果的查看次数。你想知道改变排名策略,依靠点赞数而不是浏览量是否会带来更好的搜索转化率。

A/B 测试允许您通过以下步骤做到这一点:

  • 创建索引 a 的副本——我们称之为索引 b(事先确保有足够的空间来复制数据)
  • 将 indexB 的自定义排名改为使用点赞数而非点击数
  • 如果你还没有做到,实现点击分析。它将用于测量由索引 B 中的配置更改所导致的性能改进
  • 转到仪表板上的 A/B 测试功能,在 indexA 和 indexB 之间启用 A/B 测试
  • 等到 AB 测试的显著性分数达到 95%才获得足够的流量,就这样了!

根据结果,你会知道你的新排名策略是否会给你的搜索带来更多的点击和转换,所以你可以放心地继续改变!

我们希望这个特性能帮助你更快地迭代你的配置,并实现你的搜索的最佳相关性。我们当然计划指导您一路走来,并帮助您充分利用它!

我们邀请您参加我们即将举办的网络研讨会:“通过 A/B 测试优化搜索性能”和阅读文档访问产品页面了解更多信息

不要犹豫,联系并分享你的问题和反馈:给我们发电子邮件发推特给我们,评论这个帖子。

在你的网站上添加一个角搜索框

原文:https://www.algolia.com/blog/algolia/add-angular-search-to-your-website-your-website/

一个好的搜索可以决定你的网站或应用的成败。自行开发一个复杂的搜索 UI,根据您的特定需求进行定制,可能是一个令人生畏的挑战。在这篇文章中,我们将展示 Angular 的基于组件的架构是如何帮助我们的。如果你已经用 Angular 建立了你的网站,你会想继续读下去,看看如何快速实现一个 Angular 搜索框

为什么有棱角?

首先,让我们讨论一下你是否在使用 Angular 来构建你的网站。如果你已经是了,那太好了!你可能已经知道它能提供的许多好处。如果你不是,让我们来谈谈 Angular 能做什么,以及为什么它可能是你构建网站 UI 特性的一个好选择。

Angular 是 Google 开发的一种基于打字稿的语言。有了这种强大的支持,再加上一个充满活力的社区,它应该拥有在未来几年保持相关性所需的资源。Angular 越来越受欢迎,数百万使用它的人组成了一个热情的社区。在这个社区和 Google 文档之间,你不会缺少帮助。

Angular 对于构建动态 web 应用程序很有用。你可以用 Angular 创建一个单页应用程序,这意味着你的网站不需要不断刷新就可以响应用户。它也是为速度而生。这种情况可能超出了本文的范围(这是由于它的渲染器),但无论如何,期待您的 web 应用程序加载有一定的乐趣。

Angular 的一个关键特点是它的模块化设计。Angular 应用程序由独立的组件构建而成。这种基于组件的架构在构建复杂的 web 应用程序时非常有用,可以防止您的代码变得混乱。

哦,那些组件也可以来自第三方!结合前面提到的强大社区,这意味着 Angular 很可能拥有您需要的工具。现在让我们更深入地了解这些工具。

设置你的 Angular app

如果你之前没有使用过 Angular,你可以很容易地站起来跑步。首先需要的是使用框架的方法。Angular 的另一个备受青睐的地方是它强大的命令界面。它基本上可以处理任何你想要它做的任务。安装起来也很容易:

npm install -g @angular/cli

你可以用 Angular 同样快速地创建一个网络应用程序。安装 Angular CLI 时,可以使用ng调用它。在本例中,我们将创建一个名为“我的第一个应用程序”的 web 应用程序:

ng new my-first-app

通过该 CLI,还可以方便地在本地提供应用程序。只需更改到由 CLI 创建的应用程序目录中,然后运行ng serve命令:

cd my-first-app
ng serve

ng serve为您处理应用程序的构建和发布。默认模板甚至会将您指向文档,并提供一些有用的提示!有角度构建的应用程序有三个重要文件(当然,这是一个简化):

  • app.component.css
  • app.component.html
  • App.component.ts
  • app.module.ts

在探索 Angular 过程时,您将使用其他文件,但这些文件中的内容在查看网页时最为明显。

棱角分明的组件——让你的应用充满活力

那么,如何实现组件呢?如前所述,这些是 web 应用程序的构造块。虽然您可以手动创建组件,但 CLI 是更快的选项:

ng generate component my-first-component

此命令将创建您需要的所有文件。这些文件类似于上面列出的应用程序文件,但只针对组件。这意味着您可以真正对特定组件中发生的事情进行精细、独立的控制。组件被@Component装饰器中的selector语句引用。默认值是组件的名称,正如我们在生成的my-first-component.component.ts文件中看到的:

@Component({
  selector: 'app-my-first-component',
  templateUrl: './my-first-component.component.html',
  styleUrls: ['./my-first-component.component.css']
})

我们还可以看到,相同的命名约定适用于组件的 HTML 和 CSS 文件。这又一次指向了角度的模块化;这些文件有目的地与您的 web 应用程序的其余部分分开,并在您构建 web 应用程序时引用。这当然很容易想象出在哪里发生了什么!

但是它们在哪里被引用呢?你可以在你的应用程序的 HTML 文件中引用这个组件。

<app-my-first-component></app-my-first-component>

这样,我们可以看到我们的 web 应用程序现在只是采用了组件的 HTML 模板中的形式:

组件也可以显示动态信息。例如,您可以在my-first-component.component.ts中设置变量:

export class MyFirstComponentComponent implements OnInit {
  text = "test";
  constructor() { }
  ngOnInit() {
  }
}

然后,在你的应用程序的 HTML 文件中,你可以引入这些变量。在这种情况下,my-first-component.component.html就是。

<h2>{{text}}</h2>

web 应用程序将刷新以显示该变量的设置:

可以想象,能够动态改变 web 应用程序显示的内容是拥有搜索框的一个重要方面。毕竟,用户会期望页面对他们的搜索结果做出响应!当然,那是在他们提供查询之后。让我们看看它在 Angular 中是如何工作的。

角度事件—与用户交互

Angular 开发人员可以创建组件来响应基于用户的事件。这可以是从鼠标点击到用户文本输入的任何事情。可以想象,这对于搜索来说非常重要,因为用户需要能够输入他们的搜索查询。

首先,让我们通过一个简单的事件来看看 Angular 是如何处理事件的:鼠标点击。component.ts文件类中的角度手柄。

export class MyFirstComponentComponent implements OnInit {
  selectedText?: Test;
  onSelect(test: Test): void {
    this.selectedText = test;
  }

然后,您可以在为该特定组件描述的component.html文件中指定它在您的 web 应用程序上的外观。

我们已经了解了搜索框的两个基本特性:信息的动态显示和事件处理。现在让我们解决搜索的另外两个方面:执行查询和构建 UI。

搜索-具体问题

执行搜索

搜索结果和过滤器从何而来?这取决于您希望如何在后端访问您的数据。这将具体到您自己的情况,但这是您在实现搜索时需要考虑的问题。您将从哪里获取这些数据?如果您有足够的数据来构建搜索功能,您需要考虑快速可靠地访问这些数据的最佳方式。

例如,您可以使用以下内容进行搜索:

–定义连接到您的数据库的路线
–构建用于共享搜索功能的内部 API–云提供商提供的基本托管搜索服务

无论选择哪一种,您都希望确保速度和延迟——这需要高性能的搜索功能和最佳延迟(到服务器的一次访问)。它还涉及数据存储和相关性问题。

建筑搜索

Angular 的组件结构使得理解高层发生的事情变得简单明了,但是您仍然需要构建界面的单个元素。说到搜索,你可能会想到一个简单的输入框。您可能还需要一些自动完成功能,这些功能需要在用户输入时出现。即使有了预输入的体验,你也需要一个搜索按钮来完善用户界面。根据您的使用情况,可能会有更多。让我们看看角度搜索组件的注意事项。

首先,考虑你希望你的搜索框是什么样子。Angular 让你有机会充实组件的 HTML 和 CSS。你会希望为你的网站设计风格,同时也为它使用的搜索功能设计风格。

第二是考虑缩放,在使用方面,但也包括搜索功能。如上所述,在 Angular 中创建基于事件的组件的概念验证可以轻松完成。也就是说,当你需要扩展你的搜索功能时,你会怎么做?许多用户希望在搜索时可以使用以下功能:

过滤器:用户想要控制返回给他们的结果类型。这样做意味着有过滤器聚焦的事件在搜索后等待响应
分页控件:用户希望通过搜索结果获得可控的导航体验。也许他们只想一次看到几个结果,或者他们想要一个永无止境的卷轴。不管怎样,他们想要的不仅仅是一连串的结果。
突出显示:用户希望了解为什么他们的搜索会返回特定的项目。如果项目很复杂,他们会很高兴能够看到为什么它们会出现在搜索结果中。

那就要考虑很多方面了!当然,Angular 基础设施允许您手动构建这些特性。您可以使用 HTML 和 CSS 创建界面,然后绑定适当的事件。假设您的搜索后端可以处理过滤器、分页和其他特性,您可以在 Angular 中工作,以适当地显示结果。

Angular 基于组件的架构也让你可以利用第三方库。当您在已经建立的库的基础上构建时,您可以专注于实现这些预先构建的(通常是预先格式化的)组件。

一个搜索库:阿哥利亚

基于搜索的角度库的一个例子是 Algolia 的 Angular InstantSearch。Angular InstantSearch 旨在节省您自己创建搜索 UI 的额外开发时间。有了 Angular 基于组件的结构,你可以快速地将这种搜索功能实现到你的 web 应用的其余部分。

本着 Angular 的模块化精神,Algolia 的即时搜索库是基于小部件的。小部件是构成我们搜索 UI 的构件。您将使用哪些微件取决于您的 web 应用程序。Algolia 将小工具分为类别

把小部件想象成房子的建筑材料。如果我们扩展这个比喻,这些小部件是在建造过程中使用的不同类型的材料。将我们的库想象成预先配置的小部件的集合通常是一种合理的近似。事实上,你能控制的比你想象的要多。通过扩展小部件,你可以改变它们的行为和输出。扩展小部件的过程包括使用小部件的业务逻辑代码(我们称之为连接器),并调整它们以适应您自己的需要。

您还可以为您的特定用例定制这些小部件。这样做是一个密集的过程,因为它涉及到创建自己的连接器。也就是说,我们已经有了一个帮助你创建自己的小部件的指南。即使你构建了自己的小工具,你仍然可以从 Algolia 灵活的搜索基础设施中获益。

在大多数情况下,您会发现没有必要构建自己的小部件,因为有许多预构建的选项可用。有关实现 Angular InstantSearch 库的深入说明,请参见我们的入门指南,或者您可以查看我们的 Algolia 的灵活搜索基础设施

添加自动完成搜索到您的 Strapi CMS

原文:https://www.algolia.com/blog/engineering/add-autocomplete-search-to-your-strapi-cms/

Strapi 是一个开源的无头 CMS,它构建 api 抽象来检索您的内容,而不管它存储在哪里。它是构建内容驱动的应用程序(如博客和其他媒体网站)的一个很好的工具。

在本文中,您将使用 Algolia 的 Autocomplete.js 库和社区构建的 Strapi 搜索插件,通过 Next.js 前端向 Strapi 博客添加交互式搜索。

先决条件

Strapi 和 Algolia Autcomplete.js 都是使用 Javascript 构建的,所以您需要安装 node v.12。

您将使用 Strapi 和 Next.js 构建本指南中的基本博客应用程序。在构建您的搜索体验之前,您应该熟悉文章中的步骤。

您还需要一个 Algolia 帐户进行搜索。您可以使用现有的 Algolia 帐户或注册一个免费帐户

建筑后端

首先创建一个目录来保存项目的前端和后端:

mkdir blog-strapi-algolia && cd blog-strapi-algolia

Strapi 有一组预烤模板,您可以使用它们快速启动并运行 CMS。这些都包括 Strapi 本身以及预定义的内容类型和样本数据。如果您还没有 Strapi 博客,您可以使用博客模板快速创建一个。

npx create-strapi-app backend  --quickstart --template @strapi/template-blog@1.0.0 blog

脚本安装完成后,在 https://localhost:1337 上添加一个 admin 用户,这样您就可以登录到 Strapi 仪表板。这个脚本为我们设置了大部分后端,包括一些演示博客帖子。您可以在快速入门中了解更多关于设置的信息。

接下来,您需要索引您的演示内容。幸运的是,Strapi 社区为您提供了由社区成员 Mattias van den Belt 构建的搜索插件和 Algolia 索引提供程序。你可以在文档中阅读更多关于 Mattie 的插件,但是启动和运行只需要几项配置。

继续并停止您的 Strapi 服务器,以便您可以使用npm(或yarn)安装插件。

cd backend && npm install @mattie-bundle/strapi-plugin-search @mattie-bundle/strapi-provider-search-algolia --save

您需要将 Algolia API 密钥和应用 ID 添加到您的 Strapi 环境中。您可以通过导航 Algolia 仪表盘的“设置>团队和访问> api 密钥”来管理您的密钥,或者直接进入 https://algolia.com/account/api-keys.。由于 Strapi 正在修改您的 Algolia 索引,您需要提供管理 API 密钥(用于演示)或创建一个对您的生产项目具有适当访问权限的密钥。

# .env
// ...
ALGOLIA_PROVIDER_APPLICATION_ID=XXXXXXXXXX
ALGOLIA_PROVIDER_ADMIN_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

准备好凭证后,最后一步是配置插件。在您的backend目录下创建或修改./config/plugins.js文件。你想让插件为你的博客索引articlecategory内容类型。

'use strict';

module.exports = ({ env }) => ({
  // ...
  search: {
    enabled: true,
    config: {
      provider: 'algolia',
      providerOptions: {
        apiKey: env('ALGOLIA_PROVIDER_ADMIN_API_KEY'),
        applicationId: env('ALGOLIA_PROVIDER_APPLICATION_ID'),
      },
      contentTypes: [
        { name: 'api::article.article' },
        { name: 'api::category.category' },
      ],
    },
  },
});

重启您的 Strapi 服务器以获取这些环境变量和新插件(npm run develop)。当新内容是Published时,搜索插件触发,所以你需要或者UnpublishPublish演示文章,或者创建一个新的。加载 Strapi 管理面板(https://localhost:1337/admin)并导航到内容管理器>集合类型>文章,然后或者点击现有文章并Unpublish它,或者点击Create new Entry。点击文章上的Publish将此条目编入您的 Algolia 应用程序。如果您也想索引那些内容类型,您可以对category内容类型做同样的事情。

建筑前端

既然您已经构建了后端并填充了索引,那么是时候为您的用户构建前端了。

Strapi 有一篇很棒的博文,带你构建一个 Next.js 驱动的前端。您将在这些步骤的基础上进行构建。你可以自己浏览他们的快速入门,或者如果你想直接加入搜索,你可以直接复制这个回购

git clone --single-branch --branch no-search-version git@github.com:chuckmeyer/blog-strapi-frontend.git frontend

别忘了跑步

cd frontend && npm install

如果你克隆了回购协议的前端。

这足以让基本的博客网站开始运行。您可以通过在frontend目录中启动服务器来测试它。

npm run dev

唯一缺少的就是搜索。您将使用 Algolia Autocomplete.js 库为您的博客导航栏添加自动完成搜索体验。当用户在字段中键入内容时,自动完成功能会通过提供完整的术语或结果来“完成”他们的想法。自动完成库是源代码不可知的,所以您还需要 Algolia InstantSearch 库来连接到后端的索引。

npm install @algolia/autocomplete-js algoliasearch @algolia/autocomplete-theme-classic --save

要在 React 项目中使用自动完成库,首先需要创建一个自动完成组件来包装该库。您可以在自动完成文档中找到样板文件。

./frontend/components/autocomplete.js

import { autocomplete } from '@algolia/autocomplete-js';
import React, { createElement, Fragment, useEffect, useRef } from 'react';
import { render } from 'react-dom';

export function Autocomplete(props) {
  const containerRef = useRef(null);

  useEffect(() => {
    if (!containerRef.current) {
      return undefined;
    }

    const search = autocomplete({
      container: containerRef.current,
      renderer: { createElement, Fragment },
      render({ children }, root) {
        render(children, root);
      },
      ...props,
    });

    return () => {
      search.destroy();
    };    
  }, [props]);

  return <div ref={containerRef} />;
}

就像在后端一样,您需要您的 Algolia 凭证来连接到 API。由于前端只需要从索引中读取,您可以使用应用程序的搜索关键字。创建一个./frontend/.env.local文件来存储您的凭证。

NEXT_PUBLIC_ALGOLIA_APP_ID=XXXXXXXXXX
NEXT_PUBLIC_ALGOLIA_SEARCH_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

现在,您可以初始化与 Algolia 的连接,并通过更新./frontend/components/nav.js中的代码来添加新的自动完成组件。

import React from "react";
import Link from "next/link";

import { getAlgoliaResults } from '@algolia/autocomplete-js';
import algoliasearch from 'algoliasearch';
import { Autocomplete } from './autocomplete';
import SearchItem from './searchItem';
import "@algolia/autocomplete-theme-classic";

const searchClient = algoliasearch(
  process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,
  process.env.NEXT_PUBLIC_ALGOLIA_SEARCH_API_KEY,
);

const Nav = ({ categories }) => {
  return (
    <div>
      <nav className="uk-navbar-container" data-uk-navbar>
        <div className="uk-navbar-left">
          <ul className="uk-navbar-nav">
            <li>
              <Link href="/">
                <a>Strapi Blog</a>
              </Link>
            </li>
          </ul>
        </div>
        <div className="uk-navbar-center">
          <Autocomplete
            openOnFocus={false}
            detachedMediaQuery=''
            placeholder="Search for articles"
            getSources={({ query }) => [
              {
                sourceId: "articles",
                getItemUrl( {item} ) { return `/article/${item.slug}`},
                getItems() {
                  return getAlgoliaResults({
                    searchClient,
                    queries: [
                      {
                        indexName: "development_api::article.article",
                        query,
                      }
                    ]
                  })
                },
                templates: {
                  item({ item, components}) {
                    return <SearchItem hit={item} components={components} />;
                  }
                }
              },
            ]}
          />
        </div>
        <div className="uk-navbar-right">
          <ul className="uk-navbar-nav">
            {categories.map((category) => {
              return (
                <li key={category.id}>
                  <Link href={`/category/${category.attributes.slug}`}>
                    <a className="uk-link-reset">{category.attributes.name}</a>
                  </Link>
                </li>
              );
            })}
          </ul>
        </div>
      </nav>
    </div>
  );
};

export default Nav;

如您所见,您正在向Autocomplete组件传递几个参数:

  • openOnFocus={false}–告诉您的搜索在用户开始输入之前不要填充结果
  • detachedMediaQuery=''–以分离模式打开搜索,为您的结果提供更多空间
  • placeholder="Search for articles"–搜索前出现在搜索框中的文本
  • getSources={({ query }) =>–为您的自动完成体验定义数据源的地方

请记住,自动完成是源代码不可知的。您可以基于应用程序中的 API、库或静态内容来定义源代码。这里,您使用autocomplete-js库中的getAlgoliaResults函数将一个名为articles的源绑定到您的 Algolia 索引。

              {
                sourceId: "articles",
                getItemUrl( {item} ) { return `/article/${item.slug}`},
                getItems() {
                  return getAlgoliaResults({
                    searchClient,
                    queries: [
                      {
                        indexName: "development_api::article.article",
                        query,
                      }
                    ]
                  })
                },
                templates: {
                  item({ item, components}) {
                    return <SearchItem hit={item} components={components} />;
                  }
                }
              },

development_api::article.article是上面的 Strapi 搜索插件为您的article内容类型生成的索引。当您进入生产阶段时,插件将在同一个应用程序中创建一个单独的production_api::article.article索引。

getItemUrl()部分设置键盘导航,而getItems()使用搜索框中的查询词从索引中检索文章。

注意上面的代码引用了一个SearchItem组件。这是您将用来告诉 Autocomplete 如何呈现您的搜索结果的template。用下面的代码添加一个名为./frontend/components/searchItem.js的新组件。

import React from "react";

function SearchItem({ hit, components }) {
  return (
    <a className="aa-ItemLink" href={`/article/${hit.slug}`}>
      <div className="aa-ItemContent">
        <div className="ItemCategory">{hit.category.name}</div>
        <div className="aa-ItemContentBody">
          <div className="aa-ItemContentTitle">
            <components.Highlight hit={hit} attribute="title" />
          </div>
          <div className="aa-ItemContentDescription">
            <components.Highlight hit={hit} attribute="description" />
          </div>

        </div>
      </div>
    </a>
  );
};

export default SearchItem;

使用这段代码,您将显示与文章、标题和描述相关联的category。使用components.Highlight组件来强调匹配用户查询的属性部分。

就这样,你完成了!用npm run dev启动你的前端服务器。现在,您应该会在页面顶部看到自动完成搜索框。点击它打开模态搜索界面,你可以开始输入你的搜索词。

你可以在 codesandbox 上看到这个前端的托管版本,尽管后端容器启动可能需要一些时间。前端代码的之前的之后的版本也可以在 Github 上获得。

如果你用这个博客做了一些很酷的东西,请在 Twitter 上与我们分享。

使用自定义词典增加语言的清晰度& NLP

原文:https://www.algolia.com/blog/engineering/adding-linguistic-clarity-by-integrating-custom-dictionaries-in-nlp/

语言是一种有趣的东西。比如我们理所当然的认为灰姑娘穿了玻璃拖鞋。只有在童话里,人们才能穿着玻璃鞋走路。但也许这是隐喻——作为灰姑娘的脆弱。或者也许这只是一个简单的的误译,原拉丁词“vair”(松鼠毛皮)为法语“verre”(玻璃)。

语言也很难确定。尤其是迷失在翻译中的时候。但没必要绝望——有时候失去的东西可以有 令人惊喜和感动的结果

但是我们并不总是想要惊喜。比如当我们直接提问或搜索与我们的查询相匹配的特定项目时。在那一点上,我们渴望变得清澈透明。

这就是字典的用武之地。字典让我们变得清晰,通过在更大的短语的上下文中加强每个单词的清晰度。我们使用字典来加强我们的自然语言处理(NLP)。以下是方法。

停用词和复数,以及复合词和分段——这些是我最喜欢的东西

许多用户仍然输入类似“最好的搜索引擎是什么?”而不是更短的“最佳搜索引擎”。他们说话时打字的方式很自然。但是其他人喜欢使用更短、不完整的短语来返回相同的结果。随着搜索技术的进步,即使是无意义的查询,如“引擎最佳搜索”,也会返回很好的结果。

尽管如此,完整的短语仍然很流行——对于声音来说更是如此。语音搜索的成功取决于允许人们自然地说话。而 停止词 就是关键。停用词将一个自然短语简化为其最基本的要素: 关键词 。通过从上述查询中丢弃诸如“什么”、“是”和“该”之类的词,并且只留下关键字“最佳”、“搜索”和“引擎”,搜索引擎可以以更可靠和相关的方式将查询与底层数据进行匹配。

诚然,所有的单词都很重要——“什么”和“为什么”确实是有意义的区别——但如果搜索算法依赖于 文本 匹配(与意义匹配或 语义 相反),它唯一的工作就是比较字符和单词。因此,通过删除停用词,可以删除匹配单词“the”的误报。

我们可以这样说 归一化 (如去除重音) 复数 。任何专注于文本而非文本含义的搜索算法都应该忽略文本的变化(如复数),以实现更相关、更明确的单词匹配。

最后,文本匹配也需要将单词分成有用的部分。“船屋”不是房子或船,而是专门用作房子的船。为了帮助达到这种精度水平,文本搜索算法需要通过使用类似于 分割分解 的技术来分解单词的组成部分(原子)。

切分或分解的目标不是理解单词的意思,而是找出一个复杂的单词可以分解成什么。我们试图找到这个词的“原子”。我们在英语中不使用它,因为大多数单词已经被分解了,这是语言的基因。法语也一样。但德语比如hunde hutte,意为 狗窝 ,是由“Hund”(狗)和“hütte”(狗窝/房子)组成的。在英语中,这两个词之间已经存在的空间就是我们不需要分解的原因。分段本质上是同样的事情,但是对于根本没有空格的语言(例如,大多数亚洲语言)。

这就是字典的用武之地。

使用字典进行基于文本的匹配

自然语言处理的一种方法是使用字典,例如停用词字典、复数字典和复合词字典。例如,您可以解析从wikitionary下载的停用词列表,不仅是英语,还有许多其他语言。

下面是我们使用的过程:

  • 下载完整的维基词典——单词、定义等等
  • 提取文字
  • 将它们存储在文本文件中
  • 将它们编译成二进制格式
  • 优化代码以提高性能

我们对每一种语言都这样做,而且它对大多数用例都相当有效。但是当它不起作用时,它就破坏了相关性——这是搜索引擎的一个关键障碍。下面是我们遇到的一些问题

我“倒”着了

“羽绒”是一个合理的停用词,除非你在搜索“羽绒服”。销售“皮革”、“麂皮”和“羽绒”夹克的公司不能从查询中删除“羽绒”。

暧昧披着“皮毛”(不是松鼠的皮毛)

使用重音的语言,如法语和西班牙语,在使用重音消除进行规范化时表现良好。例如,从“瞧”到“瞧”不会失去任何意义。事实上,在法语中,去掉重音很少会造成歧义。德国人就没这么幸运了。比如重音的“a”,归一化为“a”后,会改变一些词的意思。

一个有趣的例子是德语单词whlen,在英语中是“选择”的意思。如果你去掉口音,大多数人不会反对——除了这个讲德语的瑞士小镇的 1500 名居民。在众多与“瓦伦”匹配的结果中,可能很难找到“瓦伦”这个城镇——因此,损害了该地区的旅游业。

解决的办法是做一个特殊的 自定义规范化 为德语。在这种情况下,将“δ”归一化为“ae”。这里有一个完整的列表:

ä → ae
ö → oe
ü → ue
Ä → Ae
Ö → Oe
Ü → Ue
ß → ss (or SZ for capital)

但是这导致了第二个问题,这说明了搜索引擎在处理语言时所经历的困难。(记住,语言是搞笑的……)所以我们把“für”归一化为“fuer”,但是现在我们失去了停用词“fur”,因为现在归一化的“fuer”不是停用词。

这就是 自定义词典的用武之地。

解决方案——通过自定义词典给予客户控制权

我们意识到每个类别一个字典是不够的,我们需要为每个客户提供一个额外的字典,他们可以用它来覆盖 Wiktionary 的默认设置或添加他们自己的单词。 所以现在我们每个类别都有两本词典(停用词、复数等。):每种语言一个,我们随软件一起发布,每个客户一个自定义词典,他们可以添加单词。 添加自定义词典——也就是说,允许每个客户覆盖他们自己的单词并将其添加到我们的词典中——需要对我们处理标准词典的方式进行一些重构:每个词典检索功能都有不同的接口,每个词典数据集都有不同的格式。所以第一步是标准化我们的代码和数据。

规范我们的代码库和标准化我们的字典接口

我们检查了作为基础产品的一部分发送给客户的当前词典。我们想抽象出每本词典的相似之处。因为他们都有相同的数据和目标,所以我们能够做以下事情:

  • 创建相似数据=单词列表
  • 编码相同的目标=检索单词的能力

将这些字典放入一个单一的界面,主要任务包括(按此顺序):

  1. 将所有字典数据集转换为具有相同的数据结构:trie
  2. 将现有词典迁移至新格式

最后,我们的复数字典文件的新格式是:

[2-letter country code]=[word1,word2,..]

为了和我们的介绍保持一致,这里有一个关于复数的好例子:

en=feet,feets,foot,foots
en=slipper,slippers
en=squirrel,squirrels
en=fur,furs
en=Cinderella,Cinderellas
en=Cinderfella,Cinderfellas

这是第一部分:统一数据的接口和结构。

这样,我们实现了以下目标:

  • 一个适用于所有字典的更简单的字典接口
  • 共同化的工具和测试
  • 更容易维护

插在客户自创、自定义的字典里

现在,我们为每个词典提供了一个单一的接口,我们能够为每个 NLP 技术集成客户定义的单词,例如,客户特定的停用词(参见上面的“down”示例),客户特定的规范化(参见上面的“für”示例),等等。

这些自定义词典被添加到静态词典之上的索引中。我们对字典查找进行了优先级排序:查询首先查询定制字典,然后查询静态字典。如果找到了这个单词,那么引擎就不需要查看静态字典。

就是这样:我们的顾客现在可以穿上一只拖鞋,帮助他们自己的顾客找到另一只拖鞋——毛皮或玻璃的。

通过 Okta & Lambda@Edge 向 AWS S3 / Cloudfront 添加 OAuth2 身份验证

原文:https://www.algolia.com/blog/engineering/adding-oauth2-authentication-to-an-aws-s3-static-bucket-with-okta/

我们的团队最近实现了一个内部静态网站,允许员工下载技术报告。由于我们是 AWS(亚马逊网络服务)的重度用户,我们自然决定将其托管在 AWS S3 上,它提供了一个专门的功能来构建静态网站( S3 静态网站托管)。

然而,很快我们就遇到了一个问题:AWS S3 不提供任何本地的、开箱即用的认证/授权过程。因为我们的网站将只供内部使用,所以我们需要某种授权机制来防止未经授权的用户访问我们的网站和报告。

我们需要找到一个解决方案来保护我们在 AWS S3 的内部静态网站。

用亚马逊 CloudFront 和 Lambda@Edge 发现解决方案

我们使用 Okta 进行所有身份和用户管理,因此无论我们找到什么解决方案,都必须使用 Okta 插件。Okta 有几个认证/授权流程,所有这些流程都需要应用程序执行后端检查,比如验证 Okta 返回的响应/令牌是否合法。

因此,我们需要找到一种方法,在一个静态网站上进行这些检查/操作,该网站使用我们无法控制的后端。就在那时,我们了解到了 AWS Lambda@Edge ,它允许您在亚马逊 Cloudfront 的请求和响应的不同阶段运行 Lambda 函数:

cloudfront events that trigger lambda functions

如图所示,我们可以在四个不同的阶段触发 Lambda 函数:

  • 当请求进入 Amazon Cloudfront ( viewer-request)时
  • 当请求发送到原点(origin-request)时
  • 当响应从原点返回时(origin-response
  • 当亚马逊 Cloudfront ( viewer-response)返回响应时

我们看到了最初问题的解决方案:viewer-request阶段触发一个 Lambda 来检查用户是否被授权。

有两个条件:

  1. 如果用户得到授权,则让请求继续,并返回受限制的内容以进行安全的内容传递
  2. 如果用户未经授权,则发送 HTTP 响应,将他们重定向到登录页面

实现 Lambda@Edge 功能

我们将在这里讨论我们面临的关键因素和主要问题。完整的代码可在这里获得。请随意在您的项目中使用它!

λ@ Edge 限制和注意事项

在开发解决方案时,我们遇到了 Lambda@Edge 的一些限制和警告。

1–环境变量

Lambda@Edge 函数不能使用环境变量。这意味着我们需要找到另一种方法在我们的函数中进行数据传输。我们在 Node.js 代码中选择了 SSM 参数模板化参数名(我们在部署 Lambda 函数时使用 Terraform 来呈现模板)。

2–Lambda 封装大小限制

对于查看器事件(提醒:我们使用viewer-request事件),Lambda 包最多可以1mb。考虑到一个 MB 包含了你的 Lambda 函数的所有依赖关系(当然除了运行时/标准库),这个 MB 是很小的。

这就是为什么我们不得不在 Node.js 中重写我们的 Lambda,而不是原来的 Python,因为 Python 包及其 API 和其他依赖项超过了 1 MB 的限制。

3–λ区域

Lambda@Edge 函数只能在us-east-1区域中创建。这不是一个大问题,但这意味着您需要:

  • 在该地区提供您的 AWS 资源,使事情变得更容易
  • 在 Terraform 中,如果你想要保护的桶不在us-east-1中,你需要有一个单独的 AWS provider来访问它

4–Lambda 角色权限

与 Lambda@Edge 函数相关联的 IAM 执行角色除了通常的lambda.amazonaws.com之外,还必须允许主体服务edgelambda.amazonaws.com 。请参见AWS–设置 Lambda@Edge 的 IAM 权限和角色

授权机制同 Okta

一旦我们管理了上面的限制和警告,我们就把重点放在了授权上。

Okta 提供了几种认证和授权用户的方法。我们决定使用行业标准的授权协议 OAuth2

注意: Okta 实现了 **OpenID Connect (OIDC)标准,**在 OAuth2 之上增加了一个瘦认证层(这就是下文提到的 ID 令牌的目的)。我们的解决方案也可以使用纯 OAuth2,只需很少的修改(删除代码中使用的 ID 标记)。

OAuth2 本身提供了几个授权流,这取决于使用它的应用程序的种类。在我们的例子中,我们需要授权代码流

下面是取自developer.okta.com的完整授权代码流程图,展示了它是如何工作的:

oauth authentication/authorization code grant flow.

总结一下流程:

  • 我们的 Lambda 函数将用户重定向到 Okta,提示他们登录
  • Okta 用代码将用户重定向到我们的网站/Lambda 功能
  • 我们的 Lambda 函数检查代码是否合法,并通过向 Okta 发送请求来交换访问和 ID 令牌
  • 根据 Okta 返回的结果,我们:
    • 允许或拒绝访问受限制的内容
    • 如果允许访问,将访问和 ID 标记保存在 cookie 中,以避免在每个页面上重新授权用户

使用 JSON Web 令牌存储授权结果

到目前为止,我们有一个有效的授权流程;然而,我们需要检查每个请求上的 access/ID 令牌(恶意用户可以伪造无效的 cookie 或令牌)。检查令牌意味着向 Okta 发送请求,并在用户访问的每一页上等待响应**,这显著降低了 Cloudfront CDN 的延迟和加载时间,显然是次优的。**

**注意:虽然 Okta 令牌的本地验证在理论上是可能的,但是在撰写本文时Okta提供的 SDK 在获取用于检查令牌的密钥时使用了 LRU (内存中)缓存。因为我们使用的是 AWS Lambda,并且程序的内存/状态不会在调用之间保存,所以 SDK 对我们来说是无用的:它仍然会为每个用户请求向 Okta 发送一个 HTTP 请求,以检索 JWKs (JSON Web Keys)。更糟糕的是,每分钟有 10 个 JWK 请求的限制,如果每分钟超过 10 个请求,我们的解决方案就会停止工作。

*为了解决这个问题,我们决定使用 JSON Web 令牌 ,就像我们对管理应用程序所做的那样。初始授权过程是相同的,只是我们创建了一个包含这些令牌的 JWT,然后将 JWT 保存到 cookie 中,而不是将访问/ID 令牌保存到 cookie 中。

因为 JWT 是加密签名的:

  • 恶意参与者无法伪造(他们需要用于签名的私钥)
  • 每个请求所需的检查步骤都很快:我们用一个很长的 I/O 开销很大的 HTTP 请求来计算一个快速的加密检查。

关于 JWT 到期和续期的说明

JWT 具有相对较短的预定义到期时间,以避免有效的 JWT 包含到期或撤销的访问/ID 令牌。另一种选择是定期检查访问/ID 令牌,并在需要时撤销相关的 JWT,但这样我们将需要一个撤销机制,这使得事情变得更加复杂。

最后,如上所述,Okta 提供的令牌有过期时间。有可能使用刷新令牌透明地更新它们(因此当令牌过期时,用户不必重新登录),但我们没有实现这一点。

结论

虽然通过 Okta(或任何其他 OAuth2 提供者)将 OAuth2 身份验证添加到 S3 静态桶中是可能的,但这肯定不是简单的。

它需要使用 Lambda@Edge 在 AWS 和 OAuth2 提供者(在我们的例子中是 Okta)之间编写一个中间件。我们必须自己做以下事情:

  1. 验证用户身份验证
  2. 还记得用户认证吗
  3. 刷新用户身份验证(在我们的解决方案中没有实现)
  4. 撤销用户身份验证(TTL 实现了,但 TTL 结束前的撤销没有实现)

最后,必须创建一堆 AWS 资源来将所有东西粘在一起并使其工作。

所有这些努力都是值得的,因为它起作用了,我们的网站现在更安全了。

你可以在这里找到 Lambda@Edge 以及基础设施(Terraform)的代码:https://github.com/GuiTeK/aws-s3-oauth2-okta。*

向您现有的电子商务商店添加趋势推荐

原文:https://www.algolia.com/blog/engineering/adding-trending-recommendations-to-your-existing-e-commerce-store/

推荐可以成就或毁掉一次网上购物体验。在一个充满无限选择和无限滚动的世界里,推荐让客户能够穿过噪音,发现他们更有可能喜欢的新东西。他们还可以帮助客户了解新的购物领域的新事物——无论是搜索完美的礼物还是购买新的东西,基于推荐的功能,如趋势产品部分,可以帮助用户充分利用他们的在线时间。

对于希望将这些重要功能添加到他们的电子商务体验中的开发者来说, Algolia 推荐可以成为拯救世界的超级英雄。请继续阅读,了解如何利用 Algolia 推荐以及 Insights API 来展示趋势产品并增强您的电子商务应用程序!

我们在建设什么

在本文中,我们将使用 React 和 Commerce.js 开发一个电子商务应用程序。幸运的是,我们不必从头开始构建——我们将使用最初为 Algolia DevCon 开发的这个基本电子商务应用程序作为我们的起点。

完成教程后,我们的应用程序将能够使用 Algolia 的 InstantSearch insights 库、Insights API 和 Algolia Recommend 在单个产品详情页面上推荐热门产品。

如果你想提前查看完整的项目代码,可以访问[algolia-commercejs-recommendations-app资源库】(https://github . com/hello-ashleyintech/algolia-commerce js-recommendations-app)。

rec-only-algolia-commercejs-recommendations-app.gif

还要记住,尽管这篇文章是面向 React 和 Commerce.js 的,但它仍然是扩展任何带有 Algolia 推荐的电子商务应用程序的通用指南。如果您对在不同的环境中实施推荐有更具体的问题,文档会提供您想要的信息。

入门

在我们开始构建之前,请确保您设置了以下内容:

当以上一切准备就绪时,将基础项目 algolia-commercejs-app的 GitHub 库克隆到您的机器上。然后,按照本自述文件中的说明完成本教程应用程序的设置(确保为clientserver目录在.env.example中设置了包含所有环境变量的.env文件)。

一旦您有了一个在本地运行的电子商务商店,并且成功地展示了您的产品并运行了聊天机器人,您就可以进行下一步了!

咱们建吧!

既然基础应用程序已经设置好了,让我们开始构建吧!🔨

在工艺路线和产品明细页面中添加

为了开始跟踪什么是趋势,我们需要设置页面路由和一个组件,当从主屏幕上单击产品时,它会显示产品的详细信息页面。

创建ProductIndividual组件

首先,我们需要一个新的组件来展现产品的细节。在您选择的代码编辑器中,通过向client/src/components目录添加一个新文件ProductIndividual.js,创建一个新组件ProductIndividual:

// client/src/components/ProductIndividual.js
import React from "react";

function ProductIndividual() {
  return (
    <></>
  );
}

export default ProductIndividual; 

您可能会注意到文件现在非常空——组件将是空的,直到我们能够从ProductList向其传递单个产品数据。一旦我们配置了主页和产品详细信息页面之间的链接路径,这将成为可能。

client/src/components目录中,还可以为标题为ProductIndividual.cssProductIndividual组件创建一个对应的 CSS 文件。因为组件中没有呈现任何内容,所以这个 CSS 文件现在可以保留为空白。您可以通过在现有的 import 语句下添加以下行,在您的ProductIndividual.js文件中导入新的 CSS 文件:

import "./ProductIndividual.css"; 

设置 React 路由器

为了路由到不同的页面,我们将使用 React Router ,它允许我们无缝地创建具有不同视图的 URL 路由。首先,我们需要安装react-router-dom包。在项目的client目录中运行以下命令,以便只在前端安装软件包:

npm i react-router-dom 

一旦安装了这个包,我们就可以开始向我们的应用程序添加路由,包括一个指向我们刚刚添加的ProductIndividual组件的路由。为此,转到client/src/App.js并将以下导入语句添加到文件顶部:

import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import ProductIndividual from "./components/ProductIndividual"; 

既然已经导入了react-router-dom,我们可以使用它的功能将 URL 路由连接到由各种组件组成的不同视图。在App()函数中,更新return(),使其仅包含以下代码:

<Router>
  <div className="app">
    <NavBar />
    <Routes>
      <Route
        exact path="/"
        element={
          <>
            <ProductsList products={products} />
            <Bot />
          </>
        }
      />
      <Route
        exact path="/products/:id"
        element={
          <>
            <ProductIndividual />
            <Bot />
          </>
        }
      />
    </Routes>
  </div>
</Router> 

上面的代码初始化了两条路线,//products/:id:

  • /路径呈现了用户可用的所有产品的主页视图,以及基础应用程序中存在的聊天机器人小部件。
  • /products/:id路径将呈现新添加的ProductIndividual组件以及基础应用程序中已有的聊天机器人小部件。此路线中的:id代表所选产品的 ID,它允许在所有不同的产品详细信息页面中区分路线。

使导航栏图标可点击

既然我们已经设置了路线,我们可以在导航栏中配置我们的品牌图标,以链接回主页。这对于我们进入产品详细信息页面非常有用,因为它会给我们一个简单的返回主页的路径。

转到client/src/components/NavBar.js并添加以下导入语句:

import { Link } from "react-router-dom"; 

这将从react-router-dom包中导入一个Link组件。[Link组件】(https://reactrouter . com/en/main/components/link)允许我们将组件、文本和其他元素链接到App.js中 React Router 初始化的路由。

为了使 logo 组件<Logo>在导航条中可链接,你应该把它包装在<Link>标签中,就像这样:

<Link to={"/"}>
  <Logo className="logo" />
</Link> 

我们将一个to属性传递给Link组件,该属性将指定当点击<Link>标签中的组件时,应用程序将重定向到什么路由。在这种情况下,to属性是到主页的路径(/)。

一旦添加完毕,点击你的导航条图标,你将回到主页!

设置商品首页链接到商品详情

现在我们已经有了链接组件的经验,这样它们可以重定向到特定的路径,我们可以开始工作,使主页上的每个产品都可以点击!

主页上的每个产品都是通过ProductsList组件呈现的,从 Commerce.js 查询的一组产品已经作为一个道具传入。在ProductsList组件中,产品数组被遍历以呈现显示每个产品及其相关信息的单个ProductItem组件。

ProductsList中,我们可以将为每个产品呈现的ProductItem包装在一个<Link>标签中,这样产品就可以导航到单个产品页面。

首先,在client/src/components/ProductsList.js中导入Link组件:

import { Link } from "react-router-dom"; 

然后,在同一个文件中,将在products.map()语句的每次迭代中呈现的ProductItem组件包装在一个<Link>标记中:

<Link
    to={`/products/${product.id}`}
    state={{ selectedProduct: product }}
    key={product.id}
>
  <ProductItem product={product} />
</Link> 

<Link>标签中,我们这次传入了两个道具:

  • 一个to属性,指定重定向到哪个路由。对于to属性,我们传入的是产品的 ID,而不是路线的:id部分,这确保用户链接到一个带有产品自定义视图的特定产品页面。
  • 一个state属性,它允许将信息传递给在Link组件重定向到的路径中呈现的组件。对于state属性,我们传入产品信息,该信息可以通过selectedProduct属性访问。

美化您的产品详情页面

现在用户可以从主页访问ProductIndividual组件了,我们可以将它更新为从添加在ProductsList中的Link组件传递给它的表面信息。

client/src/components/ProductIndividual.js中,添加以下导入:

import { useLocation } from "react-router-dom"; 

上面的语句从react-router-dom库中导入了一个[useLocation钩子】(https://react router . com/en/main/hooks/use-location)。useLocation允许你访问一个location对象,该对象详细描述了关于你当前所在的 URL 的信息,以及传入到那里的信息。该信息包括从ProductsList传入的state属性。state包含一个selectedProduct属性,其中包含从 Commerce.js 中检索到的所有产品信息。

让我们从使用useLocation挂钩开始!在ProductIndividual.jsProductIndividual()的函数体顶部,添加以下几行代码:

const location = useLocation();
const selectedProduct = location.state?.selectedProduct; 

上面的代码会通过useLocation钩子抓取location对象。然后,使用该对象,将所选产品的信息从该对象填充到selectedProduct中。

我们现在可以使用来自location对象的selectedProduct来显示与产品相关的一组特定信息(因为我们的目标是一个非常简单的产品详细信息页面,所以我们将只显示一个图像、一个名称和一个格式化的价格)。更新ProductIndividual组件中的return(),如下所示:

<>
  <div className="item__container">
    <img
      className="item__image"
      src={selectedProduct.image?.url}
      alt={selectedProduct.name}
    />
    <div className="item__info">
      <h3 className="item__name">{selectedProduct.name.toUpperCase()}</h3>
      <div className="item__details">
        <p className="item__price">
          {selectedProduct.price.formatted_with_symbol}
        </p>
      </div>
    </div>
  </div>
</> 

最后,为了更新ProductIndividual组件新添加信息的样式并使其看起来更漂亮,将ProductIndividual.css 文件中的 CSS 添加到项目的ProductIndividual.css文件中。

此时,您的应用程序现在应该能够:

  • 主页中的 Surface 单个产品详细信息页面
  • 允许用户使用导航栏中的商店徽标从产品详细信息页面导航回主页

添加事件跟踪

好消息—现在,用户可以在您的应用中访问单个产品的详细信息页面!🎉添加了这个功能后,我们可以开始跟踪用户交互,看看有什么趋势。对于我们的应用程序,我们将考虑一个“趋势项”,即用户持续交互的项。

由于我们的应用程序除了点击产品之外不包含任何交互,所以每当有人点击商品并导航到商品的详细页面时,我们都会记录一个到 Algolia 的转换事件。通常,如果我们的应用程序有更多的特性,我们可能会使用“添加到购物车”按钮交互作为转换事件。你可以在这里了解更多关于事件和向 Algolia 发送事件的信息。

设置即时搜索

我们需要安装来自 Algolia 的三个包,以帮助我们实现基于用户点击记录转换事件的预期目标。这些包是algoliasearchreact-instantsearch-domsearch-insights

您可以使用以下命令将它们一次性安装到项目的client目录中:

npm i algoliasearch react-instantsearch-dom search-insights 

为了跟踪用户交互,我们需要设置 InstantSearch ,这是一个开源 UI 库,支持各种搜索功能,包括将 Algolia 跟踪组件嵌入其实现中的能力。

首先将以下导入语句添加到client/src/App.js:

import aa from 'search-insights';
import algoliasearch from 'algoliasearch';
import { InstantSearch, Configure } from 'react-instantsearch-dom'; 

接下来,在App()函数声明的顶部添加以下内容:

const searchClient = algoliasearch(
  process.env.REACT_APP_ALGOLIA_APP_ID,
  process.env.REACT_APP_ALGOLIA_API_KEY
);

aa('init', {
  appId: process.env.REACT_APP_ALGOLIA_APP_ID,
  apiKey: process.env.REACT_APP_ALGOLIA_API_KEY
}); 

上面通过 Algolia Search 初始化了一个搜索客户端,我们可以将它传递给 Algolia 的InstantSearch组件以及一个 search insights 实例,帮助记录用户交互。

接下来,我们将把每条路线的组件包装在一个InstantSearch组件中,并添加一个Configure组件,该组件专门支持在InstantSearch实例中跟踪点击。在您的App.jsreturn()语句中,用以下代码替换<Routes>标记中的代码:

<Route
  exact
  path="/"
  element={
    <InstantSearch searchClient={searchClient} indexName="products">
      <Configure clickAnalytics />
      <ProductsList products={products} />
      <Bot />
    </InstantSearch>
  }
/>
<Route
  exact
  path="/products/:id"
  element={
    <InstantSearch searchClient={searchClient} indexName="products">
      <Configure clickAnalytics />
      <ProductIndividual />
      <Bot />
    </InstantSearch>
  }
/> 

每条路线的组件都用一个InstantSearch包装器包装,该包装器接收从algoliasearch初始化的searchClient。此外,它接受一个与您的产品同步到的 Algolia 索引相对应的indexName——在本例中,它是products

添加事件到日志洞察

现在一切都已配置完毕,我们可以开始在主页上跟踪产品的转换事件了。更新client/src/components/ProductsList.js文件中的代码,如下所示:

import React from "react";
import { Link } from "react-router-dom";
import PropTypes from "prop-types";
import ProductItem from "./ProductItem";
import "./ProductsList.css";
import aa from "search-insights";
import { connectHitInsights } from "react-instantsearch-dom";

function Product({ products }) {
  return (
    <div className="products" id="products">
      {products.map((product) => (
        <Link
          to={`/products/${product.id}`}
          state={{ selectedProduct: product }}
          key={product.id}
          onClick={() => {
            aa("convertedObjectIDs", {
              userToken: "user-1",
              index: "products",
              eventName: "Product conversion",
              objectIDs: [product.id],
            });
          }}
        >
          <ProductItem product={product} />
        </Link>
      ))}
    </div>
  );
}

Product.propTypes = {
  products: PropTypes.array,
};

const ProductsList = connectHitInsights(aa)(Product);
export default ProductsList; 

我们在这里做了一些更新:

  • aaconnectHitInsights作为进口增加。

  • The component’s functional declaration, ProductsList(), has been renamed to Product() — this is so we can connect the component’s declaration to Algolia’s Insights API later on in the file using the connectHitInsights() function, which will then be stored and exported as the ProductsList component. This is accomplished in the following line of code at the end of the file:

    const ProductsList = connectHitInsights(aa)(Product); 
    

    由于这一变化,当拉动Product()组件初始化下面的propTypes时,ProductsList也被换成了Product

  • Link组件添加了一个onClick()监听器。因为我们将用户点击产品视为转换,所以每当用户点击产品时,onClick()监听器将使用search-insights库中的aa来记录一个[convertedObjectIDs事件(https://www . algolia . com/doc/API-reference/API-methods/converted-object-ids/)。aa事件记录还需要一些其他参数:

    • 一个userToken,我们硬编码为user-1。这是一个唯一的用户 ID——如果您为您的应用程序使用单独的用户帐户,您将检索当前用户的 ID 并在此处填充它。
    • 一个index,这是我们的产品所对应的 Algolia 指数,在这种情况下,它是products
    • 这可以是你想要的任何东西。
    • objectIDs —这是一系列与此事件相关的产品。因为我们的应用程序为每一次产品点击记录一个事件,所以我们总是只传入一个产品 ID。

确认事件正在被发送到阿哥利亚

至此,向 Algolia 发送转换事件的所有设置都已添加完毕。但是…这些事件在哪里结束?我们怎么知道所有的重担是否值得?

答案很简单——你可以进入 Algolia 仪表盘的事件部分!本节由两部分组成:

  • 事件中心,将显示过去 7 天发送到 Algolia 的所有事件的仪表板:
  • 事件调试器,它显示了事件进来时的详细的、逐个事件的分解:

当您看到您的活动出现在 Algolia 界面上并带有200状态代码时,您就知道这些活动已成功发送。要了解更多关于调试和验证事件的信息,你可以访问这篇文章

最终前沿:表面趋势产品推荐

此时,您成功地将应用用户的转化事件发送到了 Algolia。现在你有了所有这些漂亮的数据,你该怎么处理呢?

介绍 Algolia 推荐 —一个易于使用的 Algolia 功能,它获取事件数据,训练机器学习模型识别数据中的期望模式,然后将信息显示在您的网站上!

虽然这听起来可能很复杂,但 Algolia 让它变得非常简单——你需要做的只是收集事件并提交表单,然后他们会做剩下的事情。但是,要确保为您想要使用的推荐模型收集正确类型的事件。您可以在此查看各型号的要求。

生成推荐模型

对于这个特定的教程,我们将为“趋势推荐”生成一个推荐模型,这需要在 3 天的时间内对一个特定的索引进行至少 500 次转换事件。要获得您需要的数据,您可以暂时在这里暂停,让您的应用程序有机地生成这些事件,或者我们可以走捷径,生成一个事件数据的 CSV。为了测试本教程,我们创建了一个假的 CSV,它包含名为userTokentimestampobjectIDeventTypeeventName的列。然后,我们为 3 个不同的日子生成 3 个不同的时间戳,用这些时间戳填充timestamps列,并为我们的索引中的产品随机添加objectID

一旦你有了你的数据,在你的仪表板上进入推荐模型页面,选择“趋势推荐”选项。对于数据源,请选择您用来存储电子商务商店商品的索引。

第二步,添加您的数据。如果您在 3 天内手动生成了 500 个转换事件,则可以跳过这一步,除非除了您选择作为数据源的事件之外,还有任何事件记录到其他索引中。如果您已经创建了包含所有活动数据的 CSV,您将在此步骤中使用“上传 CSV”按钮上传它。

接下来,确保选择了“趋势项目”选项。然后,您可以单击“开始训练”按钮。您推荐的模型将开始训练,根据您拥有的数据,训练可能需要几分钟到几个小时。当您在模型页面上看到类似以下内容时,您就知道您的模型已经完成了训练:

如果您遇到任何问题或模型失败,您可能需要检查您的数据和模型所需的数据标准,以确保一切按预期运行。一旦您做出了任何需要的更改,您总是可以提交带有新数据的模型来重新训练它。你可以点击查看完整的 Algolia 推荐设置指南

app 上的表面趋势项目

一旦你的模型被训练好,你就可以把这些生成的建议放到你的应用中。Algolia 通过两个库使这个过程变得简单明了:@algolia/recommend-react@algolia/recommend。将它们都安装到您项目的client目录中:

npm i @algolia/recommend-react @algolia/recommend 

为了提供建议,我们将创建一个新的组件,它将从我们的趋势项目模型中提取数据,然后在 UI 中呈现出来。

client/src/components中,创建一个名为RecommendationCard.js的文件。这将是一个RecommendationCard组件,一个类似于ProductIndividual组件的简单组件,它将把关于产品的数据作为道具,并在其上显示特定信息:

// client/src/component/RecommendationCard.js
import React from "react";
import PropTypes from "prop-types";

function RecommendationCard({ product }) {
  return (
    <>
      <div className="rec__card">
        <img
          className="rec__image"
          src={product.image?.url}
          alt={product.name}
        />
        <div className="rec__info">
          <h4 className="rec__name">{product.name.toUpperCase()}</h4>
        </div>
      </div>
    </>
  );
}

RecommendationCard.propTypes = {
  product: PropTypes.object,
};

export default RecommendationCard; 

添加完RecommendationCard后,在client/src/components中创建一个Recommendations.js文件,这是一个通用Recommendations组件,包含从 Algolia 发送的每个趋势项的RecommendationCard:

// client/src/component/Recommendations.js
import React from "react";
import { Link } from "react-router-dom";
import { useTrendingItems } from "@algolia/recommend-react";
import recommend from "@algolia/recommend";
import aa from "search-insights";
import RecommendationCard from "./RecommendationCard";
import "./Recommendations.css";

function Recommendations() {
  const recommendClient = recommend(
    process.env.REACT_APP_ALGOLIA_APP_ID,
    process.env.REACT_APP_ALGOLIA_API_KEY
  );
  const indexName = "products";

  const { recommendations } = useTrendingItems({
    recommendClient,
    indexName,
  });

  return (
    <div className="trending__container">
      <h2>TRENDING ITEMS</h2>
      <div className="trending__grid">
        {recommendations.map((product) => (
          <Link
            to={`/products/${product.id}`}
            state={{ selectedProduct: product }}
            key={product.id}
            onClick={() => {
              aa("convertedObjectIDs", {
                userToken: "user-1",
                index: "products",
                eventName: "Product conversion",
                objectIDs: [product.id],
              });
            }}
          >
            <RecommendationCard product={product} />
          </Link>
        ))}
      </div>
    </div>
  );
}

export default Recommendations; 

该组件使用 Algolia 的useTrendingItems钩子来查询我们生成的趋势项目模型的结果。useTrendingItems需要传入一个recommendClient,它是使用@algolia/recommend库的recommend函数初始化的。

ProductsList类似,该组件随后遍历 Algolia 返回的建议数组,并呈现一个RecommendationCard,呈现每个产品的数据。RecommendationCard封装在一个Link组件中,该组件将用户路由到所选推荐的产品页面,并通过一个onClick()监听器记录一个转换事件。

当您准备好在您的产品详情页面上展示您的建议时,请进入client/src/components/ProductIndividual.js并导入您的Recommendations组件:

import Recommendations from "./Recommendations"; 

然后,将组件添加到组件的return()中的</>结束标记之前:

<Recommendations /> 

此时,Recommendations组件应该出现在您的产品详细信息页面上,但是它看起来可能有点滑稽。如果你想为这个组件添加一些简单的样式,使它看起来像下面的页面,在client/src/components目录中创建RecommendationsRecommendationCard CSS 文件。从那里,您可以将我们的[Recommendations CSS 文件】(https://github . com/hello-Ashley intech/algolia-commerce js-recommendations-app/blob/master/client/src/components/recommendationcard . CSS)和[RecommendationCard CSS 文件】(https://github . com/hello-Ashley intech/algolia-commerce js-recommendations-app/blob/master/client/src/components/recommendation card . CSS)的内容复制到您的本地组件。

结论

恭喜你!🥳:你已经创建了一个漂亮的电子商务应用程序,允许你根据真实的用户趋势来展示流行产品!你可以在这里查看整个项目的 GitHub 库。通常,这种类型的功能需要几天的编码和相当多的机器学习知识。然而,有了 Algolia 的魔力,你节省了自己的时间许多受挫的谷歌搜索从零开始训练机器学习模型。✨

正如您在本教程中了解到的, Algolia 推荐是一个强大的工具,可以帮助客户获得更有帮助、更个性化的电子商务体验。如果您有兴趣进一步扩展我们今天构建的应用程序,请随意查看其他类型的模型及其所需的数据类型此处并探索如何使用 Algolia 为您的客户添加更多个性化体验。此外,请继续关注即将推出的另一个教程,学习如何为您的电子商务应用程序实现个性化搜索结果!🎉

关键词搜索建立在自然语言处理(NLP)的基础上

原文:https://www.algolia.com/blog/ai/advanced-keyword-search-is-built-upon-natural-language-processing-nlp/

搜索引擎在执行查询之前需要“处理”搜索栏中的语言。这个过程可能非常简单,只需将查询与写入索引的内容进行精确比较。但是经典的关键字搜索比这更高级,因为它涉及到 将查询规范化为更小的部分——即单词和关键字。这个过程可以很简单(单词之间用空格隔开),也可以更复杂(比如亚洲语言,不使用空格,所以机器需要识别单词)。

一旦查询被分解成更小的部分,搜索引擎可以纠正拼写错误和打字错误,应用同义词,将单词进一步简化为词根,管理多种语言,等等——所有这些都使用户能够键入更“自然”的查询。

自然语言关键词

平均而言,人们会键入单个单词或短语来描述他们正在搜索的项目。也就是说,他们使用 关键词, 而不是整句或疑问句。(尽管由于语音技术和谷歌问答结果的成功,这种情况正在改变。)

这种 关键词搜索, 无论是它的简单版本还是更高级的版本,从搜索之初就一直存在。越是自然,技术就越先进。搜索引擎需要对传入的查询进行结构化,然后才能在搜索索引中查找结果。这种预处理技术属于我们所说的 自然语言处理,或 NLP ,是任何使计算机能够理解人类语言的技术的总称,无论是书面语言还是口头语言。

自然语言处理(“NLP”)将文本转换成更易于计算机使用的片段。一些常见的 NLP 任务是删除停用词、分词或拆分复合词。NLP 还可以识别词类或文本中的重要实体。

—达斯汀·科茨,Algolia 的产品和 GTM 经理

我们已经在 Algolia 写了很多关于自然语言处理(NLP)的文章。我们已经 定义了 NLP ,对比了NLP vs,并描述了一些流行的 NLP/NLU 应用 。此外,我们的工程师解释了我们的引擎 如何处理语言处理多语言搜索 。在本文中,我们将了解 NLP 如何驱动关键字搜索,这是我们的 混合搜索解决方案 的重要组成部分,该解决方案还包括基于 AI/ML 的 矢量嵌入哈希

为了理解关键词和自然语言处理之间的联系,深入研究关键词搜索是很重要的。

什么是关键词搜索?

最基本的,关键字搜索引擎将查询的文本与搜索索引中每条记录的文本进行比较。搜索引擎返回所有匹配的记录(无论是精确的还是相似的)。正如所建议的,匹配可以是简单的,也可以是高级的。

我们用关键词来描述服装、电影、玩具、汽车和其他物品。大多数关键字搜索引擎依赖于结构化数据,其中索引中的对象用单个单词或简单的短语清楚地描述。

例如,一朵花可以使用标签或“键”来构造,形成 键-值对 (一朵大的、红色的、夏天的、有四片花瓣的花)可以与它们的 (大小、颜色、季节、物体类型和花瓣数量)配对。这花还能卖到“4.99”的“价格”。

我们可以这样表示键和值的结构:

{
"name": "Meadow Beauty",
"size": "large",
"color": "red",
"season": “summer”,
"type of object": "flower",
"number of petals": "4",
"price": "4.99", 
"description": "Coming from the Rhexia family, the Meadow Beauty is a wildflower.” 
}

所有这些键值对构成了一个可以存储在搜索索引中的记录,因此像“红色花朵”这样的查询将返回“类型=花朵”和“颜色=红色”的所有花朵记录。

此外,类似“红色”的部分查询可以找到“颜色=红绿”的花,因为“红色”在“ 红色 盘中”。

许多关键字搜索引擎使用手动定义的同义词。因此,如果您明确地告诉引擎“blue”和“azure”是同义词,那么“blue”查询可以返回“azure”花朵。

其他技术可以纠正拼写错误和打字错误。查询“4 pedels”包含一个错别字;一个允许输入错误的引擎将返回拼写正确的 flowers(" PEtals ")。引擎也可以将“4”视为“四”的同义词。它还可以将复数“花瓣”与单数“花瓣”进行匹配,因为它们都具有相同的词根“花瓣”。

部分搜索,如“4 pe”,可以匹配“four petals”,因为大多数关键字搜索引擎都允许前缀搜索,这使得重要的 as you type 功能成为可能,用户可以在键入时看到搜索结果或查询建议。

再举一个例子(还有很多例子):音译。音译将一种语言的字母或声音映射到另一种语言的字母或声音。例如,音译使得用户能够键入拉丁字母(例如,a、b、c 等)。)来搜索俄语西里尔字符,或者键入日语 平假名来搜索片假名。

关键词搜索的相关性&排名算法

关键词搜索引擎使用这些语言处理技术来创造伟大的相关性排名——伟大的搜索解决方案的双重目标。

关联性

相关性确保找到所有匹配查询的记录:

相关性依赖于一种智能匹配,这种智能匹配考虑了打字错误容差、部分单词匹配、匹配单词之间的空间距离、匹配属性的数量、同义词和规则、停用词和复数等自然语言特征、地理位置以及人们对搜索的许多其他直观方面,尤其是在谷歌时代。

排名

排名将记录排序:

排序是你对搜索返回的记录进行排序的方式,这样最准确的结果会出现在最前面(在前几页),而不太准确的结果会出现在后面。

关键字搜索算法

为了实现最佳相关性和排名,工程师需要设计最佳算法和数据结构,以实现最佳文本比较。

对于相关性,有许多数据结构和搜索算法可供选择。然而,关键字搜索最好通过使用 倒排索引 和应用基于字符的比较来服务。这意味着搜索引擎预处理数据,以便每个字符(字母、数字和键盘上的大多数字符)引用一个或多个包含这些字符的记录。例如,当一个引擎将“aardvark”与一个搜索索引进行比较时,它将执行一个颠倒的查找,试图找到所有包含字母 a-aa-AAR-aard-aardv-aardva-aardvar-aardvark:的记录

inverted search index

这种倒排索引可以考虑到打字错误和其他关键字搜索技术。

找到记录后,引擎的最终任务是对结果进行排序,确保最匹配的出现在列表的顶部。同样,有不同的技术,例如,基于匹配单词频率的统计排名。我们选择的这个依赖于一个 平局决胜算法 ,通过应用自上而下的平局决胜,或 测试, 类似于淘汰赛的策略来对记录进行排名。

一个很好的例子就是看第一次和第二次测试: 错别字地理位置 。在美国查询“theater”将返回带有“theater”或“theater”的记录,其中英国的拼写被视为输入错误。由于平局决胜算法赋予了最佳匹配的特权,因此完全匹配(没有错别字=“theater”)的记录将被选为最佳匹配,而英国拼写将被发送到列表的底部。

接下来,最佳唱片(带“影院”)将接受 第二次测试 ,地理定位:位于用户附近的影院(类似坐标)将被选为最佳。然后,平局决胜算法继续应用接下来的六个测试(精确匹配先于部分匹配,两个单词查询中单词之间的距离等)。)直到所有记录都被排序。

自然语言处理

基于关键字的相关性和排序算法建立在自然语言处理(NLP)的基础上。自然语言处理语言的复杂性。例如,单复数术语,动词变化(现在时与过去时,现在分词,等等。)、粘合或复合语言等等。我们将在下面看到一些 NLP 技术,但是首先我们将定义两个 NLP 基础:标记化规范化

什么是标记化?

标记化将一个较大的文本分解成较小的片段。它可以将文档分解成段落,段落分解成句子,句子分解成“记号”标记化可能非常困难。例如,即使像识别段落中的句子这样简单的事情也很棘手。“迈克尔·J·福克斯”是两个独立的句子吗,因为它包含一个句点,后跟一个大写字母的单词?

什么是正常化?

在进行自然语言处理时,一个众所周知的低级步骤是归一化。这一步的目标是标准化每个查询,更多地依赖于字母而不是输入方式。因此,我们没有将大写的“michael”与小写的“michael”区别对待,而是将两者都规范化为“Michael”。我们对重音符号或特殊字符进行类似的规范化。

  • 我们找到一个字母的标准形式:à→A 和à→ss。
  • 我们找到了规范形的小写形式:à→A→A .

一旦解析(标记化和规范化),NLP 能做什么?

以下是一些标准 NLP 技术的简短列表。

  • 音译 :如上所述,音译允许您使用另一种语言的字母表来搜索一种语言的字符。这对于像俄语(拉丁语到西里尔语)、日语( 平假名到片假名)和中文(繁体到简体)这样的语言很有用。

  • 词干化 :词干化是通过去除前缀和后缀,将单词转化为其基本形式的过程。词干通过去掉词尾(“run”、“chang”),允许“run”和“running”匹配,或者“change”和“changing”。关键词搜索大多关注的是 名词 词干,比如词干“pupp”代表“小狗”和“小狗”。

  • 词汇化 :与词干化类似,词汇化将单词分解成它们的基础(或词根)形式,但这样做是通过考虑每个单词的上下文和形态学基础。例如,词汇化可以转换不规则的复数,如“foot”到“foot”,或者法语“il”到“yeux”。(注意,引擎将首先将“OS”规范化为“oe”)。

  • 分词 :在英语和许多基于拉丁语的语言中,空格是单词分隔符(或单词分隔符)的一个很好的近似,尽管由于每种语言如何组合和分隔单词部分的可变性,这个概念有局限性。比如很多英语复合名词都是不定写的(ice box = ice-box = icebox)。但是,空格并不是在所有书写的文字中都存在的,没有它,分词就成了一个难题。没有琐碎的分词过程的语言包括汉语和日语,其中句子而不是单词被定界;泰语和老挝语,其中短语和句子而不是单词被定界;和越南语,其中音节而不是单词被定界。

  • 粘合: 在一些语言中(德语、荷兰语、芬兰语等。)几个名词可以不加空格的连在一起构成新词。例如,Baumhaus 是一个由 Baum(树)和 haus(房子)组成的德语单词,Haus(房子)表示“树屋”。搜索“Baumhaus”(树屋)的人很可能对包含类似“Haus in einem Baum”(树上的房子)的结果感兴趣,而不仅仅是“Baumhaus”。一个更令人吃惊的挑战是冰岛语单词" valahei arvegavinnuverkf rageymsluskúraútidyralyklakippuhringur ",这是一个较小单词的组合,意思是" valahei I 高原上道路工人的储存工具棚的外门钥匙链的钥匙圈"。非常精确,可能对需要在瓦拉黑伊高原打开工具棚的道路工人有用。

  • 词性标注(POS-tagging) :也叫语法标注,词性标注是根据特定单词或一段文本的用法和上下文来确定其词性的过程。在“我能做一架纸飞机”中,它把“做”识别为动词,在“你拥有什么牌子的汽车?”中,它识别为名词。

进一步发展自然语言处理——语义

关键词搜索技术,加入了更多 AI 驱动的技术,包括 NL**(自然语言 理解 )和基于向量的语义搜索,可以把搜索带到一个新的高度。**

**这里只是几个例子

  • 总结新闻文章和博客文章
  • 检测网页的语言以提供翻译
  • 确定销售拜访记录中的关键话题
  • 对推文中表达的情绪进行分类
  • 服务客户服务请求的机器人
  • 为搜索请求提供正确的产品
  • 智能语音助手

以下是基于语义的自然语言处理技术的示例列表:

  • 实体提取 :实体提取对于语音搜索变得尤为重要。顾名思义,实体抽取是一种识别查询中不同元素的方法——人、地点、日期、频率、数量等。—帮助机器“理解”它包含的信息。实体提取是克服简单关键字搜索限制的一个非常好的解决方案。
  • 词义 :发现单词的多重含义,比如‘make the grade’(实现)中的动词‘make’与‘make a bet’(地点)不同。
  • 共指解析 :将两个词作为同一个实体对待(例如‘她’=‘玛丽’),或者在文本中识别一个隐喻或者一个习语(例如‘熊’不是动物而是一个大毛人)。
  • 情感分析 :试图从文本中提取主观品质——态度、情绪、讽刺、困惑、怀疑。

结论——自然语言处理减少了关键词的歧义

人类的语言充满了歧义,这使得很难编写能够准确确定文本或语音数据的预期含义的软件。同音异义词、谐音、讽刺、习语、隐喻、语法和用法异常、句子结构的变化——这些只是人类花费数年时间学习的人类语言的一些不规则性,但如果这些应用程序要有用,程序员必须教会自然语言驱动的应用程序从一开始就准确识别和理解。

为了解决语言最复杂的方面,自然语言处理已经随着时代而改变。这一变化的核心是人工智能,特别是向量和大型语言模型(LLM)等机器学习模型。在翻译和自然语言理解领域(NLU),机器学习极大地简化和改进了搜索过程。向量空间消除了手动创建同义词的需要。在本文中,我们重点讨论了关键字搜索的目的和方法,以及一些基本的 NLP 技术。NLP 继续发展,以增强关键字搜索的查询级功能——它仍将是处理我们日常执行的简单查询的首选方法。**

超越搜索栏:高级电子商务搜索体验

原文:https://www.algolia.com/blog/ecommerce/advanced-search-experience-for-e-commerce/

一种简单的、线性的搜索体验方法——客户在搜索框或搜索栏中寻找产品,然后要么加入购物车,要么退回——有两个缺点。首先,它对想要整体、个性化体验的现代用户来说是一种限制。其次,成本高。无法通过浏览、导航和高级界面等方式提供灵感的企业会错失转化和保留机会。

顶级零售商将搜索作为一种战略工具,用 Forrester 的话来说就是,“…一种不注重技术,而注重易用性、有效性和情感的设计思维方式。”这提高了关键绩效指标,如转换率、粘性、参与度和篮子大小。

我们将探讨创新的方式,通过这些方式,技术可以为您的用户带来创造性的搜索体验和发现,并为您带来更好的业务成果。

为什么要提前进行网站搜索:快速查看数字

互联网零售商 KPI&网站搜索调查的受访者询问了 103 家电子商务公司网站搜索如何影响他们的 KPI,他们表示越来越看到他们的网站搜索和他们的顶线和底线指标之间的联系。

我们已经知道网站搜索者转化的可能性比普通访问者高出 200%,但是看看这些统计数据:

Statistics about advanced search experiences

Forrester 最近题为“改造网站搜索以启动人工智能、聊天和个性化”的报告证实,“医疗保健、零售、金融服务和其他行业的数字业务领导者必须掌握网站搜索的市场力量和选项,否则会危及他们投资的预期投资回报率。”

这些只是 88%的大大小小的零售商告诉互联网零售商推进他们的搜索策略很重要的部分原因。让我们来看看如何着手。

掌握搜索的基本经验

观察搜索成熟度模型的进展,我们发现 36%的零售商已经超越了框中搜索的简单交易模型。

search maturity model

但是在使用高级功能之前,搜索技术必须首先满足一些基本要求。被谷歌“宠坏”的消费者首先期待的是一个提供最相关结果的超快速搜索栏。

用户开始依赖三个方面的相关性:

1。语篇关联性

产品名称、品牌、描述中的关键词——我们称之为属性——构成了文本相关性。文本相关性意味着正确地理解用户的意图,即使他们拼错了一个单词或使用了停用词(“the”、“and”、“at”、“with”…)。这也意味着给他们一个同义词结果(当他们输入“夹克”时提供一件皮大衣),并确保复数被考虑在内(搜索“暖脚器”应该显示暖脚器)。

2。业务相关性

当你想推广某种产品时,比如说最近发布的产品或假日销售,你可以使用业务相关性来影响用户看到的结果。您可以利用自己的业务指标,确保用户看到他们最有可能采取行动的内容。

例如,您可以跟踪产品的转化率,并希望首先显示转化率最高的结果。

3。个性化

个性化搜索体验就是从你的用户那里获取信号:他们通过与你的用户界面互动向你发送的有意识信号,以及来自他们过去偏好指示的更潜意识的潜在信号。

通过高级用户体验实现多种转化途径

了解了基础知识之后,让我们看看进步的零售商如何提供超越简单的顾客旅程:搜索栏>点击>添加到购物车。

提供多种内容类型作为搜索结果

Cratejoy 是一个电子商务网站,用户可以很容易地订阅他们喜欢的产品。

如果用户在 Cratejoy 的搜索框中键入“规划者”,他们可以立即选择订阅、类别、与规划者相关的集合——或者,如果都不起作用,就进入博客帖子。这为用户提供了进入不同类型内容的多种途径,根据用户的个人偏好和处理信息的方式,这些内容转化为多种转化途径。

Cratejoy advanced search experience for e-commerce

刻面:具有特殊智能的滤镜

普罗旺斯欧舒丹是一家国际身体、面部、香水和家居产品零售商。与 Cratejoy 类似,他们的搜索是一种随你输入的体验,但他们有另一个有趣的功能,展示了高级搜索的可能性。假设用户在搜索框中输入“宝贝”:在左边,将会出现小平面。

刻面到底是什么?我们都熟悉过滤器,它是缩小搜索结果选项的一种方式。方面是与结果集交织在一起的过滤器:只有与结果集匹配的方面才会出现。这防止了“没有结果”类型的屏幕体验,这几乎普遍导致用户反弹。查看我们的“宝贝”方面,我们已经知道每个类别中可用的项目数量,以及价格。

如果用户将其搜索查询细化为“婴儿洗澡”,我们会看到可供她使用的类别已经减少,只显示适用的方面。

这意味着用户只需点击几下键盘,就能找到他们想要的东西。相比之下,标准的搜索栏体验有一长串的条目,这要好得多。

从超越搜索栏到没有搜索栏

艺术买卖网站 Artsper 认为搜索不仅仅是搜索栏。搜索技术为整个浏览体验提供了动力。

如果客户在主页上选择了“绘画”类别,产品和方面就会显示出来——即使没有输入搜索查询。

Artsper 还包括推荐类别;例如,顾客可以很容易地沉浸在抽象画中,也可以很容易地去掉滤镜。

Artsper, an art website, offers discover without a search bar

这为什么这么有意思?不涉及用户的搜索栏查询,尽管幕后的搜索技术负责吸引人和自然的客户体验,包括排名和个性化推荐。

畅想电子商务搜索体验的可能性

最先进的搜索技术还有许多其他方面可以提升用户体验,改善你的业务数字:从推荐和动态分面到让用户定义界面。

在我们的电子书中了解更多:框外搜索:提高电子商务转化率的创新用户体验

我们希望能激发你加入顶级零售商的行列,通过搜索栏之外的搜索功能提升用户体验。您的用户应该通过浏览、互动、创新 UX 等方式享受强大的发现功能,缩短他们进入购物车的路径,同时推动您的业务成果。

阿尔戈利亚女性领导者给科技行业女性的建议:第二部分

原文:https://www.algolia.com/blog/algolia/advice-to-women-in-tech-from-algolias-female-leaders-part-2/

我们询问了女性领导者的职业道路,她们面临的挑战,她们将与其他女性分享的建议,以及是什么让 Algolia 成为一个伟大的工作场所。请务必查看本系列的第一部分

Lyline 是工程项目经理,致力于通过项目和流程提高 100 多名工程师团队的效率和协作。她从 2019 年 3 月开始和 Algolia 在一起。

作为一名工程领域的女性。我在多家公司做了 12 年的软件工程师。从学校开始,围绕女性、性或种族的笑话就已经司空见惯了。在我职业生涯的初期,身为女性感觉是一种优势。公司正试图纠正大男子主义的工作氛围。但是随着时间的推移,我发现很多行为太根深蒂固了。我意识到两件事:第一,在一个我可能对歧视有任何怀疑的公司里,我无法发挥我的全部潜力;第二,在困难时期有一位女性导师成了我职业生涯中的一个关键促成因素。

为什么是阿尔戈利亚?有了这么多的经验,我一直在寻找一种环境,在这种环境中,作为一个女人和母亲是被接受的,理想的是受到欢迎的。从面试过程到今天,团队都很棒。我没有观察到任何主观行为或判断。我的经理乐于接受我的想法,并给予我很多信任和自主权。我能够参与多元化计划。

她给追随她脚步的女性的一条建议。加入一家让你觉得做自己很舒服的公司。在犹豫的时候,找一个你信任的人,尽早分享你的担忧。

为什么在工程领域雇佣更多女性?女性越多,环境中的性别歧视就越少。有时我们看到招聘非常“本地化”:例如,这个团队需要这个确切的角色。我们忘记了多样性在思想和做事方式方面的更大影响。背离这些确切的要求会带来一系列的经验,这些经验会培养集体智慧,因此会给团队带来竞争优势。

你最喜欢的女性领导者是谁? Vero,我们的客户服务副总裁。我们分开两个星期才开始,我能从思维方式和价值观上理解她。我非常钦佩她的战略思维和她有效影响他人的方式。在税务局做一个女人很复杂;在用心领导的同时达到她的目标是鼓舞人心的。

维罗尼卡·里科贝尼

Veronique 是 Algolia 的客户成功副总裁。她于 2019 年 3 月加入公司。

**她在一家收入机构中晋升为副总裁。**我最初是一名运输物流软件开发人员。我对产品改进、开发以及最重要的是帮助客户的兴趣,引导我经历了项目管理、技术支持和技术客户管理等各种角色。我在 Salesforce 发现了客户的成功,从此一往无前。然而,所有这些职业“转移”都促成了我在客户成功方面的成就。

在阿尔戈利亚差异上。在我的职业生涯中,有几次我被告知我太强调了,我应该简单地以军事风格发布命令。这不是我的领导风格。在阿尔戈利亚,人性来自上层。你可以向任何人提问,任何人都可以——也愿意——向你提问。我的个人和人生使命是向他人传递知识,而阿尔戈利亚是实现这一目标的最佳环境。与每个人,尤其是在现场的人如此密切地合作,是一个不可思议的礼物,不仅仅是从人类的角度来看,而是因为它使我能够调整策略和快速行动。

如果你想在事业上有所发展,不要做什么。这是一个经典的错误,但仍然值得一提:不要因为你的成就和资历有多明显而等待升职。永远做你职业讨论的主人。如果你向你的经理展示你能领导你的职业生涯,你就展示了你能领导战略。相信你的直觉:如果那份工作在召唤你,那就去做吧。坚持不懈,不管你的正式资格。

**论女性领导。**作为女性,我们经常要比男性同事表现得更好才能得到那个角色,但我们也非常有韧性、坚强和能干。一旦进入领导层,我们往往更擅长主动倾听和沟通,这一点至关重要。我们知道如何直截了当、直接而清晰地表达,但也知道如何确保我们的团队理解我们的使命以及我们的发展方向。

扎维亚卢

Zaviear 是 Algolia 多元化和包容性项目的负责人,也是一名高级招聘经理。她从 2018 年开始和 Algolia 在一起。

她对在科技行业发展的女性的建议。不要害怕申请:职位、头衔和公司声誉可能会令人生畏,但没必要担心没有合适的经历。研究表明,女性只有在觉得自己符合 100%的条件时才会申请某个职位,而男性只有在觉得自己符合 60%的条件时才会申请。直接接触招聘人员,表现出对潜在领域的兴趣,你会惊讶地发现有多少机会向你敞开。

**关于代表性不足群体的障碍,包括技术领域的妇女。**绩效偏见,无论是有意识的还是无意识的,对于妇女和其他代表性不足的群体来说都是一个重大问题。尽管这可能很难,但当你或你的工作没有得到认可时,要进行坦诚的对话和表达。如果公司的环境不开放,不能接受它,那么它可能不适合你。

她看到女性不断犯的职业错误。接受错误的职务级别。我们可能会有这样一种心态,对被雇佣心存感激会导致我们在谈判合适的职位和薪酬时低估自己的经历。了解你所具备的技能、你想要的影响力,并为你计划如何在新公司实现这些创造一个好的故事,这远比满足确切的工作要点重要得多。

她如何在阿尔戈利亚开车。我们的计划始于 2018 年 4 月,旨在建立更具战略性和目的性的多元化团队,并确保我们的文化具有包容性。早期,我们投资将多元化&融入到团队建设和评估流程中。我使用的框架是:吸引、雇佣、参与、保留,然后跨职能部门工作,在候选人和员工体验中建立平等、公平和归属感。工作范围从设计一个具有明确核心能力的公平结构化面试流程,到与代表性不足的人才社区建立联系,以便他们了解机会,到创建员工资源小组,以及营造一个人们愿意来并能够茁壮成长的环境。有意的策略带来了进步:我们已经看到,在一年半的时间里,工程领域的性别多样性增长了 8 倍,收入增长了近 2 倍。

**论女性领导的独特品质。**我不相信也不鼓励一概而论,但不管是出于选择还是偶然,身为女性的复杂性意味着我们经常在职业和个人生活中扮演许多角色——这意味着我们不断适应不同的角色。因此,我们有能力从不同的角度看待问题和挑战。以及划分、后退一步、整体看待事物、更广泛地思考每个决定的影响的能力。研究表明,女性更擅长在不同任务之间转换,这种能力在快节奏的组织中可能是一种优势。所有这些品质造就了出色的领导者。

如果你喜欢你所读的,请考虑加入我们。 Algolia 正在招聘担任我们全球团队的各种角色。

意图智能:人工智能和意图数据的完美融合

原文:https://www.algolia.com/blog/ai/ai-and-intent-data-how-do-they-contribute-to-full-blown-intent-intelligence/

什么是意图情报?

能意图连 都拥有 的智力吗?是的,在人工智能的勇敢的新数据科学生态系统中,这两个词确实在一起工作。如果你认为意图情报可能是关于人们在网上购物过程中意图的信息,那你就对了。

Intent intelligence 是从网站或应用程序用户(例如电子商务购物者)的活动中收集的数据中筛选出的高质量知识,分析技术不断从他们的行为中学习,并评估他们是否拥有可行的 买家意图

因此,意图智能不仅仅是一个关键的现实世界的东西,它还可以是一个非常有价值的工具,用于从创建正确的销售智能到避免棘手问题以创造出色的客户体验的用例,无论是 B2B 销售还是消费者交易。

AI 和意向数据

收集的意图情报质量受到人工智能和 意图数据 的双重影响。人工智能和意向数据都用于计算买家的购买意向和分析买家的需求,但它们的方式略有不同。

人工智能的贡献

人工智能——模拟人类智能的机器——继续在寻求改善用户体验和利润的公司中投入实践并获得牵引力。

当然,没有人确切地知道多种形式的人工智能最终会走向何方,这是一个永远令人不安的想法。

不过,现在让我们关注人工智能对客户数据的影响,因为它与在线零售有关。它可以特别有助于识别购物者的购买意图,然后促使适当的营销团队或销售团队提供支持,例如通过弹出数据驱动的屏幕聊天机器人来“讨论”用户的感知需求。

人工智能无处不在:它可以同时在许多数字领域进行挖掘,收集众多消费者和 B2B 指纹。人工智能工具也很出色,因为它们根据竞争性定价和季节变化等因素不断改进和适应它们所知道的东西。

在企业界,我们的人工智能进展如何?据科技未来学家 伯纳德·马尔 称,2023 年,人工智能将“在组织中成为现实。无代码人工智能凭借其简单的拖放界面,将使任何企业都能利用其力量创造出更智能的产品和服务。”

他指出,一些公司已经在基于人工智能的算法的帮助下进行产品推荐。一个例子是网上服装零售商 缝补

除了其他方面,马尔预测人工智能将:

  • 通过无接触、自主购物和送货,让支付和接收商品和服务变得更加简单
  • 影响各种工作,因为零售商在库存管理流程(管理和自动化)中更经常使用 it

换句话说,AI 正在提升,准备开始爆破起飞。

机器学习:人工智能的核心要素

麻省理工斯隆 学院 的作家萨拉·布朗将机器学习定义为“人工智能的一个子领域,它赋予计算机在没有明确编程的情况下进行学习的能力”,并随着它们处理更多数据的新学习机会而逐渐变得更好。

“当今天的公司部署人工智能程序时,他们最有可能使用机器学习——以至于这些术语经常互换使用,有时甚至模糊不清,”她解释道。

机器学习模型 对算法进行操作;他们不能理解单词,所以为了让内容“说出他们的语言”,单词被转换成数学等价物( 向量 )。这种增强的机器理解水平通常在自然语言处理(NLP)技术的帮助下实现。单词之间的关系被保留,因此,例如,两个相关的单词被视为比两个不相关的单词更密切相关。

持续学习的好处同 机器学习

收集数据的过程显然不是静态的,因为数据是不断变化的。当新信息变得可用时,基于人工智能的软件很容易将其添加到现有数据中,然后从组合的信息中得出准确的结论。

因此,机器学习还包含一个额外的关键维度:持续学习(CL)。这个术语是不言自明的,也可以与类似的连续学习、增量学习、终身学习、连续终身学习和在线机器学习互换使用。

连续机器学习模型不会只是四处搜寻它们找到的初始数据。留给“他们自己的设备”,他们继续收集和微调他们以前学到的知识,以提高他们宝贵的数据宝库的功效。

然后,就像人类在正式学习、职业发展或个人发展方面可能做的那样——随着学习新技能、获得新能力和更全面地理解某些东西而产生的信心——这些基本上无监督的数字生物(未标记的数据集由机器学习算法进行分析和聚类)可以开始调整他们的“思维”,以融入新知识。

随着不断的学习活动,他们可以开始更新他们的整体预测模型。一个过程,随着时间的推移,就像人类在教育过程中记录基准的持续学习轨迹一样——对人类来说,这可能包括参加培训计划、参加专业发展研讨会、参加点播在线课程、观看网络研讨会和收听播客、进行自我指导学习以及获得认证——使他们变得更加智能(也就是说,作为预测模型是准确的)。

结果是:如果没有促进机器智能的持续在线学习体验的额外维度,人工智能将不会有如此权威地做出预测的适应性。

什么是意图数据?

现在让我们深入研究意向数据。这就是你希望从机器学习工具等人工智能过程的应用中获得的东西:关于潜在买家的足够多的准确信息,表明他们接下来可能会做什么。说明并阐明人们深层意图的细节。那是意向数据。

意向数据通常围绕特定主题、产品和服务。它专注于与主题相关的(积极或消极)情绪,为公司提供了比传统档案或行为数据更全面的视图。

借助由人工智能和先进算法支持的软件,在线零售商可以解读用户在寻找什么,以及他们是否可能购买。这之所以成为可能,是因为 97%的消费者都在尽职调查——他们在做出购买决定之前会在网上搜索产品和服务,这样他们就不太可能后悔购买。

意向数据和搜索

用户搜索是一个可以证明意向数据是营销计划金矿的领域。无论是搜索引擎优化,转化率优化(CRO),还是其他学科,意图数据提供了超级具体的见解,而不会显得死板。每个用户的在线探索无形中提供了必要的意图数据,零售商只需收集、解释并最大限度地利用这些数据。

能够评估客户意向数据可以极大地帮助营销人员和决策者识别潜在的潜在客户,并确定他们何时准备购买。不仅如此,它还可以为他们指明方向,例如,自信地创建正确的广告目标文案,个性化,以有效地接触潜在客户和合格的线索。它可以提高销售线索评分,帮助销售人员。

意图数据是如何收集的

借助于 自然语言处理 (NLP)和 语义搜索 等工具,可以为每个购物者的购买旅程积累买家意向数据。使用 IP 地址和浏览器 cookies 等标识符,加上对关键词和内容的点击,在人们四处点击时收集意图数据。

因此,如果某人的购物内容消费过程包括阅读在线评论、细读博客文章、点击其他内容的链接、观看视频、获取门控材料以及比较产品,那么所有这些数据点都会被适当地记录下来,以评估意图。

不同类型的意向数据

作为参考,有三种类型的意向数据:第一方、第二方和第三方。

  • 第一方 意向数据是指公司从自己的网站收集的意向信号:来自与网站访问者、潜在买家和现有客户互动的信息,包括从电子邮件营销活动和社交媒体投放中收集的信息。
  • 第二方 意向数据是 另一方组织的第一方收集的数据, 如来自社交媒体的简介。与第一方数据一样,这些信息可能包括来自网站、应用程序和社交媒体的客户参与花絮。搜索引擎是第二方意图数据收集器的一种类型。
  • 第三方 意向数据取自另一个站点。谁收集第三方意向数据?通常是专门收集信息的公司。这些意向数据提供者通常可以提供一系列的研究和购物接触点,由用户在访问你的网站之前着手。

买家意向数据与预测分析

很容易混淆买家意向数据和预测分析的概念。这很常见,因为预测分析和买家意图数据都被用来帮助公司确定买家的购买意图和需求。不过,他们做这件事的方式略有不同。

预测分析(或预测意图)利用大数据对谁将在何时购买哪些商品进行算法计算预测。信息是从各种数据源收集的,如客户资料和销售,结合了数据挖掘、数据建模、机器学习模型、历史信息和人工智能。它基于历史数据,而不是最新的浏览或购物活动,它依赖于人类的专业知识,这显然是非常有限的,以最佳方式到达目标受众。

相比之下,买家意向数据是通过跟踪和记录实际购物者的网上旅程而产生的。因为它更能反映实际发生的情况,所以您可以使用意图数据来更好地帮助营销人员和销售代表使用相关内容来识别潜在客户,以产生潜在客户,并确定他们何时准备购买。

总而言之,收集买家意向数据不那么复杂(需要更少的整合),而且它能立即为公司提供具体的实时洞察。

使用买家意图数据的主要优势是人工智能组件机器学习,它可以参考数量惊人的当前数据点,从而实现比预测模型更大的成就,实时评估个人的购买意图。来自训练有素的模型的准确应用的意图数据可以告诉营销人员单个购物者正在做什么,使他们能够评估购买信号,以快速判断一个潜在客户是否值得追求。当谈到在竞争中领先时,这种“内部消息”可能是不可战胜的。

AI 如何和买家意向数据 一起 产生全面的意向智能?

就有效利用人工智能和意图数据这两个工具而言,如今大多数公司在哪里?

许多人已经接受了人工智能,并享受由此带来的问题解决和更光明的前景。例如,超过一半的高管( 54% )表示,他们已经通过实施人工智能解决方案提高了公司的生产力。

至于买家意向数据,估计有 76%的 B2B 公司 目前正在使用它来指导他们的营销和销售策略。

这是一个很好的开始。问题是,有多少想要获得竞争优势的在线零售商同时使用这些工具,以协调的方式,创建高度准确的意图情报,并为他们的底线获得最佳结果?

关键是两者都要用。这两种工具一起使用可以:

  • 清楚地了解公司的顾客想要什么;减少猜测,增加信心
  • 基于从持续学习算法中收集的准确数据 ,让营销人员和销售人员自信地执行制胜策略
  • 增强公司的未来前景 当购物者透露他们正在进行的模式时:根据特定的活动创建目标群体,然后以更个性化的方式进行推广

创建智能搜索

当你获得了正确的用户意图情报时,前途无量。

你可以使用它的一种方式:为你的网站或应用程序用户创建有效的智能搜索。

正确分析用户 搜索意图 当他们输入搜索查询时揭示某人想要什么;它提供了非常具体的见解,而不是死缠烂打。智能搜索是指搜索引擎能够根据用户在搜索框中输入的内容理解用户意图,并使用机器学习算法对搜索结果进行最优排序。

像其他计算机科学相关领域一样,智能搜索结合了包括 NLP 和机器学习在内的技术。例如,它可以在语义术语之间建立联系,这是传统搜索引擎(只查看关键字的搜索引擎)无法识别的。搜索者表明自己的意图,公司所要做的就是注意到它, 识别它 ,并正确解读它。当谈到客户保持和收入,这可能是一个巨大的游戏改变者。

想要搜索意图的情报你能指望吗?

通过 Algolia,你可以利用人工智能和意图数据驱动的搜索的优势。我们是业内最智能的搜索平台,由运行在万亿次搜索上的自学式 AI 构建。

我们利用机器学习(和基于用户行为的强化学习)对结果进行动态重新排序和个性化,检测数据趋势、同义词和类别,并提供建议。很快,我们将提供基于向量的语义搜索,能够理解概念和更长的查询。

例如,我们的技术不断地学习用户如何重写他们的查询,以便建议同义词,这样下次他们搜索时,就可以花更少的时间。我们的客户和合作伙伴利用我们基于人工智能的搜索意图预测模型来显著提高他们的点击率(CTR),有时是惊人的百分比。

我们随时准备通过智能搜索和切实可行的见解来帮助您转变客户成功战略! 联系我们 开始挖掘AI 的力量和意图数据 今天。

人工智能推荐媒体、书籍、博客

原文:https://www.algolia.com/blog/ai/ai-powered-recommendations-for-media-books-blogs-articles-publications/

你在博客上浏览文章以供阅读。这个博客展示了一系列诱人的建议来帮助你选择。你的选择让人感觉不可预测,并且受你当前情绪等因素的影响——它会随着你阅读的每篇新文章而变化。机器推荐最佳文章的几率有多大?有多少过去的历史(你的和其他人的总和)可以教会机器如何根据口味预测未来的主观选择?机器如何预测或参与自发性?

关于推荐一部电影看或一个播客听,我们可以问同样的问题。

为了帮助我们回答这些问题,我们的一名 ML/AI 工程师 使用我们的推荐 API 开发了一款应用,为技术博客的读者推荐下一篇文章。场景是这样的:当一名工程师读完一篇文章时,推荐系统会显示与下一篇文章最相关的文章。该应用程序从 ML 模型生成的相关文章数据集中提取推荐,这些模型是由 Algolia 根据博客所有读者之前的集体活动建立的。

这里的目标是提出问题并提供一个回答问题的框架。这也是关于实施和评估我们的建议的简单性。虽然我们经常谈论电子商务的建议,但我们的 API 可以处理任何用例。如下所述,重要的部分是捕捉正确的信号,并对每个信号的相关性进行“评分”,以确定两篇或多篇文章之间的关系强度。

结合我们的建议和点击&转换洞察 API s,我们能够深入回答如下问题:

  • 这些建议“准确”吗?“相关”?
  • 好奇心——对于好奇的读者来说,它们是否足够令人惊讶,值得点击?是每个读者都对他们的下一个选择保持开放和好奇,还是他们只专注于寻找特定的东西?
  • 见解深刻——这些建议是否过于明显?它们是多样的还是多余的?
  • 机缘巧合——一台天真的机器能否创造出机缘巧合的时刻,让系统推荐读者从未想过的伟大的未知事物?
  • 随机——这些推荐是奇怪的、平庸的、随机的、无用的吗?

虽然实验没有回答所有这些问题,也没有成功地创建一个可以预见未来的应用程序,但我们确实相信,在概念和具体的层面上,人们可以建立一个基于内容/媒体的网站】,为其读者提供相关的有用的推荐

建筑人工智能推荐阅读

推荐书籍很棘手。这需要非常直觉和熟练的书商或图书管理员。通常,他们会先问几个关于 意图 的问题——你想找什么类型的书或作者?你要找的是小说还是非小说?什么科目?然后他们转移到 喜好——口味、风格、时代、流派的问题。最好的顾问在咨询他们内在的经验和知识“数据库”时会仔细倾听。他们对读者有一种感觉,并且知道他们是如何设计他们的问题的。有了这些,个人顾问就可以推荐“正确的”或“最好的”书籍了。他们的推荐会很完美吗?经常,是的。或者至少是鼓舞人心的,有见地的。你永远无法取代人情味…或者你能吗?

一个推荐系统如何与这种个人感动竞争?例如,一个人刚读完 莫比迪克 又想读别的。下一本书是什么?

  • 十九世纪捕鲸业的历史
  • 更多 19 世纪的小说
  • 其他书籍作者赫尔曼·梅尔维尔 莫比·迪克
  • 荷马史诗少年派的一生 (其他海上冒险)
  • 关于更小的鱼,像 河流穿过它
  • 另一种类型的冒险(哈利·波特系列)
  • 旅游书籍—远航公海
  • 或者一些完全不同的有趣的事情,来摆脱莫比·迪克的沉重负担

谁知道呢?可能性太多了。推荐任何东西似乎都是随机的或瞎猜的。有时甚至读者都不知道…然而,这就是有趣的地方:

在推荐书籍时,书商和一个好的推荐系统并不仅仅关注 暗示 书籍,他们希望 启发我们 做出我们自己关于下一本书的最佳选择。

挑战说的够多了。现在,我们如何面对这些挑战?

推荐系统如何计算最佳推荐

让我们从比较三个不同的用例开始:

  1. 定义明确的读者群:在线图书馆研究平台上的学生
  2. 一个更大但相当同质的读者群:技术博客的读者
  3. 更大的异质读者群:通用博客的读者

我们研究了每种情况,但只试验了第二种。我们将利用第一个和最后一个为第三个——技术博客——打下基础。每个场景都给了推荐系统或多或少的上下文。所以我们会看到背景在避免随机性方面有多重要。但是首先,让我们看看可以用来帮助建立模型的 启发式评分

基于用户阅读模式的启发式图书评分

为了取代读者和书商之间的口头聊天,在线系统必须利用能够传达意图和偏好的用户信号。这是通过 点击 (用户在阅读之前、期间和之后点击的内容)和 转换 (用户阅读的内容或阅读的时长)来完成的。例如,如果许多用户在同一个阅读会话中阅读文章 X 和 Y,我们可以得出两个结论:

  • 这些读者有强烈的意图将这两篇文章 合在一起
  • 因此,文章 X 和 Y 在某种程度上是相关的。

另一个例子是当用户点击文章内部的链接,阅读链接的文章,然后返回继续阅读第一篇文章。这种行为表明这些文章是相关的。

这些关于意图的结论是启发性的。让我们更进一步,让我们给某些行为更多的权重:如果我们认为多次点击 内的链接相同的 文章,每次点击的阅读时间长,表明读者强烈倾向于认为所有这些文章都是相关的,那么我们可以有信心给这组行为 更多的权重 这是另一种启发式方法——看看哪些行为表现出强烈或微弱的意图,并相应地对它们进行衡量或评分。

这就是你如何使用我们的 Algolia 推荐的 产品。Algolia 客户在向我们推荐的产品发送点击量和转化率之前,可以考虑几个因素。例如,他们可以通过不发送信号,或者根据信号的强度发送一次或两次来增加或减少信号的强度。

然而,试探法的一个危险是,如果关于信号的潜在假设是错误的,那么将一个已经不正确的解释的分数加倍就会使错误加倍。这是一场赌博。

上下文在识别意图时起作用

让我们回到上面的两个上下文:

  1. 教育背景(学生图书馆)
  2. 随机公开(一个通用博客)

场景 1–为学生创建推荐

学生们提供了一个定义清晰、界限分明的世界,为推荐系统提供了一个良好的开端。学生的选择范围很窄。他们的意图很明确,并且和其他读者有着相似的目标:了解某个特定的主题。

图书馆的在线目录可以自信地显示“推荐的下一本书”和“不太可能有帮助的书”。他们可以通过在每篇文章的文本中嵌入大量相关文章的超链接来使其特别准确。(注意,这些超链接可以使用推荐系统本身随着时间的推移而被刷新。)

点击&转换-要采集的信号和事件

我们将收集他们点击的链接和阅读次数,以记录他们实际阅读的内容。为了收集数据,我们称之为“发送事件”。如上所述,有两个事件要发送:点击和转换。点击和转换事件都在两本或更多本书之间建立“相关书”关系。转换也在两本或更多的书之间建立了一种“经常一起阅读”的关系。

出于我们的目的,我们对点击和转化做出以下假设和解释:

  • 我们假设一个学生的相关书籍的集合可能与参加同一项目的其他学生的相关书籍的集合相似。
  • 学生阅读的每篇 下一篇博客 无论是从一个链接,还是在搜索或浏览之后,都可能反映出与当前文章的合理相关性。所以我们发送一个点击事件。
  • 为了确保下一本书是相关的,我们将 阅读时间 添加到等式中,并通过添加额外的 权重 来帮助 Algolia 的建模,以加强关系。我们通过过滤掉一些事件或加倍分数来进行加权:
    • 如果用户点击但没有阅读点击的文章,我们会放弃点击——也就是说,我们不会发送任何点击事件
    • 如果他们阅读了链接的文章,但时间不长,我们会发送一个点击,但不会发送一个转化事件
    • 如果他们阅读了被点击文章的大部分或全部内容,我们会发送点击和转换事件
    • 如果他们已经阅读了一篇文章的大部分或全部,然后回到原文并继续阅读,我们会再次发送点击和转换事件

这些只是说明区别对待每个事件的重要性的建议。我们可以使用其他信号。Medium 允许评论,不仅在整个博客上,而且在文本的选定部分。如果用户突出显示一个句子“喜欢它”或“评论它”,我们可以在阅读会话期间发送所有评论文章的点击事件,以加强这些文章之间的关系。假设在一个单独的会话中,一个学生正在阅读一个主题,因此所有的文章都将与该主题相关。

最后一个变化是推荐一篇文章或一本书的部分内容。我们可以把书籍分解成 相关段落 。这为下一次阅读提供了特别有用的细节。我们可以推荐“相关段落阅读”。

现在你可能同意或不同意这些例子,但关键是,你需要用你认为最能抓住用户阅读图书馆目录中的文章的意图的动作来建立模型。我们试图通过识别一心一意的学生选择连续阅读的内容来避免随机性。

场景 2——公众博客推荐

为学生推荐一个教育学阅读之旅包含了很多内在的可靠性。学生们分享学习特定科目的背景和目标。但是,面对一群兴趣广泛,但在阅读选择上没有明显亲和力的读者,我们该怎么办呢?虽然我们仍然可以依靠点击超链接,但我们需要意识到下一篇文章可能与点击的链接无关。因此,还有一个额外的因素可以帮助我们构建模型:

  • 博客的 分类

如果每个博客都被准确分类,那么这些类别可以如下使用:

  • 如果一本书被点击,并且在同一组类别中,那么在将它添加到模型中时,就可以得到那么高的分数
  • 无论何时将任何书籍添加到模型中,算法本身都会使用类别作为一种方式来构建其相关项目推荐。

场景 3——技术博客的读者

如上所述,在技术博客这样的单主题博客上推荐文章应该“更容易”,因为读者对技术有着共同的兴趣。虽然这种凝聚力不像学生博客那样强大,推荐系统获得了更紧密共享意图的额外好处(相同的课程材料,相同的测试),但技术博客确实内置了一些类似的意图和偏好。

以下是一些挑战

  • 会有很多 javascript 工程师想要提升自己的前端,所以就有了 一些 类似的意图和喜好,但并不完全——UI 的题材相当广泛。
  • 有些后端工程师对 UI 一点也不感兴趣,但是他们可能会阅读相同的文章来帮助理解如何使用前端系统。
  • 虽然所有工程师可能都想了解微服务的理论和实现,但前端工程师可能只想知道如何在他们的 UI 中使用它们。
  • 一个额外的挑战是 简档不平衡 ,例如,你有 80%的 JS 开发人员/ 20%的后端专家,所以对 80%的用户有效的推荐对于后一组可能仍然是 错误的 。解决方案?您需要基于每个细分市场得分较高的配置文件的配置文件细分推荐。

这些挑战表明,即使是对同一活动领域但具有不同意图和特征的读者,推荐书籍也可能并不容易。但这不是不可能的,你会看到的。我们的人工智能工程师构建的实验性应用程序调查了我们在这个时间点上可以取得的成功程度。

实验:推荐书籍“常一起读”

在我们经常一起阅读的场景中,我们可以考虑:

*** 将每个用户的阅读列表转换为单个多项内容

  • 同一天的阅读作为多篇文章的单个转换,而超过 4 天的每天一篇文章将被视为 4 个单独的单个项目的转换。

我们将使用以下信号:

  • 用户在短时间内(在明确定义的会话中)阅读了什么内容

未考虑的因素:

  • 用户在阅读给定文章时点击并阅读的文章内的链接
  • 用户已经阅读的文章的类别。我们不会给予更多或更少的权重,也不会添加一个信号事件,只是因为 2 篇或更多的文章属于同一类别。我们不这样做,不是因为这无关紧要,而是因为我们想专注于如何最好地将用户的意图与博客的内容相匹配。
  • 一个用户的 自己的 阅读列表,正如没有理由相信一个用户想要阅读的内容一定是彼此相关的。
  • 然而,请注意,当这些因素放在一起时,会创建一个相关项目的强指标;然而,我们在这里的目标是推荐“经常一起阅读”的文章,而不是“相关文章”。显然,相关项目是任何推荐系统的基础,但我们现在想限制这些因素。
  • 我们没有考虑每次阅读来自哪里(链接,搜索,..).例如,我们完全不知道链接结构。另一个实验将需要测试链接点击对于提供有用建议的重要性——即使从表面上看,它似乎很重要。

实验结果

注意,完整的结果、技术细节和代码将在我们的下一篇文章中给出。

下面的百分比是置信分数:当展示给 Y 时,与 X 互动的人将成功地与 Y 互动的模型的确定程度。您可以在您的用户界面中通过将它标记为“匹配分数”、“相关性分数”或“可能性”(用户参与内容的可能性)来帮助用户理解这一点。

| 如果你读到…… |
|

  • 添加 AI 到你的搜索框 :我们推荐 添加微信到你的搜索(99.63%)、 如何用规则推广(98.54%)、

|
|

  • 添加微信到你的搜索 :我们推荐 添加 AI 到你的搜索框(99.63%), 更高 ROI 带个性化刻面(99.11)

|
|

  • 添加搜索推荐 :我们推荐 缩放你的搜索引擎(99.72%), 挖掘你的代码(99.13%),

|
|

  • CSS for a Cool 前端 :推荐 调试搜索(95.79%), 挖掘你的代码(95.06

|
|

  • 调试搜索 :我们推荐 挖掘你的代码(99.83%), 缩放你的搜索引擎(99.28

|
|

  • 挖掘你的代码 :推荐 调试搜索(99.83%), 缩放你的搜索引擎(99.39%), 添加搜索推荐 ()

|
|

  • 更高的 ROI 搭配个性化的刻面 :我们推荐 开箱推荐用例(99.18%)、 添加微信到您的搜索(99.11【T56 %)、

|
|

  • 如何用规则推广 :我们推荐 添加 AI 到你的搜索框(98.54%), 添加微信到你的搜索(98.02【T90)

|
|

  • 介绍推荐 :我们推荐 开箱推荐用例(98.12%), 更高的 ROI 搭配个性化的刻面(97.76

|
|

  • 开箱推荐用例 :我们推荐 具有个性化刻面的更高 ROI(99.18%), 挖掘您的代码(99.07)

|
|

  • 缩放您的搜索引擎 :我们推荐 添加搜索推荐(99.72%), 挖掘您的代码(99.39

|

结论——评估建议

最终,我们如何知道自己是对的?我们如何评估我们建议的质量?这让我们进入了任何推荐系统的评估阶段。我们将很快公布如何评估推荐系统的完整论述。

但是你可以通过心理评估这些数字来了解成功的概念

  • 这些建议是多种多样的,还是你得到了循环的建议,其中项目 A 的建议项目对 B、C 和 D 有相同的整体建议组?(比如 A - >读作【B,C,D】;B - >读作【丙,丁,甲】;C - >读作【B,D,A】;D - >改为【A,B,C】)
  • 分数是多种多样的,还是你总是得到大约 99%的推荐,这将暗示一些 过拟合 ,系统实际上停止学习,将样本数据的结论应用于所有新书。

通过问自己类似这样的问题,你已经可以对你的推荐质量有一个很好的预感。

还有另一种方法:小步前进,观察用户对你的建议的反应。看看读者是否点击阅读你的推荐。还可以进行 AB 测试或者 live 用户测试,或者度量转换,或者看看被点击的是 不是 什么书。像这样的小步骤可以走很长的路。实验、实际分析和评估是任何推荐系统成功的关键。快乐阅读!**

人工智能为用户测试和用户界面设计提供的建议

原文:https://www.algolia.com/blog/engineering/ai-powered-recommendations-for-user-testing-and-ui-design/

我们继续关于在后台使用人工智能推荐的系列报道。当我们建立 Algolia 推荐时,我们最初的目标是为电子商务客户推荐产品。但是我们推荐的 API 涵盖了许多其他用例。 这篇文章是关于如何改进你的在线和后台表单的设计,就像在一个典型的网站或 Salesforce UI 上看到的那样。

填写繁琐复杂的在线表格

对于客户和员工来说,填写电子表格需要耐心和专注。在最糟糕的情况下,它还需要大量的点击和屏幕变化,以及想象力的飞跃,才能找到适当的行动。

员工是错综复杂的电子表格的主要受害者。他们每天都要与表单进行交互,不同公司、不同系统、不同职业、不同任务的用户界面(UI)也各不相同。如果员工幸运的话,他们有开发人员和设计人员来创建 UI,但是众多的需求和系统约束阻碍了良好的设计。常用的解救方法是 用户测试——但是这既费钱又费时,而且用户的行为并不总是容易解释的。

AI 驱动推荐如何改进电子表单 UI 设计

在这篇文章中,我们设想 Algolia 推荐自动化用户测试和 UI 设计过程。它可以捕捉动作的组合,并围绕这些组合建立模型。当这些模型定期输入员工打字和按钮点击(作为分析数据捕获)时,可以非常快速地生成如下推荐:

  • 在同一屏幕上放置哪些字段
  • 哪些字段应该相邻
  • 在一个屏幕上问多少个问题
  • 如何减少给定任务的屏幕和动作数量
  • 是使用引导式导航(向导)还是允许自由进入

两个 API 调用

在本系列的前一篇文章中,我们讨论了推荐如何依赖于两个 API:

  1. 我们的Insights API发送事件并捕获用户活动和分析,如点击和转化。当发送了足够多的事件后,Algolia Recommend 就可以构建模型来执行第二步。
  2. 我们的推荐 API 了解最频繁的组合。推荐可以帮助您发现用户在使用任何用户界面(尤其是表单)时采取的操作组合。

注意推荐可以找到比频繁组合更多的组合。同样强大的是相关条目字段的概念。结合相关的领域打开了用户设计的新的可能性,这在本文中没有讨论。

使用建议重新排列并减少字段数量

大意

首先,需要将 字段中的 用户倾向一起修改。然后,Algolia 对这些数据进行建模。该模型允许推荐引擎将 常用字段与 一起编译成一个完整的列表。有了这份报告,您的设计人员可以开始在单个屏幕上重新排列或删除字段,或者重新思考字段在工作流和系统中的分布方式。

例如,航空公司已经知道如何只问三个问题就开始预订:机场、日期和乘客数量。不幸的是,大多数公司不知道该问哪三个问题,所以他们在屏幕上散布了 10 个问题,希望用户自己找出合适的领域。只有 10 个字段的内部网应用程序很少见——大概有 15 到 30 个。

让我们看看推荐是如何简化表单交互性的。

代码发送用户活动和系统事件

发送一个洞察事件,告知推荐引擎文本字段 1、3 和 8 被一起修改:

convertedObjectIDs(
  'on_save_form',
  'ui_forms_index',
  ["field1_id", "field3_id", "field8_id"]
);

获取推荐

返回与屏幕 1 上的字段 1 相关的字段:

$recommendations = $recommendClient->getFrequentlyBoughtTogether([
  [
    'indexName' => 'ui_forms_index',
    'objectID' => 'field1_id',
  ],
]);

这里要注意两件事:

  1. 虽然 API 方法的名称经常是一起购买,但是“购买”一词可以被认为是在任何给定事件 期间捕获两个或更多 objectIDs 的任何动作。我们在这里定义的事件是“on_save_form”。然而,如下所示,我们可以使用“在用户会话期间”。
    ** 这个特殊的代码是关于只跟踪一个屏幕。接下来,我们将把它扩展到多个屏幕。*

*### 从这些推荐中你能学到什么

您可以从这个用例中生成一个报告:

| 目标字段 | 经常一起编辑 |
| 字段 1 | 字段 3、8、11 |
| 字段 2 | 字段 3、9、20 |
| 场 X | 字段 a、b、c、.. |

通过一点旋转和交叉引用,你可以发现暗示字段不同位置的模式。也许您会将频繁的字段配对放在彼此相邻的位置。

改善字段在 多个 屏幕上的分布使用建议

继续前面的例子,让我们添加几个屏幕。您需要更改数据以反映不止一个屏幕的更大上下文。为此,你只需要做一个改变:

  • 添加该字段的屏幕信息

代码发送用户活动和系统事件

convertedObjectIDs(
  'on_save_form',
  'ui_forms_index',
  ["screen1.field1_id", "screen2.field1_id", "screen2.field2_id"]
);

获取推荐

返回与屏幕 1 上的字段 1 相关的字段:

$recommendations = $recommendClient->getFrequentlyBoughtTogether([
  [
    'indexName' => 'ui_forms_index',
    'objectID' => 'screen1.field1_id',
  ],
]);

从这些推荐中你能学到什么

如您所见,现在我们知道屏幕 1 上的字段 1 通常与屏幕 2 上的字段 1 和字段 2 的修改相结合。您需要执行额外的解析来分配正确的屏幕分类。

更进一步:什么会阻止我们跨多个 系统 捕获模式?您只需要指定字段所在的“系统”。然而,真正的技巧是事件:“保存”事件通常不能跨多个系统工作。我们可以在系统工作流中使用一个已知的端点,但是我们将使用时间来代替。

简化跨多个系统填表的工作流程和效率

这里提出的解决方案是使用一个 会话超时

代码发送用户活动和系统事件

convertedObjectIDs(
  'session_time_out',
  'ui_forms_index',
  ["system1.screen1.field1_id", "system2.screen1.field1_id", "system2.screen2.field2_id"]
);

获取推荐

返回与系统 1 屏幕 1 上的字段 1 相关的字段:

$recommendations = $recommendClient->getFrequentlyBoughtTogether([
  [
    'indexName' => 'ui_forms_index',
    'objectID' => 'system1.screen1.field1_id',
  ],
]);

结论

这仅仅是如何使用人工智能驱动的推荐来分析用户活动的开始。我相信你能想到更多。这就是它的美妙之处:推荐是一个通用的工具,通过想象和一些思考就可以很容易地适应它。*

后台人工智能推荐

原文:https://www.algolia.com/blog/product/ai-powered-recommendations-in-the-back-office/

他们说如果你做一把椅子,人们会用它来站着。作为一家 API 优先的公司,我们知道这是真的:我们的客户不断扩展我们的搜索 API,超出我们在构建它时的想法——有时以令人惊讶和鼓舞的方式。Algolia 推荐也是如此——当我们创建它时,我们最初的目标是为电子商务客户推荐产品。然而,我们推荐 API 适用于许多其他用例。客户要求提供媒体流、新闻和博客以及招聘信息的推荐。名单很长。

网飞的产品创新副总裁 Carlos A. Gomez-Uribe 和首席产品官 Neil Hunt 撰写了关于广泛范围的建议:

“人类在生活的各个方面都面临着越来越多的选择——当然包括视频、音乐和书籍等媒体,[但也包括]度假租赁、餐馆、……医疗保险计划、治疗和测试、求职、教育和学习、约会……

我们确信推荐系统领域将继续扮演举足轻重的角色……

这篇文章比那篇文章更谦虚:我们设想如何使用我们的推荐 API 将推荐集成到您的后台系统和流程中。我们向技术和非技术读者描述了最终用户的高级优势和功能。

人们从不一次只做一件事——如何利用多任务处理

我们在购物或做 任何事情 时,很少只买一件东西而不结合另一套动作。动作成对或成倍数出现。企业可以通过人工智能推荐来利用这一点。

建议捕捉并模拟了我们行为的规律性,提供了对(a)我们一贯一起执行的行为和(b)我们如何利用这些频繁组合的行为来改变我们做生意的方式的见解。

虽然这篇文章是关于后台系统的推荐,但我们将首先考虑一个更广为人知的用例:购物。我们买牛奶,总是买太多的东西,以至于不能带在手上。我们只需要一种水果,却买了三种不同的水果。我们去宜家买一些配饰,出来时推着满满一车的家居配饰。

这被称为宜家效应。我们买 1 英镑,买 10 英镑。

宜家和所有连锁超市的主要问题是: 这另外 10 件商品中,哪一件是“经常一起购买”的?

利用习惯和模式

人工智能推荐通过检测和利用这些习惯和模式来回答这个问题,这有利于客户(加快他们的购物体验)和企业(邀请客户购买更多商品)。产品和内容推荐现在一致提出为“经常一起买”。当我们购买商品或向购物车添加商品时,亚马逊会向我们推荐商品;当我们浏览他们的产品时,网飞提供内容推荐;Spotify 根据歌曲的频繁组合创建播放列表。

(注意,我们这里主要关注的频率分析。然而,推荐也是关于寻找相关项目的。我们将在后面提到这一点,但我们的重点仍然是频率。)

内勤建议

虽然推荐已经成为电子商务和流行媒体服务的基础,但频繁执行的动作也可以应用于有规律地做 任何事情 。频率分析可以在任何后台系统(如 Salesforce、SAP、ERPs、CMSs)的后台运行,方法是将分析数据输入到推荐建模引擎中,并使知识管理和常见工作场所任务更加高效和统一。推荐可以带来更连贯的组织知识、内部网搜索和人工智能库存管理。同样面向客户的 B2C 优势也可以应用于 B2B,针对合作伙伴关系、采购和分销的独特方面进行定制。

这是因为,从根本上来说,推荐是为了捕捉和利用在任何业务领域出现的 任何 行为模式——金融、客户关系、人力资源、电子商务、媒体、SaaS、医院和教育、旅游等服务。

举个例子:推荐和销售力量

为了说明这一点,我们将使用 Salesforce 来管理帐户和客户关系。请注意,我们可以选择任何后台系统,例如管理库存、法律或财务流程、HR、SAP、ERP、CMSs 等的软件。

下面是你能做的总结。其中一些将在以后的博客文章中讨论,有更多的细节和实际的解决方案,包括代码。

建议员工了解客户(B2C)和供应商(B2B)

您如何将任何 Salesforce 分析与 Salesforce B2B UI 融合到人工智能支持的分析和推荐中?

  • 假设您已经构建了一个定制的 Salesforce UI 来管理您的 B2B 联系人,它包含各个供应商的最新交易。如果员工希望改善特定供应商的购买体验,他们可以使用基于其他供应商销售历史的建议(使用匿名数据)。虽然这通常在 B2C 中进行,但在 B2B 中也同样适用,在 B2B 中,消费者是商品或服务的供应商。
  • 推荐引擎可以捕获每笔交易的详细信息,无论是来自客户或供应商的在线交易、实体店交易,还是后端 B2B(供应商之间)交易。来自这些来源的数以千计的交易形成了一个强大且非常准确的企业推荐模型。
  • 接下来,通过在 Salesforce UI 上显示这些建议,员工可以联系供应商,提醒他们可能错过的机会。这避免了手动分析的大量时间和金钱,并通过更智能、更有针对性的库存和知情的客户简化了您的业务模式。
  • 最后,通过让系统将建议反馈到后台采购软件,您可以应用流程自动化、知识管理系统、库存变化和分销渠道方面的建议。负责库存的员工可以接受、拒绝或修改这些建议,以重新思考目录。

员工 ui 和内勤工作流程建议

假设您的客户关系员工(销售、客户支持、客户经理和其他此类面向客户的员工)每天执行一组动作—相同的 一组动作。如果你把这些行为输入到推荐引擎中,系统将能够把经常做的行为组合在一起。这有几个好处:

  • 创造更好的用户界面。 用户界面可以重新配置,以便在屏幕上或工作流程中更紧密地放置这些动作。UI 可以将搜索和推荐与联合搜索体验相集成。
  • 用户测试。通过确定某些频繁组合的动作很难完成,你可以自动化用户测试来创建最好的用户界面。
  • 个性化体验。 通过将个性化与推荐相结合,单个员工可以遵循适合其在更大的业务环境中的角色的个性化工作流程。
  • 工作流效率。 推荐系统可以推荐遵循受引导的 UI 过程或向导的工作流,集中于最频繁组合的动作。
  • 任务自动化。 你可以通过分析这些动作的哪些部分可以由计算机更高效地完成,来自动化其中的一些步骤。使用建议来帮助分解每个步骤可以帮助从头到尾重新思考整个过程。

增加搜索和人工智能推荐,整合后台系统和知识管理

如果您决定“搜索化”sales force——也就是说,您已经将搜索整合到您的 salesforce UI 和用户工作流程中——那么您可以利用 Algolia 的 AI,因为它与搜索结果相关。您可以将您的后台办公系统与一个多显示界面结合和集成,该界面称为 联合搜索 ,可以在同一个屏幕上整合建议和其他信息。

推荐意味着你可以开始显示员工在搜索相关项目时经常咨询的内容。

  • 例如,通过允许用户从 Salesforce 中的客户屏幕搜索财务数据库,您可以开始将 Salesforce 与您自己的内部财务会计系统相结合。想象一下这样一个场景,几个员工定期在 Salesforce 内外查阅合同和其他信息。如果您没有集成搜索,您的员工将不得不更改应用程序来找到他们需要的内容。通过将不同的系统集成到同一个平台(Salesforce 或其他),您可以开始看到跨系统的 模式 以了解员工正在协同做什么。

好处可能是:

  • 一种更高效、更准确的做生意方式。
  • 重做界面,使不同系统的信息出现在同一屏幕上。例如,在不相关的屏幕上显示法律数据库中的合同,如客户的通话记录。
  • 重新思考平台本身——也就是说,组成更大的应用程序的一组屏幕。让员工可以更轻松地查阅客户的账户,同时只需点击一下鼠标,即可在另一个屏幕上查看客户的个人资料。

结论——好奇心和勇气,以及行动号召

我们不假思索地说“汉堡和薯条”是有原因的。或者“葡萄酒和奶酪”。也不经常是“汉堡和葡萄酒”。但是我们并不总是知道为什么,除了,嗯…“这些词搭配得很好”。模式是存在的。头奖是发现鲜为人知的习惯,并从新发现的知识中获利。这只是需要一些好奇心和勇气。

例如,在任何高级用例中,一个经常被忽略的因素就是开发人员。如果有时间、动机和好奇心,任何开发人员都可以用通用推荐 API 做任何事情。公司通常专注于商业驱动的用例——产品和电影推荐,通过增加销售额和转化率来衡量。虽然那里有很多机会,但后台办公室也有一个未开发的领域,其中的好处可能 看起来 不太赚钱或不太明显,但只要有一些好奇心和勇气,一个好的开发人员不需要做太多工作就可以将人工智能支持的建议集成到任何后台数据或工作流中,从而带来巨大的好处。

发现我们新的人工智能推荐产品

原文:https://www.algolia.com/blog/product/ai-powered-recommendations-product-launch/

我们很高兴地宣布推出 Algolia 年春季推荐产品。 Algolia 推荐 是一个基于人工智能的推荐引擎,与我们的搜索和发现平台相集成,为用户提供最相关、最可行的推荐。

从您的主页到分类页面——从产品页面到结账台——在每个接触点并使用任何设备,Algolia Recommend 帮助您最大限度地提高用户参与度。

请继续阅读,了解此次发布的新内容,并了解其他企业如何受益于 Algolia 的搜索&发现平台。

Algolia 有什么新的推荐?

在内 Algolia 推荐 ,从单个仪表板,跟单员、数字内容经理或数字业务领导可以选择适合他们的模式,部署它,然后跟踪结果。Algolia 推荐春季发布 2022 包括以下新功能:

  • 流行趋势——一套创新的人工智能模型,可根据用户与各种品牌、产品和内容类别以及感兴趣的话题互动时的行为数据来检测新兴趋势,所有这些都为商家和数字内容领导者提供了与访客即时互动的能力。这增加了点击率,降低了跳出率,并通过显示哪些项目或主题是流行的,帮助访问者克服了“害怕错过”的感觉。

  • Rules - Boost Categories业务规则——低代码/无代码功能,利用人工智能进行持续改进,激活独特的业务策略——无需开发人员干预。这为品类经销商、在线零售策略师和内容专家提供了更大的灵活性和控制力,以生成与其业务目标相关的强大新推荐,同时获得显著的运营效率和灵活性。

  • 混合推荐引擎–这是协同过滤算法和基于内容的过滤算法的结合,共同提高了推荐的相关性和准确性。这种方法克服了“冷启动”问题,因为一旦基于内容的数据被索引,推荐就可以立即呈现给用户。在这个初始阶段或稍后阶段的行为信息的可用性可以进一步帮助微调和丰富推荐的质量。这一新功能将使所有在线供应商能够立即启动并运行,更快地增加用户参与度并提高订单率。

Algolia recommend models

除了这些新的型号和功能,客户已经看到 Algolia 推荐功能的成功,例如:

  • 相关产品–这种推荐模型使零售商能够通过分析购物者在会话期间与之互动的商品(例如,点击、加入购物车和/或购买)并根据这种分析推荐类似的产品,来增加转化率和订单。

  • 经常一起购买–这种推荐模式通过根据其他购物者在单次购物会话中购买的相同商品,在产品页面或购物车页面上追加销售补充商品,从而增加平均订单价值(AOV)。

Algolia 推荐用例及客户

Algolia 推荐的一个最明显的使用案例是在线零售或电子商务环境,然而推荐在媒体、出版物和各种其他环境中是有益的。无论您选择将它集成到您的主页、产品详情页面还是结账体验中,它都可以帮助用户发现他们可能需要的产品,并确保他们在这个过程中有一个愉快的体验。

Increase conversion rate with Recommend

像英国最大的运动服装零售商之一 Gymshark 这样的 Algolia 客户已经看到了 Recommend 在 2021 年黑色星期五期间以订单率增加 150%和“加入购物车”率增加 32%的形式转变了他们的业务。其他零售商,如 诺斯基诺斯基 利用推荐来确保他们超过 10,000 种产品目录中的正确产品在正确的时间找到正确的用户。自从实施推荐后,Flaconi 的平均订单价值(AOV)增加了 10%。其他公司,如英国的 Co-op,出版商 Android Authority,宽带互联网提供商 Orange Romania,以及其他公司都在利用 Algolia 的平台来支持他们的推荐。

根据芬德乐器公司数字产品总监克莱尔·阿姆斯特朗的说法

" 有了 Algolia 的推荐,我们能够在'Fender Play',完整的吉他贝斯和尤克里里学习应用程序中进一步推广我们的各种内容、课程和学习活动,所有这些都在支持下一代玩家踏上他们的音乐之旅。

Algolia 客户也从推荐功能中获益,这些功能涵盖了这些示例之外的各种不同的使用案例和行业。Algolia 已准备好满足您的推荐需求。

今日入门推荐

我们宣布的 Algolia 年春季推荐产品现已上市。想看看如何在短短 4 天内实施 Algolia 建议,并立即对您的业务产生影响吗?今天就来个 个性化试玩 。准备好开始建造了吗? 免费注册 ,今天就开始使用 Algolia。

如果您是 Algolia 的现有客户,实施推荐就像引入 6 行代码来创建一个新的传送带一样简单—在我们的文档中了解更多信息 。联系您的客户成功经理或 联系我们 如果您想了解更多信息。

感谢您的阅读、传播和试用推荐!

AI

原文:https://www.algolia.com/blog/ai/

什么是认知搜索,它对你的业务意味着什么?

“找不到了。”可悲的是,这个结论仍然是现代企业搜索经验的一部分。但是...

高级搜索引擎优化网络数字营销经理

阿尔戈利亚+海胆。IO

原文:https://www.algolia.com/blog/algolia/algolia-acquires-seaurchin-io/

构建我们的下一波分析

我们将为我们的产品家族引入一个令人兴奋的新成员,并为我们的客户推出新的分析解决方案

我很激动地宣布今天我们的第一个收获:海胆。IO——专注于搜索洞察的实时分析平台。这是我们帮助客户提高用户参与度道路上的一个重要里程碑。我们一直致力于为他们寻找新的机会,创造更直观、更相关、更有益的体验。今天的公告让我们在这个旅程上更近了一步。

为什么是海胆。木卫一?

我们第一次遇到海胆。IO 团队作为他们技术的崇拜者。他们建立了一个独特的平台,可以对用户参与搜索的方式进行细致的了解。他们瞄准的正是我们试图为客户解决的需求。我们很快就意识到,通过合作,我们可以为我们的客户实现更多……并且完成得更快!

由于我们已经在整合海胆的技术,收购使我们能够立即加快我们的分析解决方案的开发。点击阅读更多关于我们新的分析的信息。

我们才刚开始

我们经历了具有里程碑意义的一年——我们每月处理的搜索查询量突破了 400 亿大关,我们的收入、团队和客户都翻了一番。虽然我对车队的成就感到兴奋,但我对未来更感兴趣。给我们的团队带来新技术让我们能够更快地创新,并为我们的社区带来新的解决方案。

我们的使命是为产品开发者提供工具来创造令人惊叹的体验,所以请继续关注下一步!

如何在 DevTools 中检查 Algolia 请求:Algolia 分析器扩展

原文:https://www.algolia.com/blog/engineering/algolia-analyzer-browser-extension-inspect-algolia-specific-requests-in-devtools/

你在浏览器的开发工具上花了多少时间?拜托,说实话。太多了,不是吗?别担心,我也是——我叫艾曼纽,是阿尔戈利亚公司的工程师。有时候我会花几个小时调试请求和 API 调用,所以我已经和 DevTools 中的 Network 选项卡成了非常非常好的朋友。但是像任何混乱的关系一样,我们有沟通问题:通常我会向它询问一些 API 调用的信息,但是 DevTools 给我的信息不清楚或者不如我期望的那样有用。

然后我有了一个想法。我是开发商,对吧?与其依赖通用工具来适应我非常具体的以 Algolia 为中心的用例,为什么我不能构建一个 Chrome 扩展来帮助我调试 Algolia 请求呢?

我照做了。在高层次上,该扩展在 Chrome DevTools 中添加了一个名为“ Algolia 分析器”的新面板。起初这相当困难——我有扩展的经验,但没有将它们添加到 DevTools 的经验。我找到了正确的文档,但是它们没有为版本 3 清单更新。幸运的是,它基本上是兼容的,但这种一开始就出现的小问题并没有让我充满希望。经过一番欺骗,我终于得到了这个新的定制面板:

Algolia Analyzer browser extension DevTools tab screenshot

我想做的第一件事是创建一个小工具来检查 API 键的访问控制列表。这非常有帮助,因为我们永远不应该在前端 Algolia 应用程序中使用 admin API 键(或任何应用程序,如果我们能帮助它的话)。你只能得到一把万能钥匙,可以解锁 Algolia 的任何功能,包括删除所有内容和为你注册更昂贵的计划——如果放在错误的环境中,这些功能肯定会被滥用。admin 键允许我们创建只具有特定权限的角色和 API 键,并且我们只在应用程序内部使用。因此,我在这里添加了这个功能,以避免每次我们想要检查给定 API 键的权限时都必须进入我们的 Algolia 仪表板。

为了测试这一点,我去了我的同事 Jaden 为最近一个以 Algolia 为主题的项目制作的网站。它看起来是这样的,显然包含了 API 键:

Algolia Analyzer browser extension screenshot admin API keys hidden

当然,这里有一些危险的能力,这就是为什么我们不想在前端使用它(或者任何地方,如果可能的话)。想象一下,一些捣乱者看到你用了你的管理键,然后用了你的整个 Algolia 搜索索引。使用默认的搜索 API 键,它应该看起来更像这样:

Algolia Analyzer browser extension screenshot secure API key shown

好多了。

另一个有用的特性:向服务器发出的请求列表:

Algolia Analyzer browser extension screenshot first POST request view

这是自动更新的,所以它向我们展示了我们的程序是如何与 Algolia 交互的。这个特定的应用程序只有一个初始搜索请求(只是为了显示结果的初始页面),但当你真正开始搜索时,它会上升:

Algolia Analyzer browser extension screenshot subsequent POST request from search query view

在搜索框中键入四个字符后,您已经进行了五次搜索(在这种情况下,我键入了luke,因此 Algolia 被 ping 为空白请求、llulukluke)。结果上方的那些框让我只过滤某些类型的结果,如果您返回奇怪的错误或者如果您正在使用多个 Algolia 应用程序 id,这将非常有用。

如果你点击其中任何一个请求,你会看到一个解释这个请求的窗口:

Algolia Analyzer browser extension screenshot request detailed view

在最初的描述中,已经有很多我发现自己在调试过程中经常需要的信息。例如,常见的故障诊断问题是“您使用的是最新版本的 __?”,这里我们可以在x-algolia-agent参数中说出所有相关库的确切版本。以前肯定可以在 DevTools 中找到这些信息,但是在 Network 选项卡中这部分看起来是这样的:

Algolia Analyzer browser extension screenshot requests response standard DevTools Network tab view

很大的进步,对吧?

下面是我们从 Algolia 得到的一个简洁的回复:

Algolia Analyzer browser extension screenshot response detailed view

当然,我们可以在代码中和更通用的 DevTools 视图中访问所有这些数据,但是现在我们不需要担心到处粘贴console.log或者深入到一个视图中,该视图主要是为了帮助您确定您正在加载哪个 CSS 文件而设计的。多亏了我的 Algolia 分析器浏览器扩展,所有 Algolia 特有的信息现在都在那里,都在一个地方。

不过,我不能假装这是刚刚发生的。实际上很难规划出哪些信息应该放在哪里。我不得不有意识地删掉一些不需要的部分,这样它们就不会挤掉重要的部分。我们对这里的信息是如何构建的进行了大量思考。我能够在这个项目中使用 React,因此它使组织过程更加精简。

如果你有兴趣使用这个扩展,我很乐意听到你的反馈!让我知道你是否可以在新的 DevTools 标签中使用其他的东西,通过发推特@Algolia 和添加 PR 到 GitHub repo 的!我很高兴听到你的想法!

Algolia 在 G2 的企业搜索软件类别中排名领先

原文:https://www.algolia.com/blog/algolia/algolia-announced-leader-on-enterprise-search-software/

市场已经说话,G2 正在倾听。

Algolia 的使命是让任何公司——无论规模大小或开发者数量多少——都能创造愉快的搜索和发现体验。

我们由全球 350 多名 Algolians 人组成的团队为这一使命而自豪,并为提供市场领先的搜索和发现解决方案而自豪,该解决方案是为开发人员、最终用户和企业 构建和优化的 ,旨在提供 卓越体验,为所有人带来真正的价值。

但更让我们自豪的是,当我们的客户在 G2 等对等点评网站上用自己的声音分享他们自己的体验和 Algolia 的成功时,我们脸上露出了笑容。

“类似谷歌的企业搜索,开箱即用…Algolia 非常易于使用,使实施企业搜索变得轻而易举。它为我们提供了 Elasticsearch 的几乎所有优势,但却是一个交钥匙解决方案。”

首席产品官

来源:引自 G2.com Algolia 用户的话

每个月都有超过 100 万人,包括商务人士和买家,访问 G2 的网站,阅读软件和服务的评论。

在 G2 的 企业搜索软件 类别中,我们今天荣幸地宣布,Algolia 已经获得了最高领导者排名——最值得一提的是在2020 年冬季企业搜索网格报告 中。这一最高排名是基于真实用户对 G2 评论表中特定搜索相关问题的反馈,这是 Algolia 连续第八个季度领先该报告。

G2 Crow Grid: Algolia ranked as the leader in G2’s Enterprise Search Software Category

来源:G2、2020 年冬季电网报供企业搜索

企业搜索软件市场买方指南

G2 将企业搜索定义为“对组织内存储的业务数据进行有组织的检索,用户可以在企业数据库中安全地输入和查找数据。”

今年,G2 扩展了这一定义,将“企业搜索软件还可以提供 搜索即服务功能,允许企业安全地向外部来源(如移动应用程序和网站)公开选定的数据和信息源(包括产品目录、视频和营销内容)。通过索引,用户能够搜索这些数据,找到他们正在寻找的 “以支持客户旅程的关键方面,包括研究、发现、购买和/或购后活动。

这是 Algolia 的亮点,它满足了用户的搜索需求,为搜索和发现体验提供动力,将消费者与他们通过网络、手机或语音寻找的内容和服务联系起来。Algolia 使客户能够直观、快速地找到他们想要的东西,并激励他们停留更长时间,进一步参与和深入探索,最终带来更高的点击率和更多的转化。

在企业搜索软件类别中,Algolia 网站搜索在企业搜索产品中获得最高满意度:

  • 97%的用户将其评为 4 星或 5 星
    *** 94%的用户认为它正朝着正确的方向前进*** 92% 的用户表示他们可能会推荐 Algolia 网站搜索****

****与同类其他产品相比,Algolia 在企业搜索网格报告中获得了认证用户的积极评价,成为领先产品。该报告比较和对比了 Algolia 与其他供应商在用户满意度排名方面的表现,包括:

  • 推荐的可能性
  • 产品方向
  • 商业价值
  • 易用性
  • 易于设置
  • 支架质量。

进入完整报告——企业搜索网格报告| 2020 年冬季

此外,我们很荣幸 Algolia 在 G2 的企业搜索动量网格报告中被评为领导者,该报告通过用户满意度得分、员工增长和数字存在显示了产品在各自领域的增长轨迹,并根据用户满意度在 G2 的“20 大企业搜索软件”列表中排名第一,

安果用户评论 G2

以下是用户对 Algolia 的评价:

“与我们电子商务网站的原始搜索工具相比,Algolia 代表了一个巨大的进步。它几乎可以即时提供更精确、更相关的搜索结果,让购物者的体验更有效率、更愉快。”T48

–消费品行业的执行发起人

“快速直观的搜索……搜索速度非常快,能够根据您的输入返回结果。我用 Algolia 创造的体验远超其他搜索提供商,而且非常容易实现。”T56

–高级网页开发人员

“供应商关系总是倾向于承诺多于兑现。这是首批交付了同样多(甚至更多!)比承诺的。我对 Algolia 系统的性能感到惊讶。极快,准确,相关,立即更新,优雅,易于实施,轻而易举地定制。真的好得不能再好了。”T3

–技术执行总监

要查看其他用户在 G2 上对 Algolia 的评价,请点击

了解更多有关我们针对客户和工作场所的企业搜索解决方案的信息

我谨代表我们全球的员工,感谢我们 8,600 多名客户!您的意见和反馈让我们感到自豪,我们希望代表您继续改进和创新。****

如何在 Rust 中使用 Algolia 作为游戏引擎调试工具

原文:https://www.algolia.com/blog/engineering/algolia-as-rust-game-engine-debugging-tool/

我们邀请我们在 Starschema 的朋友写一个结合 Rust 使用 Algolia 的例子。他们提出了一个非常独特的用例,我们希望它能启发你以不同的方式使用 Algolia。喝一杯饮料,享受高级开发人员久拉·拉斯洛的这篇文章吧!


大多数现代软件的数据驱动本质意味着调试也发生在两个不同的层次上:调试代码和调试代码使用的数据。虽然现代 ide 提供了大量的代码调试工具,但它们通常只包含非常基本的数据调试工具(最常用的是显示当前范围内变量的内容)。

ide 不能提供更高层次的数据调试服务,因为它们不知道你的数据的更高层次的结构。

举例场景

我们将使用的例子设想了一个小的游戏引擎开发团队作为一个更大的团队的一部分为游戏引擎(在 Rust 中)开发内容。挑战在于调试来自 QA 的案例。

如果我们假设单元测试捕捉到了最直接的错误(如打字错误、基本逻辑问题等),这些 QA 问题通常源于这样一个事实,即由内容团队创建的数据与单元测试测试的场景有很大的不同,并且要复杂得多。调试通常涉及大量日志和运行期间创建的数据的运行后整理。

CD Project Red 使用的一种缓解这种痛苦的解决方案,在“The Witcher 3:Optimizing Content Pipelines for Open-World Games”GDC talk 中进行了解释,就是为构建期间使用的每个实体建立一个可搜索的数据库。对于产品范围的问题,这是一个很好的解决方案(通常是针对内容开发人员的),但是对于我们的“专注于核心代码开发的小团队”场景,这可能不是最好的解决方案:

  • 它们需要所有其他团队的合作(以及产品范围的构建系统修改)
  • 数据库需要维护
  • “所有的数据”对于这些调试会话来说通常是多余的(排序会消耗更多的时间)
  • 不支持通过修改单个测试运行的数据来进行调试(因为整个数据库假设一个单一的、一致的输入数据集)

我们想要什么?

拥有一个数据库的想法感觉不错,但是我们有更多的要求:

  • 我们希望从运行时数据(而不是构建时间)构建数据库
  • 我们想要多个并行的数据库(因为团队可能正在处理许多问题)
  • 实体数据是自由格式的——因为我们可能会在调试期间改变结构,所以我们不希望预先指定模式
  • 我们不想浪费时间维护数据库
  • 我们想要快速搜索能力*

* 关于“快速搜索”的一些注意事项:最常见的跟踪任务之一是跨多个实体匹配地址或 id,我们不希望为每个实体类型运行多个 SQL 查询,因为将相同的 id 复制粘贴到 9 个不同的查询,然后将结果复制粘贴到单个文本编辑器窗口进行检查,这既缓慢又缺乏动力。

阿果

当查看 Algolia 时,我们看到它符合我们的 DB 标准:

  • 支持多个数据库
  • 数据是自由形式的
  • 无需维护
  • 有很好的搜索能力
  • 可以为搜索构建简单的自定义用户界面

考虑到这一点,我们可以创建一个列表,列出将数据传输到 Algolia 所需的代码:

  • 我们需要一种简单的方法来标记 Algolia 序列化的数据(我们可以使用 JSON 序列化来达到这个目的)
  • 创建一个可以向 Algolia 发送序列化数据的库(最好是通过一个简单的调用)
  • 实现库的简单配置

发送数据给阿哥利亚

我们把它送到哪里,怎么送?

Algolia 确实提供了关于如何使用 REST API 的文档,但是,目前可用的库都不能用于 Rust(没有 C 或 C++版本可以包装),所以我们必须利用用于生成客户端本身的 API 客户端自动化库。

作为基线,让我们看看提供的 JavaScript 客户端示例:

// for the default version
import { algoliasearch } from 'algoliasearch';
// you can also import the lite version, with search only methods
// import { liteClient } from 'algoliasearch/lite';
const client = algoliasearch('<YOUR_APP_ID>', '<YOUR_API_KEY>');

// The records retrieved by any of your data sources
const recordsFromDataSource = [
  { name: 'Tom Cruise' },
  { name: 'Scarlett Johansson' },
];
// Here we construct the request to be sent to Algolia with the `batch` method
const requests: BatchOperation[] = recordsFromDataSource.map((record) => {
  return {
    // `batch` allows you to do many Algolia operations, but here we want to index our record.
    action: 'addObject',
    body: record,
  };
});
const { taskID } = await client.batch({
  indexName: '<YOUR_INDEX_NAME>',
  batchWriteParams: {
    requests,
  },
});
// Wait for indexing to be finished
await client.waitForTask({ indexName: '<YOUR_INDEX_NAME>', taskID });
console.log('Ready to search!'); 

所以这个过程看起来相当简单:

  • 使用APP_IDAPI_KEY为 Algolia 提供认证
  • 打包我们想要发送的数据(见本规范部分
  • 将请求发送到 Algolia
  • 我们可以跳过等待索引完成(因为我们在核心代码中,我们希望避免长时间的等待)

直接使用 REST API 的一个缺点是,如果你没有使用官方 API 客户端,Algolia 不提供 SLAT21。

认证

为了弄清楚认证是如何处理的,让我们跟踪一下algoliasearch(...)构造函数调用:

  • clients/algoliasearch-client-javascript/packages/algoliasearch/builds/browser.ts中,我们看到默认的认证选项是WithinQueryParameters,并且是硬编码的——我们将使用它
  • 稍后我们看到clients/algoliasearch-client-javascript/packages/client-search/src/searchClient.ts中的createSearchClient()实际上是在构建大部分algoliaclient对象(包括我们关心的部分)
  • 这将使用clients/algoliasearch-client-javascript/packages/client-common/src/createAuth.ts中的createAuth()创建认证:
const credentials = {
  'x-algolia-api-key': apiKey,
  'x-algolia-application-id': appId,
};

return {
  headers(): Headers {
    return authMode === 'WithinHeaders' ? credentials : {};
  },

  queryParameters(): QueryParameters {
    return authMode === 'WithinQueryParameters' ? credentials : {};
  },
}; 

这清楚地表明,我们必须将x-algolia-api-keyx-algolia-application-id添加到用于认证的查询参数中。

东道主

目标主机列表来自searchClient.ts中的getDefaultHosts()函数,我们看到它有readwritereadwrite主机:

function getDefaultHosts(appId: string): Host[] {
  return (
    [
      {
        url: `${appId}-dsn.algolia.net`,
        accept: 'read',
        protocol: 'https',
      },
      {
        url: `${appId}.algolia.net`,
        accept: 'write',
        protocol: 'https',
      },
    ] as Host[]
  ).concat(
    shuffle([
      {
        url: `${appId}-1.algolianet.com`,
        accept: 'readWrite',
        protocol: 'https',
      },
      {
        url: `${appId}-2.algolianet.com`,
        accept: 'readWrite',
        protocol: 'https',
      },
      {
        url: `${appId}-3.algolianet.com`,
        accept: 'readWrite',
        protocol: 'https',
      },
    ])
  );
} 

当检查 Transporter request()方法时,我们可以看到read主机用于GET请求,而write主机用于其他所有事情。

由于调试不是关键任务,我们将忽略完全成熟的 Algolia 客户端使用的重试逻辑。

创建请求

我们还可以在.batch()中看到searchClient.ts中的请求结构:

batch( { indexName, batchWriteParams }: ...) {
    // ...
    const requestPath = '/1/indexes/{indexName}/batch'.replace( '{indexName}', encodeURIComponent(indexName));
    // ...
    const headers: Headers = {};
    const queryParameters: QueryParameters = {};

    const request: Request = {
        method: 'POST',
        path: requestPath,
        queryParameters,
        headers,
        data: batchWriteParams,
    };

    return transporter.request(request, requestOptions);
}, 

我们可以看到请求的路径是/1/indexes/<INDEX>/batch,这个请求看起来像一个标准的POST请求。

当跟踪初始化它的createTransporter()调用时,我们看到它添加了一个带有Algolia for JavaScript (<VERSION>)值的x-algolia-agent查询参数。

真人检查

解决了大部分细节后,我们想使用官方的 Algolia Client SDK for Javascript 创建一个快速测试,以检查我们关于发送数据的假设是否正确。使用 Javascript 客户端文档,很容易将一个简单的 HTML 文件放在一起,向 Algolia 发出批量上传请求:

<html>
    <head>
        <!-- load the Algolia JS library -->
        <script src="<https://cdn.jsdelivr.net/npm/algoliasearch@4.5.1/dist/algoliasearch.umd.js>"></script>
    </head>
    <body>
        <script>
            // Connect and authenticate with your Algolia app
            const client = algoliasearch('<APP CODE>', '<ADMIN API TOKEN>')

            // Create a new index and add a record
            const index = client.initIndex('<INDEX>')
            const record = { objectID: 1, name: 'test_record' }
            index.saveObject(record).wait()

            // Search the index and print the results
            index
                .search('test_record')
                .then(({ hits }) => console.log(hits[0]))
        </script>
    </body>
</html> 

Chrome devtools network inspector tab screenshot

当在浏览器中运行时,我们可以看到它在工作,但是,我们看到的一个区别是x-algolia-api-keyx-algolia-application-id认证密钥是在头中发送的,而不是在查询字符串中。我们将记下这一点并使用它,而不是将它们作为查询参数传递。

Chrome devtools payload inspector screenshot showing formdata

另一个值得注意的地方是,请求的内容类型(尽管有 JSON 主体)是application/x-www-form-urlencoded,而不是application/json(正如人们猜测的那样)或text/plain(作为传输的默认内容类型)。我们认为这是一种暗示,在遇到问题之前,可以忽略内容类型。

锈件

标记用于序列化的数据

为了处理序列化,我们将使用 SerDe 库。

SerDe 是一个有效和通用地序列化和反序列化 Rust 数据结构的框架。

这要求我们的结构实现Serialize特征(对于大多数结构来说),我们只需要给它们的定义添加一个Serialize派生:

// A vector of 3 floats.
//
// The serialized form will look like `{"x":14.1,"y": 86.2,"z":14.3}`
#[derive(Serialize)]
struct Float3 {
    x: f32,
    y: f32,
    z: f32,
} 

我们在 JavaScript 客户端 SDK 的示例代码中看到的一个额外的位是objectID字段。引用 Algolia 索引文档:

索引中的每个对象(记录)最终都需要一个惟一的 ID,称为 objectID。您可以自己创建 objectID,并在索引时发送它。如果您没有发送 objectID,Algolia 会为您生成它。

无论是发送的还是生成的,一旦添加了记录,它就会有一个唯一的标识符,称为 objectID。

对于我们的应用程序来说,自动生成惟一的 ID 是理想的,但是在现实中,当向批处理摄取端点发送数据时,所有对象都必须有一个 objectID 字段,我们可以使用 SerDe 来重命名/转换/重新排列字段

// create a string key from the integer and add a prefix for unique id
fn particle_emitter_object_id<S>(id: &i32, s: S) -> Result<S::Ok, S::Error>
where
    S: Serializer,
{
    s.serialize_str(format!("particle_emitter_{}", id))
}

// An example entity that  a customized objectID for serialization
// The `rename_all` is used to transform underscored_name_format to camelCaseNameFormat
#[derive(Serialize, Deserialized, Debug)]
#[serde(rename_all = "camelCase")]
struct ParticleEmitterEntity {
  // serialize this field as `objectID`, but transform it using the `particle_emitter_object_id` field
  #[serde(rename = "objectID", serialize_with="particle_emitter_object_id")]
  id: i32,
  // nested objects are automatically serialzied
  root_position : Float3,
  // ...
} 

发送数据

我们将使用 Reqwest 板条箱进行 HTTP 传输:

[dependencies]
reqwest = { version = "0.11", features = ["blocking", "json"] }
urlencoding = { version = "2.1" } 
use urlencoding;

fn main() -> Result<(), Box<dyn std::error::Error>> {

  // The credentials data
  const APP_ID: &str = "<APP ID>";
  const INDEX_NAME: &str = "<INDEX NAME>";
  const API_KEY: &str = "<ADMIN API KEY>";
  const ALGOLIA_AGENT: &str = "Algolia DataSender for Rust Dev (0.0.1)";

  // build the URI for the batch
  let host = format!("{}.algolia.net", APP_ID.to_lowercase());
  // The index name can have non-url-friendly characters
  let path = format!("/1/indexes/{}/batch", urlencoding::encode(INDEX_NAME));
  let uri = format!("https://{}{}", host, path);
  let uri_with_client = format!("{}?x-algolia-agent={}", uri, ALGOLIA_AGENT);

  // The batch data needs to be in the proper batch request format.
  // <SERIALIZATION CODE GOES HERE>
  // let data = ....

  // The `blocking` client waits for the request to complete
  let client = reqwest::blocking::Client::new();
  let res = client
      .post(uri_with_client)
      .header("x-algolia-api-key", API_KEY)
      .header("x-algolia-application-id", APP_ID)
      .body(data)
      .send()?;

  Ok(())
} 

预序列化

因为我们的目标是能够向 Algolia 发送任意类型,所以我们并不真正关心底层对象,只关心数据。这很有帮助,因为如果我们想在一个缓冲区中存储实际的对象,我们将很难管理 Rust 中的对象生存期(并且我们必须做的类型魔术将是密集和不可穿透的)。解决方案是在对象到达时将它们序列化到一个共享缓冲区中,并在成批发送对象时从预先序列化的格式开始工作。

Serde 序列化不适合组合预先序列化的数据,所以我们将以非信任的方式进行:我们通过字符串操作而不是类型安全的序列化代码来组合数据。

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = { version = "1.0" } 
use serde::Serialize;

// ...

// The data we'll send for testing
#[derive(Serialize, Debug)]
struct Float3 {
    #[serde(rename="objectID")]
    object_id: String,
    x: f32,
    y: f32,
    z: f32,
}

// RECREATE THE REQUESTS STRUCTURE
// -------------------------------

// {"requests":[{"action":"updateObject","body":{"objectID":1,"name":"test_record"}}]}

// convert a pre-serialized JSON object into a request object for a batch request
fn build_batch_request_entry(data: &String) -> String {
    format!("{{\\\\"action\\\\":\\\\"updateObject\\\\",\\\\"body\\\\":{}}}", data)
}

// wrap the individual requests into a batch
fn wrap_batch_request_entry(rows: &Vec<String>) -> String {
    format!("{{\\\\"requests\\\\":[{}]}}", rows.join(","))
}

// Create some raw data we'll send for testing
let raw_data = vec![
    serde_json::to_string(&Float3 {
        object_id: String::from("point1"),
        x: 0.1,
        y: 0.2,
        z: 0.3,
    })
    .unwrap(),
    serde_json::to_string(&Float3 {
        object_id: String::from("point2"),
        x: 1.1,
        y: 1.2,
        z: 1.3,
    })
    .unwrap(),
];

// transform the list of raw data objects to individual `updateObject` requests,
// then collect and wrap them in the `requests` array for the batch Algolia request
let data = wrap_batch_request_entry(&raw_data.iter().map(build_batch_request_entry).collect()); 

使用这些预先包装的数据,我们可以将它们组合成一个向 Algolia indices 提交数据的工作示例,您可以在 example1.rs 中找到该示例。

包装成一个整洁的 API

既然传输和数据编码已经准备好了,我们可以把它包装成一个简洁的 API:

// Allows sending serializable data to Algolia indices
pub struct AlgoliaSender {
    /// ...
}

impl AlgoliaSender {

  // create a new sender with the given credentials and index
  pub fn new(app_id: &str, api_key: &str, index_name: &str) -> Self { }

  // adds a new serializable item to the list to be sent on the next send_items() call
  pub fn add_item<T>(&mut self, v: &T) where T: Serialize {}

  // Send the items to the default index
  pub fn send_items(&mut self) {}

  // Sends items to the ingestion endpoint in a batch job to a specified index
  pub fn send_items_to_index(&mut self, index_name: &str) {}
} 

然后可以这样使用:

// create a sender
let mut sender = AlgoliaSender::new(APP_ID, API_KEY, INDEX_NAME);

// add some items to send
sender.add_item(&Float3 {
    object_id: String::from("point3"),
    x: 0.1,
    y: 0.2,
    z: 0.3,
});
sender.add_item(&Float3 {
    object_id: String::from("point4"),
    x: 1.1,
    y: 1.2,
    z: 1.3,
});

// send the items in a request (so batch split points can be controlled)
sender.send_items(); 

关于此步骤的完整代码,请参见示例 2.rs

添加单个对象 id

由于我们并不真的想将objectID字段添加到我们的内部数据结构中,我们必须添加一些额外的逻辑来为我们生成这些字段。

首先,让我们为这些 id 创建一个生成器:

// Generates unique IDs to use as ObjectIds.
//
// This implementation combines a prefix with an incremental index.
pub struct IdGenerator {
    prefix: String,
    idx: i32,
}

impl IdGenerator {
    // Creates a new IdGenerator with the given prefix
    pub fn new(prefix: String) -> Self {
        IdGenerator { prefix: prefix, idx: 0 }
    }

    // Creates a new IdGenerator with the current epoch time as prefix
    pub fn new_from_time() -> Self {
        let now = SystemTime::now();
        let prefix = format!("{:?}", now.duration_since(std::time::UNIX_EPOCH).unwrap_or_default());
        Self::new(prefix)
    }

    // Returns a new integer id and increments the internal counter
    pub fn next_i32(&mut self) -> i32 {
        let idx = self.idx;
        self.idx += 1;
        idx
    }

    // Returns a concatenated string id and increments the internal counter
    pub fn next_string(&mut self) -> String {
        let next_id = self.next_i32();
        format!("{}_{}", self.prefix.as_str(), next_id)
    }
} 

然后我们可以进行难看的字符串操作,将生成的 objectID 注入到已经序列化的对象中。这假设我们发送的所有东西都是一个对象,而不是一个数组或原始值 Algolia 期望对象,这对我们来说正好。我们使用filter_map()来跳过太短的条目(很可能是无效的 JSON)。

// converts a pre-serialized JSON object into a request object for a batch request using DANGEROUS STRING MAGIC
fn build_batch_request_entry(id: &String, data: &String) -> Option<String> {
    if data.len() <= 2 {
        return None;
    }

    // Skip the opening curly brace and inject our objectID into the already serialized object
    let remaining_data:String = data.chars().skip(1).collect();
    Some(format!("{{\\\\"action\\\\":\\\\"updateObject\\\\",\\\\"body\\\\":{{\\\\"objectID\\\\":\\\\"{}\\\\",{}}}", id, remaining_data))
}
 // Wrap all pre-serialized data with an object id and the `updateObject` request, then collect into a batch request
let data = wrap_batch_request_entry(
    &self
        .data_buffer
        .iter()
        .filter_map(|entry: &String| -> Option<String> { build_batch_request_entry(&self.id_generator.next_string(), entry) })
        .collect(),
); 

这一步的完整代码可以在 example3.rs 中找到。

向 C / C++公开

由于我们的库分为两个不同的部分:将对象序列化为 JSON 和发送数据,我们实际上可以将 Rust 库暴露给 C / C++代码,以便轻松地从这些语言获取数据。如果他们能提供 JSON 序列化的数据,我们就可以发送。

我们的目标是拥有一个带有构造函数和析构函数的 API 来模拟 Rust 端的公共 API。以下是这些函数的第一稿,强力实现:

[dependencies]
libc = "0.2" 
// We need to support adding pre-serialized data directly
impl AlgoliaSender {
    //...

    // adds an already serialized value to be sent
    pub fn add_raw_item(&mut self, data: &str) {
        self.data_buffer.push(String::from(data));
    }

    // ...
}

// C API
// -----

// Constructor for the AlgoliaSender struct from C.
// Returns nullptr if any of the parameters are empty.
#[no_mangle]
pub unsafe extern "C" fn algolia_sender_new(app_id: *const libc::c_char, api_key: *const libc::c_char, index_name: *const libc::c_char) -> *mut AlgoliaSender {

    // rustify all parameters
    let app_id_str: &str = std::ffi::CStr::from_ptr(app_id).to_str().unwrap_or("");
    let api_key_str: &str = std::ffi::CStr::from_ptr(api_key).to_str().unwrap_or("");
    let index_name_str: &str = std::ffi::CStr::from_ptr(index_name).to_str().unwrap_or("");

    // check these parameters
    if app_id_str.is_empty() || api_key_str.is_empty() || index_name_str.is_empty() {
        return std::ptr::null_mut();
    }

    // create a new sender and Box it, and use `Box::into_raw()` to get a pointer that outlives this function call
    let struct_instance = AlgoliaSender::new(app_id_str, api_key_str, index_name_str);
    let boxed = Box::new(struct_instance);
    Box::into_raw(boxed)
}

// Destructor for the AlgoliaSender struct from C
#[no_mangle]
pub unsafe extern "C" fn algolia_sender_destroy(struct_instance: *mut AlgoliaSender) {
    // let the Rust lifetime take over and destroy the instance after the function is done
    Box::from_raw(struct_instance);
}

// Adds an item to be sent to the target sender
#[no_mangle]
pub unsafe extern "C" fn algolia_sender_add_item(a: *mut AlgoliaSender, data: *const libc::c_char) {
    // convert data
    let data_str = match std::ffi::CStr::from_ptr(data).to_str() {
        Err(_) => return,
        Ok(s) => String::from(s),
    };

    // attempt to add it
    match a.as_mut() {
        None => return,
        Some(sender) => sender.add_raw_item(data_str),
    };

}

// Trigger the sending of items
#[no_mangle]
pub unsafe extern "C" fn algolia_sender_send_items(a: *mut AlgoliaSender) {
    // attempt to send the items
    match a.as_mut() {
        None => return,
        Some(sender) => sender.send_items(),
    };
} 

这一步的完整源代码可以在 example4.rs 中找到。

示例用例

我们的例子相当简单:

  • 内容团队通过放置对象和编写程序性内容生成规则来创建地图
  • 我们希望保留一个包含所有对象(包括过程对象)的可搜索数据库
  • 我们希望能够通过任何属性找到对象,并在浏览器中显示该对象的已知属性
  • 从浏览器搜索中,我们希望能够在内部编辑器工具中快速转到该对象进行评估(使用带有自定义协议的链接)

我们想要发送的数据结构如下所示:

#[derive(Serialize)]
pub enum EntityCategory {
  StaticEntity,
  ...
}

#[derive(Serialize)]
pub struct PlacedEntity {
  // The root position of the object -- we'll use these coordinates to create the link to open the editor
  root: Float3,

  // we'll use this as an example of adding selectable categories to the search UI.
  category: EntityCategory,
  // other properties
  // ...
} 

类别枚举以整数的形式存储,但幸运的是,默认情况下 SerDe 将枚举表示为“外部标记的”,因此它们应该以字符串而不是整数的形式到达 Algolia。我们将使用这个类别属性在 UI 上添加一个“类别选择器”。

为了能够跟踪静态和过程对象,我们可以在对象创建后使用库将对象数据发送给 Algolia。对于这个例子,我们假设一个ObjectContainer::place_entity()用于放置单个对象,在添加一批对象后调用ObjectContainer::placement_done()

// ...
impl ObjectContainer {
  pub fn new() -> Self {
    Self {
      //...
      algolia_sender: AlgoliaSender::new( /* ... */),
    }
  }
  // ...
  pub fn place_entity(&mut self, e: &PlacedEntity) {
    // ...
    self.algolia_sender.add_item(e);
    // ...
  }
  // ...
  pub fn placement_done(&mut self) {
    // ...
    self.algolia_sender.send_items();
    // ...
  }
} 

将数据标记为可搜索

根据文档,要为搜索 UI 设置数据,我们必须告诉 Algolia 要搜索哪些属性才能获得更好的结果:

创建索引时,默认情况下,所有记录中的所有属性都是可搜索的。默认情况下,所有属性都是可搜索的,这使您可以从一开始就执行搜索,而无需进行任何配置。然而,如果您想让您的搜索更相关,并消除干扰,您只需将有意义的属性设置为可搜索的。

对于我们的用例,这种“search all”行为很好,但如果我们想要一种更细粒度的方法,我们可以使用现有的 Algolia API 客户端Algolia 仪表板 ( 注意:嵌套属性(子对象)不能从仪表板添加,只能从 API )。

Algolia Dashboard index screenshot

搜索 UI

Algolia InstantSearch 提供了一种非常简单的方法来为浏览器构建自定义用户界面,让我们可以搜索我们的数据。我们将简单地复制 InstantSearch 入门指南并根据我们的需要进行修改。

我们可以保留大部分布局和 HTML:

<!DOCTYPE html>
<html lang="en">
  <!-- exact same <head> as in the demo -->
  <body>
    <div class="ais-InstantSearch">
      <div class="left-panel">
        <div id="clear-refinements"></div>
        <!-- the only real change is renaming this from "Brands" to "Categories" -->
        <h2>Categories</h2>
        <div id="category-list"></div>
      </div>
      <!-- exact same <div class="right-panel"> as the in the demo -->
    </div>
    <!-- same <script> tags as in the demo -->
  </body>
</html> 

Javascript 也几乎与演示相同,除了设置类别列表而不是品牌列表,并更改显示的点击以包含我们的属性。

这里唯一不同寻常的地方是对 hits 进行了定制,包括一个自定义 URL,它可以打开一个外部编辑器,作为 Algolia 与外部应用程序交互的演示:

<a href="editor:goto:x:{{root.x}}:y:{{root.y}}:z:{{root.z}}">Open in editor</a> 
/* global instantsearch algoliasearch */

const search = // ...same as the demo

search.addWidgets([
  instantsearch.widgets.searchBox({
    container: '#searchbox',
  }),
  instantsearch.widgets.clearRefinements({
    container: '#clear-refinements',
  }),
  // categories instead of brands
  instantsearch.widgets.refinementList({
    container: '#category-list',
    attribute: 'category',
  }),
  // customize the hit display
  instantsearch.widgets.hits({
    container: '#hits',
    templates: {
      item: `
        <div>

          <a href="editor:goto:x:{{root.x}}:y:{{root.y}}:z:{{root.z}}">Open in editor</a>
          <dl>
            <!-- The attributes we're interested in -->
            <dt>Category</dt>
            <dd>{{#helpers.highlight}}{ "attribute": "category" }{{/helpers.highlight}}</dd>

            <!-- ... other attributes -->

          </dl>
        </div>
      `,
    },
  }),
  instantsearch.widgets.pagination({
    container: '#pagination',
  }),
]);

search.start(); 

只需几行修改,我们的基本搜索 UI 就准备好了:我们可以搜索对象,按类别过滤它们,并在外部编辑器中打开对象:

Text editor and basic front-end split-screen screenshot

势更进一步

异步发送数据

Tokio create 为 Reqwest 提供异步支持,可用于实现数据的异步发送。使用异步包装器会使调用从 C / C++导出的函数变得复杂,并且会扰乱其他运行代码的 CPU 内核分配。

重试逻辑

所有 Algolia 客户端都实现了重试失败的请求(并在不同的目标服务器上重试)。在将数据传输转移到异步处理之后,将重试逻辑作为一个单独的层添加是相对容易的。

操纵少弦

虽然我们很喜欢format!连接字符串,但如果 objectID 的生成更像 Rust 就更好了:一个objectID特征和一个好的derive宏对大多数用例来说是更好的解决方案,因为它们允许控制和可重复性,但保持了灵活性。

pub trait objectID {
  fn object_id(&self) -> String;
}

#[derive(Serialize, objectID)]
#[object_id(prefix="something", field="id")]
struct Something {
  id: i32,
}

impl objectID for Other {
  // ....
} 

我们希望你喜欢 Gyula 的这篇深入的文章,如果你正在寻找更多这样的内容,我们在 Algolia 博客上有更多的主题!如果你是 Algolia 的新手,你可以通过注册一个免费等级账户来尝试一下。

Algolia 编码挑战:找出解决方案🔎

原文:https://www.algolia.com/blog/engineering/algolia-coding-challenge-find-out-the-solutions/

感谢所有在节日期间参与❄️ 2021 编码挑战❄️来帮助圣诞老人的人!

祝贺所有提交答案的人,尤其是我们的获奖者——鲁本·金特罗 !🥳

在这篇文章的剩余部分,我将使用 Ruben 的存储库作为例子来介绍每个挑战的解决方案。

我们开始吧!

挑战 1🎤

圣诞老人是《星际迷航》的超级粉丝。他记得他最喜欢的《星际迷航》演员有一次做了一个 Ted 演讲,评分在 800 到 900 之间,被称为讲故事。

那个圣诞老人要去拜访的说话人叫什么名字,(他也是著名的《星际迷航》演员)?

Ted 演讲 数据集有几个有趣的属性可供分面。这里的诀窍是选择哪些要刻面( 标签inspiring _ rating)。

对于这个 解决方案 ,Ruben 使用了 vanilla JS 的 InstantSearch 库。一个可搜索的refinement list允许 Santa 找到“讲故事的” 标签 ,而一个range input过滤器允许他为insipuring _ rating 设置适当的范围。

我们将搜索范围缩小到两个记录,其中一个是竹井乔治,他曾是《星际迷航》系列电影的演员。).

加分题

关于合作和社会,最受关注的 TED 演讲是什么?

《如何识别骗子》

挑战#2📽

当圣诞老人准备他的旅行时,他想起了他的“好”名单上的一个孩子,小布莱恩,要求一部由他计划拜访的男演员和女演员艾米·波勒主演的电影。圣诞老人需要另一个搜索界面来查找这部电影的片名(以及何时上映)。

布莱恩圣诞节想要的电影片名和上映年份是什么?(通过 表单)

电影 数据集对于 Algolia 免费层来说太大了,所以我们需要使用托管版本。重要的是要记住,很多关于分面和相关性的配置发生在索引本身,而不是在查询中。因为我们不管理这个索引,所以我们需要使用配置的方面和可搜索属性。

对于这个 的解决方案 ,鲁本再次使用了一个可搜索的为 演员 。这就很容易找到 2013 年上映的电影 【自由的小鸟】 鲁本为流派增加了一个refinement list和一个 菜单 的发布年份来解决奖金问题。

加分题

2008 年上映的类型犯罪最高评分电影的片名和评分是多少?

7.8854034451496 为《黑暗骑士》

挑战#3🍷

与《挑战#2》电影同年上映的 Fronsac 域波尔多葡萄酒叫什么名字?

我们从 葡萄酒 数据集开始,该数据集存在一些重复记录的问题。每种酒在数据集中出现 16 次!正如布莱恩和我在做这个 挑战 live 时发现的那样,我们需要在将数据导入索引时对其进行重复数据删除。

一旦数据正常化,我们只需添加几个用于 年份领域 就能发现 2013 年唯一一款来自弗龙萨克产区的葡萄酒是 酒庄 Vrai Canon Bouche。

加分题

2010 年 30 美元以下最高评价的葡萄酒是什么?

费朗酒庄

挑战#4 🛩

手里拿着酒,圣诞老人准备开始他的旅程。但是在哪里?他知道他最喜欢的《星际迷航》演员最近进行了以下飞行:

距离上述三个航班最近的美国主要城市是哪个?

对于这个挑战,我们使用了 机场 数据集,但是我们需要结合地图数据来回答这个问题。Ruben 选择使用即时搜索 地理搜索 小部件。这个小部件使用 Google Maps APIs 来呈现地图数据。但是我们也可以为 其他映射 API使用自定义连接器。

根据上面的机场代码过滤,我们发现虽然纽约市附近有两个著名的机场(LGA 和 JFK),但实际上在亚特兰大、佐治亚州、AHN 和 MCN 附近有三个机场。

加分题

离美国卡森国家森林最近的机场是哪个?

洛斯阿拉莫斯机场

挑战#5🎸

圣诞老人记得他还需要为他的“好”名单上的一个女孩挑选另一份礼物。小朱莉想要的圣诞礼物就是 2019 年 8 月 14 日至 8 月 18 日期间在同一座城市演出的音乐家的门票。

朱莉想在圣诞节见到的艺术家叫什么名字?

演唱会 数据集对于 Algolia 免费层来说又太大了,所以我们需要使用托管版本。这个挑战是关于日期的。正如 Bryan 和我在我们的 现场编码会议 中发现的那样,日期很难确定。

Algolia 索引将日期存储为 Unix 时间戳,用于过滤和排名。我们需要建立一个界面,让人类更容易处理这些日期。我们选择使用 Algolia 代码交换 中的日期范围选择器。从那里,只需几个过滤器就能查出这位艺术家是正在佐治亚州莱克伍德切莱里斯圆形剧场演奏的 格莱姆斯

加分题

酷玩乐队 2018 年最后一次演出的城市是哪里?

法国巴黎

结论🎄

感谢冬季编码挑战中所有出色的参与者。我们将保持不和谐的服务器,所以让我们知道你是否想访问。尽管比赛已经结束,但这些仍然是你自己尝试建立的有趣挑战。

Algolia 全体员工祝您节日快乐,新年再见!🎊

在我们的开源代码交换平台上查看相关解决方案。

T51

Algolia 编码挑战:帮助圣诞老人获得灵感!🎅

原文:https://www.algolia.com/blog/engineering/algolia-coding-challenge-help-santa/

又到了一年中的这个时候了!我们很高兴在假期开始新的❄️编码挑战❄️。

🎅圣诞老人已经在家工作了 个月 试图为圣诞节做准备,他觉得他需要休息一下。我们需要帮助圣诞老人在他的伟大旅程开始前获得灵感!

使用 Algolia 搜索和相应的前端库回答下列问题,帮助圣诞老人回到正轨。

对于每位参与者,Algolia 将向 HackYourFuture 慈善机构捐款,这是一个为有才华的难民和其他受教育和进入劳动力市场机会有限的弱势群体提供的免费网络开发项目。

📱获胜者的奖品是一部 iPhone 13 或一部三星 S21,将被放在圣诞树下。

填写 表格 注册挑战,提交您的答案,并获得访问本次比赛的官方 Algolia Discord 服务器的权限。挑战赛的开放时间为 12 月 6 日至 12 月 19 日,太平洋标准时间晚上 11:59。如果你想加入这个挑战,但以前没有用过 Algolia,你可以在这里免费注册

挑战#1🎤

圣诞老人是《星际迷航》的超级粉丝。他记得他最喜欢的《星际迷航》演员有一次做了一个 Ted 演讲,有一个鼓舞人心的评分在 800 到 900 之间,被标记为 讲故事

他最喜欢的《星际迷航》演员的鼓励正是他所需要的!如果圣诞老人不是一个建设者,他什么都不是——也许通过构建一个类似于 的搜索界面,这个演示 他就能找到话题!

看完视频后,圣诞老人很有感触 于是 启发他决定去拜访这位演员!

数据源

Ted 演讲

问题

演讲者的名字是什么, (此人也是著名的《星际迷航》演员),那个圣诞老人要去拜访什么?(通过表单提交)

加分题

被标记为 协作社会 的 TED 演讲中被观看次数最多的是什么?

挑战#2📽

在准备旅行时,圣诞老人想起了他“好”名单上的一个孩子小布莱恩,他要求一部由他计划拜访的男演员和女演员艾米·波勒主演的电影。圣诞老人需要另一个搜索界面来查找这部电影的片名(以及何时上映)。

也许他去见他们的时候可以让演员签一份拷贝!

数据源

**电影 😗*

这个数据集对于 Algolia 免费层来说太大了,所以您可能想直接使用托管版本 ,而不必向您的应用程序推送任何东西。

您可以使用以下凭证:

App ID: latency

API 键: 56f24e4276091e774e8157fe4b8b11f6

指标名称: movies

提问

布莱恩圣诞节想要的电影的 片名**上映年份 是什么?(通过表单提交)

加分题

什么是 片名评分最高的电影2008 年上映的犯罪片?

挑战#3🍷

在所有人当中,圣诞老人不可能不带礼物就出现在他最喜欢的《星际迷航》演员的门口!他决定耍点小聪明,给他们弄一瓶波尔多葡萄酒,产自fron sac领域(演员的最爱),在上述电影上映的同一年装瓶。他想起了一个手边的demo他以前看过的类似的东西。

数据来源

问题

与电影《挑战#2》同年上映的 Fronsac 中的波尔多葡萄酒 叫什么?(通过表单提交)

加分题

【2010 年起 30 美元以下的 最高评级 葡萄酒是什么?

挑战#4 🛩

圣诞老人手里拿着酒,准备开始他的旅程。但是在哪里?他知道他最喜欢的《星际迷航》演员最近进行了以下飞行:

  • ATL → SEA
  • AHN → LGA
  • JFK → MCN

他可以使用这些信息和地图数据(类似于 t 他的演示 ),来计算出明星所在的美国主要城市。圣诞老人会成为一名伟大的侦探!

数据源

机场

问题

最接近上述三个航班的美国主要城市是哪一个?(通过表单提交)

加分题

美国离卡森国家森林最近的机场是哪里?

挑战#5🎸

一旦圣诞老人知道他要去哪里,他就用他的 UberReindeers 应用程序抓住雪橇,上路了!

当他到达这个城市时,圣诞老人想起了他还需要为“好”名单上的一个女孩挑选的另一份礼物。小朱莉想要的圣诞礼物就是 2019 年 8 月 14 日至 8 月 18 日期间在同一城市演出的音乐家的门票。

数据源

演唱会:

这个数据集对于 Algolia 免费层来说太大了,所以您可能想直接使用托管版本 ,而不必向您的应用程序推送任何东西。

您可以使用以下凭证:

App ID: latency

API 键: 059c79ddd276568e990286944276464a

指标名称: concert_events_instantsearchjs

问题

朱莉圣诞节想见到的艺术家的 名字是什么(通过表单提交)

加分题

酷玩乐队 2018 年最后一次 城市 在哪里演出?

结论🎄

成功了!在与他最喜欢的演员(和一点点波尔多葡萄酒)进行了一次鼓舞人心的访问后,圣诞老人感到神清气爽,并为他的大日子做好了准备。他还能在最后一分钟完成圣诞购物,这总是一个额外的奖励!

感谢帮助圣诞老人,感谢帮助他人通过 向本次编码挑战提交您的答案 。祝你假期愉快,新年再见!🥳

编码挑战官方规则

编码挑战的正式规则可在这里获得。通过参加编码挑战,您同意 Algolia 编码挑战的官方规则。

了解 Algolia 即将举办的 DevCon 2022 -到时见

原文:https://www.algolia.com/blog/engineering/algolia-devcon-2022-highlights/

为了帮助您规划您的会议,我们邀请了 Algolia 开发者倡导者 Chuck Meyer 和 Michael King 向我们介绍他们最期待在今年的 DevCon 上看到的会议和研讨会。

顶镐

1.主题演讲(太平洋标准时间 9 月 14 日上午 8 点)

Algolia DevCon Keynote speaker Bernadette Nixon

我们确信这个最佳选择并不令人惊讶。在今年的主题演讲中,首席执行官 Bernadette Nixon 和产品团队将带领我们了解 Algolia 对开发人员体验的愿景,并通过一个不断发展的演示展示新功能。

2.演示实验室(太平洋标准时间 9 月 14 日上午 8 点到中午 12 点)

如果没有现场编码会议,开发者大会会是什么样的?Algolia 的工程师将在周三全天主持一系列现场演示,并通过聊天回答问题。Chuck 对推荐演示特别兴奋,它延续了主题演讲中的概念。

3.在一个遥远的世界中扩展文化(太平洋标准时间 9 月 14 日上午 9:50)

Algolia DevCon scaling culture Ricky Robinett

构建和导航文化可能很棘手,而且随着越来越多的开发人员转向远程优先的环境,它只会变得越来越复杂。在这次演讲中,Twilio 文化传播副总裁 Ricky Robinett 分享了几个故事,这些故事教会了他文化如何走向正确的道路,或者走向错误的道路。在这个演讲的最后,你将带着三个不同的文化领域离开,在你作为一个开发者的旅程中,你可以关注这些领域。

4.新的 Algolia CLI 将告别手工操作(太平洋标准时间 9 月 14 日上午 11:50)

介绍官方的 Algolia CLI——一个功能强大的轻量级开发工具,用于直接从命令行管理您的 Algolia 应用程序。Michael 喜欢 CLI 帮助您操作索引的方式——修改配置、创建设置快照等等!参加本次会议,了解 Algolia CLI 的功能。

5.搜索和发现研讨会(太平洋标准时间 9 月 15 日上午 8 点到中午 12 点)

唯一比看别人写代码更好的事情就是自己动手写代码!周四,我们将举办一系列研讨会,帮助您提升使用 Algolia 的最佳实践。无论你是在使用 Next、js、vanilla JavaScript,还是在 Flutter 中构建移动应用,我们都为你准备了一个研讨会!

6.交付卓越的开发者体验(太平洋标准时间 9 月 14 日上午 11:30)

Algolia DevCon developer experience Sarah Dayan

什么是开发者体验(DX)?让我们深入了解 Algolia 员工工程师 Sarah Dayan 发表的见解,她自 2021 年 6 月以来一直主持 DX 播客。向 Netlify、Vercel、CodeSandbox 和 Tailwind Labs 等行业领导者学习他们如何定义伟大的 DX,以及如何利用它来脱颖而出。

7.开发者真正在寻找什么?(太平洋标准时间 9 月 14 日上午 10:30)

有没有想过其他开发人员在搜索开源库时会输入什么?在这个有趣的互动演讲中,创始人 Lior Grossman 讲述了 Openbase 团队在扩展到 Algolia 的数百万用户时从搜索分析中学到的五个花絮。

8.个性化引擎的七大功能障碍(太平洋标准时间 9 月 14 日上午 8:50)

个性化——客户体验的圣杯。每个人都在谈论它,但很少有人真正知道如何正确地做它。有一个很好的理由:个性化不是一个勾选框练习。这是一项复杂的任务,因为每个用户都是独一无二的,需要尊重他们的隐私,同时还要提供个性化的体验。这是一个学习会议,探讨个性化引擎的七个最常见的功能障碍以及克服它们的策略。

其他精彩会议

很难缩小列表的范围,所以这里列出了一天中你会发现的所有其他精彩会议:

增进理解:未来的语义搜索(太平洋标准时间 9 月 14 日上午 10:10)

语义搜索是未来,但它是现在吗?在这个演讲中,我们将了解语义搜索的内容,透过宣传来看看它真正能做什么,并了解它如何有助于更好地理解用户的搜索。

借助连接器和流程加快您的实施(太平洋标准时间 9 月 14 日上午 11:10)

想要快速启动您的 Algolia 实施吗?想让别人来处理您的数据更新和同步吗?在本次讲座中,我们将介绍我们即将推出的两个数据功能:连接器和流,它们将帮助您提取和转换数据,并自动将其加载到 Algolia 中。

即时搜索,从 7 年前推出到今天(太平洋标准时间 9 月 14 日上午 9:10)

一个伟大的搜索引擎没有一个伟大的用户界面,用户可以很容易地互动,查找和探索。在本次演示中,我们将回顾 Algolia InstantSearch 的 7 年历程。我们将探索我们已经走了多远,以及前端开发人员构建世界级搜索和发现体验的未来。

你可以在 DevCon 2022 网站上查看完整议程,当然还有注册,这样我们就能在那里看到你了!

Algolia DevCon:开发者如何构建应用程序

原文:https://www.algolia.com/blog/engineering/algolia-devcon-the-making-of-the-dev-builds-videos/

2022 年 9 月 14 日和 15 日,Algolia 举办了一场名为 DevCon — 的会议,点击 查看会议摘要并观看演示视频。有很多精彩的演讲,比如 OpenBase 的高级开发人员讲述了他们在构建他们非常受欢迎的服务时学到的五个教训,以及 Algolia 的产品经理 Alexandre Collin 向我们介绍了 InstantSearch 的发展。在我们通过设备观看的任何大型活动中,广告也是节目的一部分!因此,如果你想了解并观看由开发者社区成员制作的很酷的项目——开发构建——我们在 DevCon 的主要演讲之间溜了进去,那么请继续阅读!

安东尼—管弦乐队搜索

https://www.youtube.com/embed/_C9PMLr_XC8?feature=oembed

视频

Anthony 是 RedwoodJS 项目的核心维护者,也是 QuickNode 的开发者拥护者。在学习 web 开发之前,他是一名音乐老师(tech 里似乎有很多人有音乐背景),所以 Anthony 一直有创造性解决问题的头脑。

我敢肯定,我们这些音乐世界之外的人都想知道管弦乐队在这一点或那一点上是如何工作的,所以安东尼开发了一个应用程序来帮助我们搜索管弦乐队中的不同乐器,它们所属的类别,以及它们可以击中的音符。您可以在这里找到open index——将 JSON 上传到任何 Algolia 应用程序中,开始试验,甚至在您拥有自己的任何数据之前。

阿什利—电子商务聊天机器人

https://www.youtube.com/embed/61r_YZn5x84?feature=oembed

视频

Ashley 是 RenderATL 的开发者拥护者,也是 Mux 的社区工程师。作为一名社会学家和 Pinterest、Tumblr 和 Mailchimp 的校友,她完全有能力建立真正帮助人们并让我们感觉良好的技术。

对于 Algolia DevCon,她建立了一个带有商务的复古奢侈品寄售店原型。JSReact Simple ChatbotAlgolia 让时尚感触手可及。该店面页面包含一个聊天机器人,作为一个更具交互性的搜索工具,允许用户流畅地描述他们的风格,机器人会推荐一些符合用户特定审美的商品。它的工作原理是从用户发送给聊天机器人的消息中分离出关键词,并将 Algolia 搜索结果动态加载到该窗口中,使客户能够灵活地找到符合其抽象风格的内容,而无需通过品牌名称或其他特定限定符进行搜索。

Ashley 面临的最大挑战之一是同步商业中的产品库存。JS(客户会看到它显示在店面上)和 Algolia 中的搜索索引(聊天机器人正在搜索的内容)。解决这个问题的一个方法是使用 Algolia Commerce。JS 官方集成,这消除了数据管道的复杂性,但她选择了自己与定制商务合作。每当产品数据库改变时触发 Algolia 索引更新的 JS webhook。一个工具组合能力的伟大展示!

Trezy—Twitch Bot

https://www.youtube.com/embed/Sq_9YoM1im4?feature=oembed

视频

Trezy 是一个流行的编码直播流和串行开源贡献者,尤其以他的项目 fdgt.dev 而闻名,这是一个 API,所以测试和调试 Twitch 应用程序实际上不会掏空我们的钱包。

对于 Algolia DevCon,Trezy 构建了一个 Twitch 机器人来与 DocSearch 进行交互,以便将文档信息提供给流媒体观众,而无需他们离开 Twitch。该应用程序有三个命令,它们协同工作,在支持文档搜索的文档网站中查找内容,然后对结果进行分页。对于聊天版主来说,这是一个有用的工具,因为它可以让他们轻松地解释流中正在发生的事情,以及观众如何在家跟随,即使没有以前的经验。

如果您有兴趣了解 Algolia 如何工作,以及您可以在您的团队中使用它做什么,这就是 DevCon 的其余部分!在 YouTube 上看看这个播放列表,观看完整长度的演示和演示,如果您有任何具体问题,请随时在 Twitter 上联系我们

直到明年,

Algolia DevCon 团队

DevTool 简介:Algolia CLI!

原文:https://www.algolia.com/blog/engineering/algolia-devtool-introduction-the-algolia-cli/

Wake up Neo...

我们需要您为我们的药品索引重置配置!我们对高亮设置进行了修改,现在查询“红色药丸”的结果被高亮显示为蓝色,这真的非常令人困惑…

此外,我们有点担心所有经历过的现实都可能是机器运行的模拟,以奴役人类!

不过请先修复索引!

哦,伙计,你们不都喜欢在周一日出前被叫醒做这些事情吗?在理想情况下,这将是一个快速解决方案。随着我黑色风衣的挥动,我会从床上滚下来,蹲在房间中央,手里拿着笔记本电脑。我会按回车键跳过白兔,忽略敲我的门。我会用一只手调整太暗的夹鼻眼镜,而另一只手在几秒钟内发出命令。一些简短的,甜蜜的,中肯的。大概是这样…

algolia settings import prod_pharmaceuticals_index -F pharm_settings_snapshot.ndjson

看了一眼终端,显示出愉快的反应:

✓ Imported settings on prod_pharmaceuticals_index

很好……那么关于机器奴役人类的另一件事是什么?

——

迎接阿洛利亚 CLI!

如果你和我一样,命令行是你的朋友和信任的盟友。无论我是在测试一个快速的 API 调用还是在我最喜欢的 IDE 中编码,使用命令行都能让我流畅地迭代。此外,我喜欢通过命令行界面(CLI)做的任何事情都可以轻松地编写脚本并安排在我喜欢的任何时间运行。在我的 CLI 工具箱中有一套强大的工具,解决问题和自动化解决方案就像在公园里散步一样容易。

这就是为什么我们如此激动地宣布全新 Algolia CLI 工具的公开测试版发布,完整版即将推出!T31

Algolia CLI 使上传索引、自动化常见仪表板操作或保存和重新加载您的配置快照成为可能,只需通过命令行即可实现!不需要 API 客户端!

那么我该如何开始呢?别担心,您不必为此访问 oracle 开始使用 Algolia CLI 轻而易举!

如果你在 MacOS 上,只需在终端中运行以下命令,使用 homebrew 安装该工具:

brew install algolia/algolia-cli/algolia

想戳代码自己造?Algolia CLI 是完全开源的,在麻省理工学院的许可下,存在于一个公共的 github 存储库中(你可以在这里 找到 )!

Linux 和 Windows 版本即将发布!

让我们来看看一些具体的使用案例,看看 Algolia CLI 如何让您的生活变得更加轻松,这样您就可以专注于拯救世界了,明星!

——

示例#0:使用情景模式设置您的活动 Algolia 应用程序

任何 Algolia CLI 命令均可通过 --admin-api-key [string]--application-id [string] 标志调用,以指定与哪个应用程序交互。为了使您能够发出命令,而不必总是在剪贴板中拖动 api-keys 和 app-id,您可以使用下面的命令来注册一个默认的概要文件。

algolia profile add --name [string] --app-id [string] --admin-api-key [string] --default
✓ Profile 'test_pharm_app' (##APP#ID##) successfully added and set as default.

当没有提供配置文件或 API 密钥/应用程序 ID 对时,--default标志告诉 CLI 在将来的命令中使用哪个应用程序。一次只能将一个应用程序设置为默认。花时间注册个人资料可以让未来的互动更加流畅,尤其是在使用 2 个或更多 Algolia 应用程序时。

您也可以通过运行来交互提供该命令的字段

algolia profile add

然后,该工具将提示您输入每个字段,一次一个,并根据指定添加应用程序。

要查看所有添加的应用程序列表,只需运行:

algolia profile list
NAME                  APP ID      NUMBER OF INDICES  DEFAULT
test_pharm_app        #APP#ID#1#  2                  ✓
playground_pharm_app  #APP#ID#2#  1
prod_pharm_app        #APP#ID#3#  15

牛逼!我们在这里看到我们添加了多个 Algolia 应用程序,应用程序 test_pharm_app是我们的默认应用程序!

注:应用简介保存在~/.config/algolia/config.toml

让我们上传一些数据吧!

——

示例#1:创建索引并从文件上传记录

我想创建一个新的索引,给它一个相关的名称,并从本地系统上的一个文件中上传记录。CLI 能处理这种情况吗?当然可以!

algolia objects import new_index_name -F ./path_to_file.ndjson

您是否注意到我们既没有指定应用 id、api 密钥,也没有指定应用配置文件?在这种情况下,CLI 将根据默认应用程序(即上一步中指出的 test_pharm_app)进行操作。

我们还可以将-F 标志替换为- ,通过 stdin 将内容传递给 CLI 进行上传。让我们一起用管道发送一些命令吧!以下命令产生与上一个命令相同的结果(读取文件并将内容上传到指定的索引),但是使用 cat 将文件的内容传递到 CLI 工具的 stdin ,而不是将文件路径作为参数传递。整洁!

cat ./path_to_file.ndjson  objects import new_index_name -F -

什么是 ndjson? 换行符分隔的 JSON 是 Algolia CLI 读取和写入文件的格式。这意味着,任何将 ndjson 格式的数据作为输出传递或作为输入接受的命令都可以与 Algolia CLI 命令连接在一起!我们将在下一个例子中看到更多

例 2:管理索引设置快照

到目前为止,我们已经将 CLI 连接到我们的 Algolia 应用程序,并将一些数据上传到一个索引中!让我们更进一步,拍摄索引设置的快照,以便将来可以将它们恢复到健康的检查点。

哪些指标存在于我们默认的 app 中, test_pharm_app?

algolia index list
NAME               ENTRIES  SIZE    UPDATED AT  CREATED AT  LAST BUILD DURATION  PRIMARY  REPLICAS
pills_treatments   1,000    100 kB  1 day ago   1 day ago   2s                            []
pills_cures        0        0 B     2 days ago  2 days ago  3s                            []

让我们将索引 pills_treatments 的设置保存到系统上的一个文件中。

algolia settings get pills_treatments > ./pt_settings_snapshot.ndjson

快照已创建!现在,恢复到快照非常简单…

algolia settings import pills_treatments -F ./pt_settings_snapshot.ndjson
✓ Imported settings on pills_treatments

我们还可以在一行中将设置从一个索引转移到另一个索引!让我们将 pills_treatments 指标的设置复制到 pills_cures 指标中!在导入命令中,我们将使用 -F 标志后的 - 值来告诉 CLI 从 stdin 而不是指定的文件中读取输入。

algolia settings get pills_treatments  settings import pills_cures -F -
✓ Imported settings on pills_cures

简单!还有一个场景…我们已经在测试应用中的所有指数上测试过了,现在我们准备将这些设置迁移到我们的生产应用中!我们将 prod_pharm_app 配置文件中的 pills_treatments_prod 索引作为目标。

algolia settings get pills_treatments  settings import pills_treatments_prod -F - -p prod_pharm_app
✓ Imported settings on pills_treatments_prod

你开始相信了,是吗?

——

示例#3:执行 Algolia 任务的 CI/CD 管道

这是事情开始变得真正令人兴奋的地方。考虑以下工作流程:

  1. 一个数据库包含你的数据。
  2. 自动脚本每晚运行,根据数据库中的数据生成索引。
  3. 一个自动脚本将该索引上传到 Algolia。

整齐!酷!方便!让我们改变这一点。我们会把事情搞砸一点。我们把一只虫子推到刺戳处怎么样?

  • 工程师 Anderson 负责执行数据库迁移。他创造了改变!
  • 工程师贝基负责审阅变更,她说 LGTM!
  • 变更已提交!
  • CI/CD 管道将更改应用于测试数据库。没有错误!数据库迁移测试通过!
  • 更改将应用于生产数据库。没有错误!数据库迁移测试通过!
  • 工程师安德森面带微笑地签了字,回家,并帮他的女房东倒垃圾。

那天晚上,当工程师安德森睡得正香,梦见在飞行中的直升机下面晃来晃去时,灾难降临了!

  • 自动索引脚本在夜间运行,根据数据库中的数据生成索引。
  • 然而,数据库迁移转换了该脚本使用的字段。
  • 输出索引缺少重要的搜索属性,但上传成功。
  • 搜索格式错误的索引会产生不准确和不相关的结果。哦不!
  • 直到 3 天后,随着搜索指标下降,问题才被发现。工程师 Anderson 又花了一天时间回滚更改并修复索引。

对此能做些什么?你如何防止这种混乱再次发生?

如果 DB changes 在 CI/CD 管道中运行了一些简单的查询测试用例会怎么样?每一个变化都会立即生成一个索引,并针对它启动一系列测试查询。工程师 Anderson 的更改会使 CI/CD 管道失败,因为它会产生与预期不同的查询结果。只需创建一些测试用例以及一个简单的脚本,针对这些测试用例运行 Algolia CLI 的 algolia search 命令,就可以提前检测到这个问题!

让我们配置一个这样的测试用例!当索引正常工作时,我们可以执行测试查询并保存结果。保存的数据是我们的“预期结果”,我们将根据它来比较后续查询测试的结果。我们将在前一个例子的索引中搜索“蓝色药丸”:

algolia search pills_treatments_prod -p prod_pharm_app --query "blue pills" > blue_pills_expected_results.ndjson

爽!我们有一个查询“蓝色药丸”的测试用例!让我们在测试 app 中的 pills_treatments 索引上运行这个, test_pharm_app ,看看是否匹配。

algolia search pills_treatments -p test_pharm_app --query "blue pills" > blue_pills_actual_results.ndjson && diff blue_pills_expected_results.ndjson blue_pills_actual_results.ndjson | wc -m
0

我们查询测试索引并保存结果。然后,我们通过调用 diff 命令将预期结果与实际结果进行比较,该命令只输出两个文件之间的差异。最后,我们将 diff 的输出传送到 wc -m 命令,该命令计算 diff 输出中的字符数。我们观察到输出为 0,这意味着两个文件之间没有差异,这表明我们的查询在两个索引中产生了相同的结果,并且我们的查询测试通过了!

按照这些思路,非零输出意味着这两个文件中存在一些差异,我们的查询测试未能在两个索引中产生相同的输出。

这只是如何将 Algolia CLI 集成到 CI/CD 管道中的一个例子。想象一下,使用索引设置管理工作流将营销团队设置的仪表板配置设置提升到生产应用程序。然后,促销可以调用一系列查询测试来验证更改,瞧!CLI 也成为您的业务用户的力量倍增器! 使用 Algolia CLI 自动执行任务,改善您的工作流程,并保持您的搜索体验无缝运行,即使您正在更改和开发内容!

——

参与进来!

我们已经看到,Algolia CLI 几乎可以处理任何事情,从索引上传等简单操作到快照恢复等更复杂的工作流。请继续关注我们推出的更新,并进一步扩展 CLI 的功能,让您作为 Algolia 开发人员的生活更加轻松!

请记住,Algolia CLI 处于公开测试阶段!在 MacOS 上,用自制软件安装:

brew install algolia/algolia-cli/algolia

Windows 和 Linux 安装程序即将推出!

或者, 克隆 GitHub repo 自己构建!

想了解更多?查看官方 CLI 文档获取指导教程!

别忘了在你的日历上标记 9 月 14 日至 15 日!Algolia DevCon 快速接近。我们将重点介绍 CLI 工具并展示其功能!开发者体验团队将在那里主持现场 Q & A,回答你所有的问题。你不会想错过的!

——

弃用建议–在创建这个 CLI 之前,我们有一个 npm Algolia CLI 包提供类似的功能。传统 CLI已弃用——今后我们将不再维护/更新/支持它。但是,我们不会从 npm 中删除该包(因为客户仍在使用它)。相反,我们已经宣布弃用传统 CLI GitHub 回购(并将回购重命名为“algolia-cli- old ”),并将客户重新定向到新 CLI GitHub 回购

Algolia 推进 API 优先的软件开发;D 轮融资 1.5 亿美元,估值飙升至 25.5 亿美元

原文:https://www.algolia.com/blog/algolia/algolia-funding-news-2021/

公司估值自 C 轮融资以来翻了近两番;超增长强调了市场对提供实时动态体验的可组合 API 的需求

旧金山,7 月 28 日 ,2021—Algolia,领先的 API 平台,用于搜索&动态体验,已完成 1.5 亿美元的 D 轮融资,由 Lone Pine Capital 领投,后估值为 225 亿美元。该轮融资还包括来自 Fidelity Management&Research Company LLC、STEADFAST Capital Ventures、Glynn Capital、Twilio 以及现有投资者,包括 Accel 和最新一轮融资使 Algolia 的总融资额达到 3 . 15 亿美元。

Lone Pine Capital 表示:“Algolia 通过一种 API 优先的方法为开发人员提供搜索和内容发现,这种方法可应用于 SaaS 应用程序、电子商务以及企业应用程序。“这意味着开发人员可以更容易地在 Algolia 的 API 上构建数字体验,而不是实施和维护复杂的后端。这种新的软件开发方式改变了企业的游戏规则,帮助他们快速适应客户不断变化的需求。”

这项最新投资反映了 Algolia 的高速增长,这是由对提高开发人员生产力的“构建模块”API 软件的需求、电子商务的增长和数字化转型推动的。

“未来是 API 第一 Twilio、Stripe、Algolia 和其他 API 经济体的增长强调了这一现实。我们成功的很大一部分已经并将继续是我们通过 PLG 战略对开发者的不懈关注——使他们能够在自己的网站和应用中构建搜索,从而创造最相关和最动态的数字体验。”Algolia 首席执行官 Bernadette Nixon 说,“我们很高兴能够继续解决客户的问题,因为我们继续通过 Algolia 推荐和预测扩展搜索范围。”

这笔额外的投资使 Algolia 能够扩展和满足对公司搜索和推荐产品的不断增长的需求,并推动公司继续向邻近市场和用例扩展产品。

Berandette Nixon 继续说道:“软件的神奇之处在于,你可以不断地对它进行迭代,Algolia 的 API 优先方法确保公司可以构建令人惊叹的体验和优秀的数字产品,并创造一个持续改进的循环。“安德玛、NBC Universal、Société Générale、Stripe 和许多其他公司都在采用这种方法,赢得了客户的心、思想和钱包。

未来是动态的、个性化的、API 优先的

公司开发软件的方式已经改变。高瞻远瞩的公司已经意识到,基于不透明的 SaaS 解决方案的应用程序缺乏灵活性,老式的单一平台可能成本高昂、耗时且过时。Algolia 已经超越搜索领域,成为一家多产品公司,通过其 API 平台让开发人员能够创建可组合的应用程序,为消费者和员工实时提供丰富、个性化和动态的数字体验。

新公司愿景,助推创新

新一轮融资为具有里程碑意义的一年画上了句号,这一年见证了显著的增长和产品创新。Algolia 的目标是创建快速、即时、相关的搜索和发现体验,快速提供所需信息。今年早些时候,该公司 宣布了其对动态体验的新愿景,超越搜索,使企业能够实时、实时、即时地快速预测访问者对其数字财产的意图。有了这种访问者意图,企业可以以搜索结果、推荐、优惠、应用内通知等形式呈现动态内容,同时遵守隐私法律法规。

与此同时,在过去的 18 个月里,该公司的高管团队中增加了七位领导人,分别是伯纳黛特·尼克森(首席执行官,前 Alfresco)的 任命 ,此外还有米歇尔·亚当斯(首席收入官,前 Dropbox)、卡尔顿·巴布(首席财务官,前 Alfresco)、皮尤什·帕特尔(首席业务发展官,前凯捷)、吉姆·沙丁(首席客户官,前 Alteryx)、杰森·麦克莱兰(首席

关于阿尔戈利亚

Algolia 为动态体验提供了一个 API 平台,使组织能够预测意图并交付结果。Algolia 通过 API 优先的方法实现了这一点,该方法允许开发人员和业务团队在需要时展示相关内容,满足即时满足的需求,并构建和优化在线体验,以增强在线参与度,提高转化率,丰富终身价值,从而实现盈利增长。包括安德玛、Lacoste、Birchbox、Stripe、Slack、Medium 和 Zendesk 在内的 10,000 多家公司依靠 Algolia 每年管理超过 1.5 万亿次搜索查询。Algolia 的总部设在旧金山,在纽约、亚特兰大、巴黎、伦敦和布加勒斯特设有办事处。欲了解更多,请访问 www.algolia.com

联系人:

香农·坎贝尔

Algolia 的休假

algolia@offleashpr.com

阿尔戈利亚现在是 ISO 27001 和 ISO 27017 认证

原文:https://www.algolia.com/blog/product/algolia-is-iso-27001-and-iso-27017-certified/

从早期开始,Algolia 就将信息安全和隐私视为头等大事,并引以为豪。我们有一个高度专业化的团队,完全致力于安全,我们的服务器位于遵循最高行业安全标准的数据中心,我们的基础设施受到多层访问控制的保护。我们通过公共奖金计划和定期 pen 测试进行持续的安全测试,并通过了 SOC 2 认证。

除了这些成就,今天我们还自豪地加入了 ISO/IEC 27001:2013 和 ISO/IEC 27017:2015 认证。

ISO 27000 认证有哪些?

处理我们客户的数据和我们公司的数据是我们业务的核心。为此,我们遵守一系列信息安全标准,这些标准规定了我们如何驾驭我们的环境、我们的要求和我们的限制。

ISO 27000 是国际公认的标准系列,概述了管理信息安全和隐私的最佳实践。

更具体地说,ISO 27001 帮助组织管理第三方委托的服务、数据、知识产权或任何信息的安全。它正式规定了信息安全管理系统(ISMS):一组定义的策略、过程和系统来管理组织数据。

ISO/IEC 27017:2015 业务守则旨在供组织在选择和实施云服务信息安全控制时作为参考,并解决特定于云的信息安全威胁和风险。例如,它定义并管理:

  • 云计算环境中的共享角色和职责
  • 保护客户的虚拟环境并将其与其他客户的虚拟环境隔离开来
  • 满足业务需求的虚拟机强化要求
  • 云计算环境的管理操作过程
  • 使客户能够监控云计算环境中的相关活动
  • 虚拟和物理网络安全管理的一致性
  • 合同终止时云服务客户资产的移除和返还

这对我们的客户意味着什么

据《福布斯》报道,到 2021 年,全球每年的网络犯罪成本预计将超过 6 万亿美元,使敏感的消费者和公司信息的安全成为一个重要的商业话题。我们相信这是我们为客户提供的价值的重要组成部分。选择构建自己的搜索解决方案的公司也必须实施自己的安全实践,并且有许多公司在这方面做得不够好的数据安全漏洞的例子。

简而言之,我们希望您的数据尽可能安全。纳入这些最新的安全标准对处理和处理大量个人身份信息的大型企业尤其有价值:银行、医疗保健和电子商务公司,但也会使各种规模和行业的公司受益。

一如既往,请不要犹豫向我们提出任何关于这个或其他安全主题的问题:security@algolia.com

阿尔戈利亚女性领导者给科技行业女性的建议:第一部分

原文:https://www.algolia.com/blog/algolia/algolia-leaders-women-in-tech/

在纪念最近的 妇女平等日、 时,我们想我们应该按下暂停键,看一眼阿尔戈利亚的女性领导。我们询问了女性领导者的职业道路,她们面临的挑战,她们将与其他女性分享的建议,以及是什么让 Algolia 成为一个伟大的工作场所。

总裁贝尔纳黛特·尼克松

伯纳黛特于 2020 年 5 月加盟阿尔戈利亚。

伯纳黛特的 CEO 之路。 我绝对是一名首席执行官,从业务的 GTM 方面走出来,主要是在销售和销售领导方面。但我也接受了轮岗任务来充实我的经历,从管理一大块市场营销到 IT 领导角色。这使我能够穿着我的营销同事的鞋子(这对任何销售领导来说都是无价的)和我的一些客户的鞋子走路。我想你可以说我一直在寻找交叉机会,例如,了解销售和营销方面的第一手资料,或者在美国提供欧洲视角,反之亦然,因为我拥有英国、爱尔兰和美国三种国籍。

销售一直是而且仍然是一个男性主导的领域。多年来,我是团队中唯一的女性,也是最年轻的。那从未阻止我。

论通向成功的激情。 了解自己。太多时候,我们被一时的冲劲冲昏了头脑,我们的职业生涯可以自行发展。当我住在瑞士为联合国工作时(我谈到的那些轮换职位之一),我足够幸运,能够花时间,坐下来,分析我在工作中最快乐的时候。这听起来可能很明显,但是当你深入思考你在工作中最快乐的时候,以及环境、任务和工作本身的特点,你会发现非常重要的细微差别。这使我能够非常清楚地定义是什么让我对我的工作充满热情。不是我自己做的,我用了 这本书来指导我,你的降落伞是什么颜色 。这让我改变了我工作的国家、行业和角色,这也是我来到美国的原因。

因此,为了你的激情和你热爱的事情来解决你的职业问题,并且具体而实际地了解它到底是什么。当然,我很想成为一名宝石学家,但是你知道吗,那并不能支付我的账单,事实上,我非常喜欢销售,帮助别人,从而建立一个企业。

当一个问题解决者还不够的时候。 我有过许多伟大的导师和经理,有男有女,没有他们我不会有今天。不过,我恐怕要说,我有一次不希望发生在任何人身上的经历。直到很久以后,我才意识到这是什么,但我猜你会称之为性别歧视。我这样说,是因为当人们的差异出现分歧时,我总是感到震惊,而不是通过探索和学习将我们聚集在一起。无论如何,作为一个解决问题的人,当我处于这种情况中时,我运用了我解决问题的技巧。我没有意识到的是探戈需要两个人。当我终于受够了痛苦,我在某种意义上醒来,并决定继续前进。恢复我的力量令人振奋。这是一种罕见的情况,我做了正确的事情,减少了损失,继续前进,我只希望我早点这样做。

伯纳黛特对女性的职业建议:可以 独辟蹊径。承担风险,接受困难的任务。这样我学到了最多,收获也最大。

在领先的阿尔戈利亚上。我喜欢我们的三个核心价值观——谦逊、坦诚和关心——如何结合在一起形成信任,我认为这是基础。我曾在坦诚但充满对抗的环境中工作过,我知道通往长期成功的更好途径是建立信任和良好的关系。我对我们在 Algolia 正在建设的东西感到非常兴奋,无论是产品还是文化。

阿达内奇·格塔丘,总顾问

Adanech 在 Algolia 工作了 3.5 年,是 Algolia 高管团队中的第一位女性。

她今天的地位: 法律行业,至少在我开始的时候,并不是非常多样化。对我来说,成为团队中唯一的女性是很平常的事情——但那是“正常”的,当时我并没有想太多。我的方法是,也一直是,保持开放,做一个完美的学习者。好奇、倾听、理解业务目标,以及以解决方案为导向是我实践的基石。阿尔戈利亚是我探索领导力的合适地方。

让法律和合规成为业务不可或缺的一部分。 通常,对法律功能的看法是,它的存在是为了使事情变得缓慢和复杂;我面临的挑战是通过提供及时、创新和可扩展的解决方案来改变这种看法,并因此带领法律团队成为企业不可或缺的一部分。让其他职能部门依靠我们,向我们看齐,并与我们合作,为复杂的问题提出可行的解决方案,这是我衡量我们的成功以及我们为组织带来的价值的一种方式。

她给即将晋升的女性的建议是:对你所学到的东西、你的经验、你的专长,总之,对你自己要有信心。你赢得了现在的地位。

注意并积极为自己辩护,尤其是在强调你的成就时。我们中的很多人,不管是教养还是文化的结果,都努力工作来超额完成任务,但却不突出自己的成功。我们希望并期待我们的领导人注意到我们带来了什么。我花了很多年才明白这不是一个好方法。你的工作产品可能是其他一切的基础的一部分,但是这可能不容易被你的领导看到。找到一种方式来适应为自己辩护。

最后但同样重要的是,在你的职业发展中扮演积极的角色。不要等别人来定义你的角色。弄清楚你想要什么,做你的研究,并制定一个计划来帮助你实现你的目标。当你有明确的目标时,很容易发现你何时偏离了目标,何时需要做出调整。

她不想让其他女人重蹈覆辙。在过去的工作中,有时候我希望自己能早点说出来。如果任何事情违背了你的正直、你的组织的正直和价值观,大声说出来——为了你自己、你的团队和那些站在你后面的人。畅所欲言不同于我们许多人联想在一起的“难以启齿”,而是选择保持沉默。你可以非常尊重对方,但仍然说:“这种行为不符合我们的文化”,并要求改变。这样做也是学习成为领导者的一部分。

关于导师: 在你所选择的领域里,从你尊敬的人中寻找导师。 师徒关系不一定要正式;向在你的职位上处于更高位置的人伸出援手,或者在你下一步打算晋升的职位上。可能就像你公司里的某个人一样简单。询问他们的建议,他们希望尽早知道的事情,以及什么会使他们的道路更容易。与你工作中的其他人(无论是你的上司、其他高层人士还是同事)甚至是公司以外的人建立联系,这将导致其他人投资你并保护你。当我回顾所有塑造我职业生涯的机会时,大多数都是来自高级合伙人、高管或领导的指导和指引,这是我为他们或公司其他人努力工作所建立的声誉的结果,这激发了他们各自对我的兴趣和投资。

克里斯蒂·罗登布什,首席人事官

克里斯蒂于 2019 年 6 月加入我们。T13

在她的职业道路上。我把我的职业生涯建立在一个有点不寻常的性格特征上:我喜欢改变。我从人力资源咨询开始,在那里我发现自己对变革管理充满热情。从本质上来说,人力资源是关于转变业务和帮助人们和团队成长的,这就是为什么我真正热爱我的工作,也是为什么我能够在这方面表现出色并取得今天的成就。从根本上说,我做我所做的事情是因为我相信人们可以改变,我想营造有助于改变的环境。

关于个人和职业发展 我把真正让我前进的大部分归功于我的导师们——事实上,他们的反馈比我当时感到舒服的要坦率一些。反馈 一份礼物:如果我要建议一件事,那就是我们所有人都要学会如何接受反馈,并学会如何以一种向接受者揭示盲点的方式给予反馈。关心和坦诚之间的微妙界限很难完美,但这是唯一的出路。

她(高管)成功的秘诀。我鼓励我的同事每天都抱着成长的心态。对于对我重要的事情,我直言不讳,有时非常大胆。我们在寻找领导阶层的多元化候选人方面取得了巨大进展,并加倍努力开展 D & I 计划和招聘工作。不用说——我不认为这是我独有的——人力资源需要数据驱动。员工,甚至比你的首席执行官更明白这种谈话是廉价的。他们想要可衡量的结果。

在她的下一个挑战中,效率和快速行动是我的基因,以至于我最近将注意力转移到我的许多发展领域中的一个。我正在加强我的情景领导技能——更好地根据环境和个人定制我的风格,更有耐心和当下,让我感同身受的一面更经常地展现出来。

为什么你应该来为 Algolia 工作,因为这里有大量的空间来创造伟大的事物,发现问题并解决它们——这实际上是发展你职业生涯的最佳方式之一。作为女性,我们看待事物的方式不同,这是一个包容不同想法的人的环境,我们接受尊重的实话实说者。最后但同样重要的是,这个类别和产品有巨大的潜力。在世界级的销售执行、产品、营销和利用所有能够推动市场扩张的市场周边方面,我们仅仅触及了皮毛。

阅读第二部分,我们将与工程、收入和招聘部门的领导进行交流。

Adobe 体验管理器上的 Algolia 支持的搜索组件

原文:https://www.algolia.com/blog/product/algolia-powered-search-components-on-adobe-experience-manager/

当有人访问一家数字企业时,第一印象非常宝贵。要么他们被自己看到的东西所吸引,想要进一步参与——要么他们从网站上退下来。数字 b 企业必须展示与用户意图相匹配的内容,个性化的内容,与该周相关的内容,并与他们的商业战略保持一致。他们必须分析如何充分利用他们的网站,从搜索结果中的第一个项目,到分类页面的第一行,到屏幕顶部的横幅——尤其是在移动设备上。他们必须计划如何在每个季节、销售周期和促销中做出改变——以一种对他们的出版商、编辑和商人来说具有战略意义和高效的方式。最成功的数字企业会对内容和产品发现进行深思熟虑,并投资合适的工具来提高参与度、忠诚度、转化率和收入。

越来越多的企业转向**Adobe Experience Manager(AEM)**来管理他们的内容并创建丰富的全渠道体验。AEM 是企业内容管理的领导者,能够处理全球组织的复杂性,并为出版商建立工作流,以构建和管理他们的网站。它是可扩展的,使得在平台之上构建增强的用户体验更加容易。然而,AEM 用户很难创建强大的搜索和发现体验。他们在内容上投入了大量资金,但不一定能获得他们想要的参与度,因为正确的内容不会出现在正确的观众面前。搜索结果在页面上显示的时间太长,浏览者会失去注意力。如果不依赖开发者,出版商没有工具来管理日常的搜索策略。最终,他们在与其他在线企业竞争时处于不利地位,这些企业已经将搜索和发现钉在了一起。

这些企业中的许多都求助于 Algolia 来提供高级搜索和发现功能,从而扩展 AEM 的功能。Algolia 在其网站上提供了更快、更高性能的搜索,允许企业统一从多个来源发现内容。出版商可以从他们的内容投资中获得更多回报,并获得管理和发布的工具,以及制定如何根据相关性、业务指标和机器学习模型的洞察力对结果进行排名的策略。他们可以进行实验并衡量改进,看看更好的搜索能力如何影响他们的底线。

让这变得非常简单的是 AEM 的可扩展性Algolia 的 API 优先、以构建者为中心的方法 。AEM 用户可以轻松地将他们的 AEM 数据连接到 Algolia 平台,并利用其强大的索引引擎(更多关于索引 此处 ),快速构建由 Algolia 支持的前端体验。 在这里,我们讨论如何利用 Algolia 的 UI 库来构建 AEM 搜索体验。

为什么要用 Algolia 的 UI 库,而不是从头开始构建你的前端?

Showcase for Algolia InstantSearch.js Widget Library

虽然可以直接使用 Algolia 的 API 构建您的前端,并且一些企业选择这样做,但 Algolia 提供了一个更简单的解决方案:您可以使用其开箱即用的前端 UI 库,这可以显著加快您的前端开发。以下是一些好处:

可立即获得投资回报的特性

  • 你已经准备好插入和定制每一个构件:搜索栏和自动完成、搜索结果页面、查询建议、传送带、刻面、排序、分页等等。您可以利用可重复性、最佳实践并降低风险。
  • Faceting 是现成可用的——并且 facets 是可定制的和动态的,随着每个搜索查询而更新,以关注最相关的内容。
  • 联合搜索小工具允许你同时 ping 多个索引,这可以将不同的数据源整合到一个统一的搜索体验中。
  • 包括点击和转化分析,用于跟踪事件和趋势,使搜索更加智能,并生成推荐和个性化。

更高的性能

  • 您可以充分利用阿尔戈利亚的基础设施。不用叫服务器,会拖慢速度。Algolia 的前端小工具直接 ping CDN,并在几毫秒内呈现每次按键的结果。
  • Algolia 的性能提高了网站的核心网站活力,从而提高了搜索引擎优化。

更容易实施

  • 这些前端构建模块在 Javascript、React、Angular、Vue、iOS 和 Android 中可用,并且可以嵌入到任何前端中,在这种情况下,可以嵌入到您的 AEM 组件中!
  • InstantSearch 实施 Algolia 最佳实践。
  • 即时搜索库由 Algolia 维护和支持。

用 Algolia 两种方法构建你的前端

方法 1:从 Algolia UI 库开始

我们的一些客户已经很好地将 Algolia 的 UI 库嵌入到他们的 AEM 组件中,定制了外观,并通过 AEM Site Composer 使用了这些构建模块。一些组织甚至决定为每个组件包含一个 AEM 创作接口,这允许作者进一步配置搜索体验。例如,他们可以指定搜索哪些索引,或者包括哪些方面。一旦 AEM 开发者添加并定制了组件,AEM 发布者就可以将它们拖放到站点上,并为索引、显示格式、显示项目的数量等选择适当的设置。

第一步,从这些 Github 库 中下载我们的前端代码,作为依赖添加到 AEM 中。它们有普通 Javascript、React、Angular、Vue、React Native、iOS 和 Android 版本。有两个主要的库:Autocomplete 和 InstantSearch。Autocomplete 是一个轻量级的下拉菜单,可以很容易地添加到你网站的每一页。它有查询建议和自动完成的结果,但是没有任何用于过滤器或分页的 UI。这就是即时搜索的用武之地。InstantSearch 是一个完整的搜索体验,每种细化类型都有不同的小部件(refinementList、rangeSlider、pagination 等)。 我们还可以使用我们的 联合搜索组件 将多个索引(即来自 Adobe Commerce、AEM 和其他来源的索引)引入联合搜索体验。

方法二:从新的 AEM 组件加速器&开始定制

为了让刚刚起步的客户更加轻松,我们为 AEM 创建了 Algolia 组件,以加快他们的开发时间。有了这些组件,就可以投入更多的时间来优化体验。

该包包含用于的 AEM 组件

  • 自动完成全局搜索、查询建议和自动完成的结果

  • 即时搜索,带有搜索栏、方面、类别页面和联合搜索结果选项

  • 内容&产品推荐

  • 类别页面和产品推荐的 CIF 组件

每个组件都反映了 Algolia Javascript 库的配置,配置体验是通过 AEM 创作对话框实现的。

Algolia Autocomplete 组件主要用于全球导航,所以许多出版商会将它添加到他们的标题片段中。配置体验是通过 AEM 创作对话框实现的。该组件允许基本配置,并允许作者在自动完成框中添加索引组件。显示结果需要一个索引组件,但是您可以添加更多组件来创建联合搜索体验。

当许多出版商希望搜索占据整个页面,或者作为全球搜索结果的登陆页面时,他们会选择使用即时搜索小工具。

与自动完成组件相比,即时搜索组件有更多的配置,包括可以嵌入每个索引组件的分面组件。

我们还可以引入多个索引来获得联合结果,并为每种类型的索引配置显示模板(网格视图、列表视图等)。).

小部件也可用于支持构建类别页面和推荐传送带。

要了解关于加速器的更多信息,以及关于索引 AEM 内容与 Algolia 连接发布的解决方案,请通过【adobe-algolia-solutions@algolia.com联系我们。

用阿洛利亚的其他方式构建你的前端

今天,组织使用许多不同的方法来构建他们的前端。正如我们在本文中所探讨的,许多人使用 Adobe Experience Manager 的 Site Composer 来构建前端并拉入相关内容。其他零售商使用 Adobe Commerce storefront,或者 Adobe Commerce 和 Adobe Experience Manager 的混合体。一些人利用 PWA 前端,这有助于那些寻求移动设备高性能的人,而其他人将选择使用前端框架完全“无头”或从头开始构建一些东西。最好的消息是,Algolia 在所有这些情况下都有效!我们适合任何架构的简单性来自于我们分离前端和后端组件的方式,并以任何编程语言提供 API 客户端和 UI 库来加速实施。

想了解更多或了解如何尝试 Algolia?

请致电adobe-algolia-solutions@algolia.com联系我们,获取我们的加速器以及如何将 Algolia 构建到您的 AEM 解决方案中的指导!我们很高兴与您讨论最佳实践、权衡,并了解什么最适合您!

查看我们“Adobe x Algolia 集成”系列的其余部分,包括 我们的第一部分: 以三种方式从 AEM 获取数据

如何在 Adobe Commerce 中使用 Algolia 推荐

原文:https://www.algolia.com/blog/product/algolia-recommend-for-adobe-commerce/

我们很高兴地宣布,Algolia 推荐现已面向我们的 Adobe Commerce 客户推出。这是零售商高度要求的功能,他们中的许多人已经使用 Algolia 在 Adobe Commerce 上进行搜索,并准备将 discovery 提升到一个新的水平。

我有好的搜索——为什么我还需要推荐?

推荐改变了在线的典型动态:推荐为你找到内容,而不是需要搜索。网飞说过,网飞 80%的观众来自他们的推荐算法。而且,亚马逊 35%的收入来自产品推荐。一旦你对你的电子商务网站进行了搜索优化,相关的推荐通常是下一个投资领域。拥有 正确的 建议在产品详情页面下方、购物车上,或者作为“无结果”搜索查询的建议,可以改变游戏规则。

总部位于英国的杂货店 Co-op ,每当用户搜索库存中的商品时,都会添加推荐。他们发现,虽然你想要的产品缺货是一种令人沮丧的体验,但他们可以减少摩擦,改善客户体验,并通过提供用户可能视为替代品的相关产品来获得更好的结果。

Co-op UK grocery store's website - screenshot of a search with no results and recommended products

实施 Algolia 推荐后,合作社看到:

  • 篮子尺寸增加 6%
  • 添加到购物篮的商品增加 45%
  • 转化率提高 39%

有哪些集阿果推荐分开?

Algolia 因我们提供基于人工智能的解决方案的灵活性而闻名。您可以随时定制您的结果,将它们放在您喜欢的任何地方(无论是信息亭、电子邮件还是您网站上的任何地方),并且在上线之前,您可以通过模拟和评分了解一切的执行情况,以了解为什么会推荐这些内容。

Algolia 允许用户通过“规则”混合机器和人类的学习,以达到最佳效果(目前处于测试阶段)。例如,您可能希望在产品列表页面上显示相关项目。Algolia 不仅使用人工智能来展示您的客户可能选择的类似产品,我们还允许您进一步定制它。也许您希望所有推荐的商品与显示的主要产品颜色相同,也许您希望将促销商品固定在第一个位置,或者您可能希望筛选库存中剩余不到 10 件的所有产品。使用 Algolia 推荐的 ,非技术管理员可以轻松配置所有这些(以及更多)。

如何入门?

1。引入事件数据

注册 Algolia ( 在此免费开始使用 )后,将点击和转换事件带入您的帐户以训练您的模型非常重要。这在 Magento 集成中是现成可用的。更多详情请参考 文档 。在您开始学习时,您可以使用我们的 基于内容的学习模型 ,或者通过. CSV 文件上传过去的事件来加快学习过程。

2。训练你的模特

通过您的 Algolia 仪表盘,您可以选择指数,并根据您的点击和转换数据训练模型。您可以使用规则进一步自定义结果。您也可以使用预览功能来模拟结果。

Algolia Dashboard Recommend models screenshot

3。向您的 PDP 页面添加推荐模块

在 Magento 仪表盘上点击几下,您就可以将您的“相关产品”、“经常一起购买”和“趋势”推荐添加到您的产品详情页面或购物车页面。这些推荐可以由开发者进一步定制,包括放置在你的站点的其他区域。

magento recommend product settings page

【Algolia 推荐入门简单、有效、值得。感谢阅读并查看我们的 文档 了解更多!


有关如何充分利用您的 Adobe 堆栈中的 Algolia 的更多想法,请查看我们的集成系列的其余部分,其中有关于如何使用 Algolia 与Adobe Experience ManagerAdobe Launch,以及Adobe Analytics

升级交易:通过 Algolia 搜索改善交易卡体验

原文:https://www.algolia.com/blog/customers/algolia-search-improving-trading-card-experience/

你熟悉像游戏王这样的纸牌交易游戏(TCG)吗??游戏王!交易卡牌游戏是一款日本收藏卡牌游戏,基于漫画《游戏王》中流行的决斗怪兽卡牌游戏。。这种交易卡牌游戏的目标是收集多张虚构怪物的卡牌,并创建强大的卡牌来挑战(并战胜)其他玩家的卡牌。

同超过 250 亿的游戏币!出售 交易卡,游戏王哦!交易卡游戏是最受欢迎的交易卡游戏之一,在世界各地拥有强大的追随者。基于它的起源,它在日本尤其盛行,玩家们积极寻求与他人交换卡片,以改善他们在个人和网络上的卡片收藏。

为了帮助玩家找到卡片并在线交易,ka-nabell是最受欢迎且历史悠久的游戏王之一!日本的交易卡市场。为了给那些积极寻找有价值的卡片以添加到他们的卡片组中的玩家提供出色的体验,ka-nabell 知道它必须提供极快的搜索和发现体验,允许粒度过滤功能返回高度相关的结果,以便玩家可以快速找到他们想要的东西。在引入 Algolia 搜索之前,ka-nabell 非常依赖 SQL 查询。实施 Algolia 后,ka-nabell 正在改善客户体验。

我们采访了 ka-nabell 的工程师阿桔广孝和西胁俊治,他们与我们分享了他们的经验。

Courtesy of ka-nabell engineers, Hirotaka Koga and Toshiharu Nishiwak

Courtesy of ka-nabell engineers, Hirotaka Koga and Toshiharu Nishiwak

开发更好的搜索体验

Hirotaka 和 Toshiharu 说 ka-nabell 正在寻找更快的搜索解决方案。然后,他们偶然发现了一个叫做SEARCHSTONE的网站。

由于易于购买多张有价格、类别、效果等粒度过滤的卡片,他们认为 Searchstone(由 Algolia 提供)上的这一搜索功能是创建交易卡片组的理想选择。他们还被 Algolia 网站上看到的转化率提高所带来的价值所鼓舞( 加速转化率的电子商务搜索解决方案 )。

此外,Hirotaka 和 Toshiharu 希望使用 Algolia 最大限度地减少前端开发任务。Vue instant search非常适合他们构建更快更流畅的用户界面(UI)。Hirotaka 说他“喜欢用 Vue InstantSearch 编写可水平滚动的用户界面”。为了插入和更新数据,他们在 PHP 构建的现有系统中添加了一些代码。对于批处理,他们从头开始编写 Node.js 代码。

迎接语言挑战

日语有三种字母,叫做平假名、片假名和日本汉字。为了能够在所有可能的字母表中进行搜索(例如,用平假名搜索片假名),他们在索引之前添加了字段并转换了字符。他们还定制了搜索体验,制作了可搜索的常用、游戏和交易卡专用的特殊字符,如☆和 Y18。

把伟大的搜索变成伟大的结果

在不到一个月的时间里为他们的项目实施了 Algolia 之后,已经有来自客户的积极反馈,比如

  • “Ka-nabell 搜索超级有用。”
  • “实时!他们花了多少钱建造这个?”
  • “高质量搜索。错别字没问题。”
  • “超快超有用。和以前完全不一样。”

在提高转换率方面,Hirotaka 和 Toshiharu 将使用 Algolia 的分析功能 随着时间的推移对此进行跟踪。

最好的还在后头。由于这个项目非常成功,他们决定将 Algolia 引入他们全新的服务。它将于 9 月推出。

未来目标

展望未来,ka-nabell 对其 Algolia 实施进行了更多规划。由于 Algolia 的搜索即服务平台,ka-nabell 将能够利用其现有的 Algolia 实施,并灵活地利用 Algolia 的其他功能,包括:

使用 Algolia 的高级分析来发现优化用户搜索体验和提高转化率的机会。

从交易卡搜索扩展到他们经营的其他业务。

前进!宣布 Algolia 的 1.1 亿美元的新资金

原文:https://www.algolia.com/blog/algolia/algolia-series-c-2019-funding/

今天,我们宣布了我们的最新一轮 1.1 亿美元的融资,我们的主要投资者 Accel 和新投资者 Salesforce Ventures 以及其他许多投资者。

除了对达到这一里程碑感到无比感激,并为我们团队在如此短的时间内取得的成就感到自豪之外,我还为未来感到振奋。

在任何旅途中,后退一步(深呼吸)来欣赏你已经走了多远,欣赏你离实现你的愿景还有多远,总是很有帮助的。

这一切都始于一个愿景和使命。

当朱利安和我在 2012 年创办 Algolia 时,很明显,随着越来越多的网站、应用和数字内容以越来越快的速度产生,这个世界只会更加数字化。帮助用户在这个数字世界中搜索、发现和导航对于各种规模的企业的成功至关重要。

从第一天起,我们在 Algolia 的愿景就是让每个企业都能够为其用户提供尽可能最好的体验——闪电般快速、个性化和高度相关的搜索和发现体验——帮助人们在这个数字世界中找到 他们想要的他们想要的 ,无论是在家里、在工作中还是在路上。

在追求这一愿景的过程中,我们的使命是让每个开发人员和产品团队都能够构建易于实施、易于定制和调整的消费级搜索,为他们的用户提供引人入胜的数字体验,从而最大限度地促进增长。

这已经是一个惊人的旅程了。

在短短的七年时间里,我们已经组建了一个令人惊叹的团队,拥有强大的 文化 以及坚定不移的信念来实现我们的愿景和使命。

自 2012 年以来,Algolia 的平台已经处理了超过 1 万亿次搜索查询,我们现在拥有超过 8,000 名客户,每月支持 700 亿次搜索。

我们的员工群现在由遍布全球 6 个办事处的 350 名 Algolians 人组成,我们正在 招聘

就在过去的几个月里,我们共同取得的一些里程碑、合作伙伴关系和荣誉让我受宠若惊,其中包括:

T33

前方大事。这只是开始。

有了新的资金,Algolia 将能够代表数百万公司推进我们的共同愿景并加快创新努力,这些公司必须确保用户通过令人愉快的体验快速获得他们想要的东西,从而促进参与、转化和增长。展望今年剩余时间及以后,我们将:

  • 继续打破构建卓越搜索的障碍,以便任何公司都可以向其用户提供最佳的搜索和发现体验,同时让 it 团队、开发人员和企业所有者能够极其轻松地实施、管理和优化这些基于 Algolia 的体验。
  • 加倍努力应用机器学习来帮助企业向用户提供更相关、更个性化的体验。这包括 分析用户查询,以推断、推荐和创造更好的用户体验。我们只是触及了表面,通过我们的搜索即服务平台和 API 套件,每月处理超过 700 亿次搜索,没有任何解决方案提供商和合作伙伴比 Algolia 在这方面处于更有利的位置。
  • 丰富我们的 对话和语音搜索能力 跨越 web、移动和语音优先渠道,满足消费者日益增长的随时随地进行搜索的需求。
  • 在地理上扩展到美洲、欧洲、亚洲、日本和新兴市场。这包括发展我们遍布 70 个地区的 16 个数据中心的全球基础设施,以便我们能够在世界任何地方提供相关的、可靠的、快如闪电的性能。
  • 通过培训和发展计划投资于我们的文化和员工,并通过持续雇用熟练的专业人员来扩大我们的业务范围和行业专业知识。

“长期以来,组织不得不在自行构建资源密集型搜索工具和使用成本较低但不灵活的“一劳永逸”搜索解决方案之间做出选择。Algolia 解决了这两个问题,消除了构建搜索的成本和复杂性,同时使企业能够创造吸引和取悦客户的定制体验。我们的快速增长强调了市场对提供惊人消费者体验的需求,以及 Algolia 帮助他们实现这些体验的能力。”

多谢。

建立一家“经久不衰”的公司并改变企业与用户互动的方式绝非易事,需要合适的投资者、客户和团队。

  • 感谢我们所有的参与投资者,包括 Accel、Salesforce Ventures、Alven、DAG Ventures、Founders Circle、Owl Rock Capital、SaaStr Fund 和世界创新实验室,欢迎 Accel 的 Nate Niparko 加入 Algolia 的董事会。
  • 感谢我们的 8000 多名顾客,感谢他们对 Algolia 的信任和宝贵的产品反馈。
  • 感谢我们的 350 名员工,感谢你们的勇气、坦诚、谦逊、信任和相互关心,感谢你们的热情和努力,让 Algolia 成为今天的样子,成为未来的样子。

虽然旅程的每一步都令人兴奋,但我对未来充满了活力,迫不及待地想和你们一起大步前进。

向前冲!


有关 Algolia 资金公告的更多信息:

使用 Algolia connector for Shopify Flow 释放搜索洞察力

原文:https://www.algolia.com/blog/product/algolia-shopify-flow-connector/

2017 年,Shopify 宣布了 Shopify Flow ,这是一个电子商务自动化平台,使商家能够轻松实现任务自动化,以便他们可以专注于发展业务。

今天,我们很高兴地宣布 Algolia connector for Shopify Flow,通过 Algolia、Shopify Plus 和已经与 Flow 集成的创新电子商务工具之间的自动化工作流,释放 Algolia 的搜索和发现洞察力。

“我们很高兴 Algolia 构建了第一个与搜索相关的连接器。Shopify Plus 的产品营销经理 Anthony Kentris 表示:“现在,企业可以在日常工作流程、应用程序和 Shopify 中自动处理从商店搜索数据中获得的强大洞察力,这是了解购物者意图的直接窗口和潜在机会的来源。”

它是如何工作的?

在 Algolia、Shopify 或任何使用 flow 的应用程序之间创建工作流只需链接三个元素,将所有艰难的集成工作留给应用程序连接器。这三个要素是:

  • 触发器:发生在 Shopify 或应用程序中的事件。它可以发送与事件相关的数据。
  • 条件:确定工作流是否应该运行的一个或一组规则。
  • 动作:在 Shopify 或应用程序中执行的任务。

shopify-flow-workflow

Example of a workflow

Algolia 和 Shopify Plus:改进的管理和更具可行性的搜索见解

2018 互联网零售商 KPI&网站搜索调查中,35.9%的零售商表示,为了推进他们的搜索和发现战略,他们将从搜索与其他系统的更好集成中受益。

Algolia connector for Shopify Flow 就是关于这种集成的,从三个初始触发器及其相关工作流开始:

  • 具有“热门搜索”和“无结果”触发器的可操作见解:
    • Top Searches 发送当天最受欢迎的 5 个搜索列表,以及这些搜索的前 5 个结果。然后,可以向商家发送包含该信息的电子邮件或延期通知,以便他们可以每天调整库存或促销活动。
    • 无结果发送没有返回结果的最受欢迎的查询。如上所述,可以发送包含此信息的电子邮件或延期通知,允许商家根据购物者的意愿调整其产品供应,或采取更有针对性的收购策略。
  • 改进的管理通过“索引暂停”触发器:Algolia 对 Shopify 目录的摄取——或索引,使其可搜索,可以暂停。出现这种情况时,会触发“步进暂停”触发器。然后,商家可以收到电子邮件或延期通知,这样他们就不必经常查看仪表板来监控索引,并专注于他们的业务。

虽然我们正在积极开发额外的触发器、工作流和操作来帮助商家提高效率,但您的数字店面已经可以使用 Shopify Flow 平台探索各种可能性。例如,商家已经可以创建工作流,将本周最受欢迎的搜索结果包含在他们的每周简讯中,或者自动创建 Asana 任务来提醒他们将回答无结果搜索的产品添加到他们的目录中。

入门

我们很高兴成为第一个加入 Shopify Flow 社区的搜索和发现解决方案。

点击此处开始使用 Shopify Flow 的 Algolia 连接器。

我们还将推出更多激动人心的触发因素和行动,但与此同时,请不要犹豫,与我们分享您的想法:接下来我们应该实施哪些触发因素或行动?在你的工作流程中,什么对你最有帮助?不要犹豫,在评论中分享你的想法

为现在的经济而建——阿尔戈利亚夏季 19——阿尔戈利亚博客

原文:https://www.algolia.com/blog/algolia/algolia-summer-19-now-economy/

如今,消费者在寻找信息、媒体内容和产品时,希望获得即时、顺畅的谷歌和亚马逊式体验。他们需要直观的体验,无论数字界面如何,都能提供他们想要的东西,而且他们现在就想要。如今,这是决定客户是否参与、订阅和/或购买企业产品的因素。

在 Algolia,我们称之为“现在经济”

随着全球超过 38 亿互联网用户不断在网上搜索任何东西,在现在的经济中,企业必须迎接这一挑战,利用数字互动的每一个时刻——“现在时刻”。在这些当下时刻,企业必须提供引人入胜的个性化体验,将消费者的意图与最佳、最相关的内容联系起来,而不管数字界面如何。

随时随地传递当下时刻的需求推动着 Algolia 的产品和工程团队代表我们的客户不断创新。今天,我很兴奋地与大家分享,正是这一点促使我们推出了Algolia Summer’19。

Algolia Summer’19 旨在通过任何渠道提供快速、量身定制的个性化体验。在这一最新版本中,任何规模的开发人员和企业都可以通过以下创新和增强功能,跨 web、移动和语音渠道提供搜索和发现“即时消息”。

  1. 个性化体验当下时刻

借助 Algolia Summer’19,企业用户可以根据获取的客户偏好数据(如点击数据和购买数据)快速创建个性化规则,为客户量身定制搜索结果。通过 Algolia 的新个性化模拟器工具,用户能够调整个性化属性的权重,然后实时可视化最终用户体验,以确保交付预期的结果。

此外,开发人员可以通过集成个性化解决方案,包括 Dynamic Yield 的人工智能支持的 Personalization Anywhere 平台、Target2Sell 的 1 对 1 商务人工智能平台和 Raptor 的智能顾问,构建跨搜索、浏览和电子邮件营销的统一个性化体验。开发人员还可以利用 Algolia 的新用户配置 API,在第三方解决方案中利用 Algolia 生成的用户配置。

  1. 首创智能语音搜索

随着消费者越来越多地采用语音激活设备,如 Alexa 和 Google Home,以及使用语音在移动设备上快速搜索信息,Algolia Summer’19 进一步增强了语音搜索功能,以帮助企业满足这一增长趋势,并以最相关的结果响应用户请求。

借助 Algolia Summer’19,通过改进的实体匹配,开发人员可以轻松构建语音搜索体验,考虑人们说话和发声方式的差异,以提供更准确的搜索结果。此外,新的预建 JavaScript 语音到文本集成允许开发人员在几分钟内将语音搜索嵌入到浏览器中。这在桌面、iOS 和 Android 上都有效。

  1. 为“移动”搜索提供动力

随着“移动、永远在线”消费者的移动设备激增,通过简单、直观的移动搜索传递即时信息变得至关重要。借助全新的预构建移动 UI 库,Algolia Summer’19 为开发人员提供了更大的灵活性,以控制移动用户体验、实施移动优化菜单和过滤,并为移动网站和应用集成其搜索用户界面的品牌。

开发人员现在还可以在 14 种不同的开发环境中利用 Algolia 的搜索 API,以及用于 Kotlin 的新 API 客户端,kot Lin 是 Android 的新语言选择,为开发移动体验提供了另一种选择。

  1. 表现更好

最后,要传递 Now Moments,必须以闪电般的速度返回个性化的结果和体验。随着 Algolia Summer '19 的推出,Algolia 通过使用过滤搜索将发现体验提高了 30%,从而继续拓展新的领域。Algolia 还减少了多达 10%的索引时间,使公司能够缩短新内容上线和出现在搜索结果中的时间。

  1. 非常感谢,以后还会有更多

Algolia 是一个现代化的“搜索即服务平台”,旨在为各种规模的公司提供一个预打包的高性能搜索和交付平台,让他们能够快速、经济高效地定制自己的特定业务和用户需求。Algolia Summer '19 是推进我们使命的又一步。

感谢我们的客户直接以及通过开发者论坛和我们的客户成功团队提供宝贵的持续反馈。正是你们的持续合作和对我们倾听和行动的信任,推动了我们全球 120 多名工程师的创新。要了解更多关于 Algolia 's 年夏季发布的信息,请查看我们的点播 Algolia 's 年夏季网络研讨会,网址为www.algolia.com/webinar/summer-19,联系您的 Algolia 客户成功经理,或访问www.algolia.com/products/whats-new/

最后,感谢我们的产品管理和开发团队。正是通过您积极、持续的参与以及长时间的产品冲刺、测试和客户反馈会议,才使 Algolia 成为 7500 多名客户选择的平台,以 70 多种语言为全球消费者持续提供 Now Moments。迈向我们的下一个里程碑!

Algolia Vs. Klevu:并排比较|Algolia

原文:https://www.algolia.com/blog/product/algolia-vs-klevu/

Klevu 和 Algolia 是两个流行的搜索平台。Klevu 主要面向带有 Shopify 和 Magento 插件的电子商务应用。Algolia 是为所有不同类型的用例构建的灵活解决方案。

那么,哪一个最适合你的企业呢?

在这两者之间做出决定时,重要的是要考虑关键因素,如期望的用例、性能、功能和持续维护。在本文中,我们将比较每个工具为您的最终用户、业务用户和开发人员提供的体验,以帮助您找到最佳合作伙伴。

为用户

如果你最终想寻找一个能改善用户体验的搜索服务,有几个重要因素需要考虑。以下是 Klevu 和 Algolia 如何提供有助于最佳终端用户体验的因素:

速度

如果用户不能快速找到他们想要的,他们很可能会沮丧地离开你的网站。

据测量,Klevu 上的搜索查询需要 350 毫秒到 2 秒的处理时间。Klevu 搜索引擎基于 Solr,由 AWS、OVH 和谷歌托管。虽然这为用户提供了灵活性,并可以处理不同的用例,但这种技术上的通用性有一个缺点,即限制了 Klevu 充分优化其搜索算法的速度。这导致了行业平均水平的搜索延迟。Klevu 还在 CDN 中存储和缓存前端资产,因此页面加载相对较快。

Algolia 的搜索查询需要花费 70 到 100 毫秒 来处理。Algolia 的搜索引擎是在考虑速度的基础上从头开始构建的。由于最初的 Algolia 产品是为在原生移动设备上运行而构建的,因此它被设计成资源非常少,即使是基本的消费设备也可以运行它。搜索引擎现在运行在云中,但它保留了核心系统和优化,因此提供了极其快速和可扩展的搜索性能。

错别字容忍

用户在搜索时经常出错,但这不应该影响引擎或搜索结果的相关性。

通过为索引内容动态生成同义词,Klevu 自动丰富其目录。这对于快速引导新系统非常有用,因为它不需要太多的自定义同义词管理。然而,他们也使用这些项目(以及模糊匹配)来处理拼写错误,当有搜索失败时就搜索这些项目。这往往不如试图自动纠正拼写错误的关键词的系统表现好。

Algolia 有一个强大的错别字容忍度系统,确保用户可以找到内容,即使某个关键字的拼写与索引内容中的不完全相同。它使用 距离算法 来计算出现的字符替换、添加、删除和置换的数量,并找到“最接近”的单词距离的阈值是可以配置的,这对于处理不同的语言和用例是很重要的。

自动完成

自动完成通过减少完成搜索所需的时间来改善用户体验。

Klevu 提供了一个“随键入搜索”的功能,从用户键入的第一个字符开始提供自动完成的建议。这些建议包括热门搜索和最近搜索。虽然 Klevu 的自动完成功能提供了良好的结果和上下文,但其较慢的搜索性能提供了不太理想的用户体验,因为用户可能会看到他们键入的时间和结果填充的时间之间的延迟。

阿哥还提供了 自动完成查询建议 。然而,由于 Algolia 的快速搜索性能,用户界面是真正交互式的。这提供了一个动态的环境,鼓励用户尝试搜索并快速找到他们想要的东西,而不会因为延迟和滞后而感到沮丧。

跨设备功能

无论用户通过何种设备进行搜索,您的搜索都应该可用。

Klevu 支持响应式浏览器界面,可以处理移动设备和所有不同的屏幕尺寸。它特别针对其 Shopify 和 Magento 界面进行了优化。如果你正在使用这些插件中的一个,确保启用 移动友好布局

Algolia 为各种不同的前端提供客户端软件和 SDK,包括 Android、.NET、Javascript 和 iOS,此外还有一个响应迅速的移动浏览器界面。这意味着你可以在所有不同的平台上为你的用户创建一个快速易用的搜索界面。

个性化体验

尽管一个经过良好优化的搜索解决方案肯定会让人感觉个性化,但是使用 个性化工具 会进一步提升用户体验。

Klevu 允许展示与购物者搜索历史相关的最近浏览和趋势产品。当用户单击搜索栏时,这类似于查询建议。有了这个,用户可以快速跳回最近的搜索或者查看网站上流行的内容。然而,搜索结果本身并不针对特定的最终用户而个性化。

Algolia 能够动态调整搜索结果以满足 自定义用户需求 。搜索结果可以根据产品浏览量、点击量和转化率等因素进行调整。这些 KPI 可以很容易地调整和配置,以处理不同的用例或业务目标。

为商家

为了利用网站数据做出明智的商业决策,企业用户需要能够理解和使用搜索工具。他们还需要能够 分析和利用来自搜索工具的数据 来推动搜索和导航体验的改进。以下是你的业务团队需要考虑的几个基本因素:

透明度进入搜索分析

拥有强大的分析和报告能力对于做出更明智的战略业务决策至关重要。例如,在搜索中, 自定义排名在线销售 可用于推广季节性产品、新产品线或利润更高的商品。通过分析密切监控您的数据,您可以做出更多由数据驱动的决策,决定推广哪些产品,然后监控这些变化,以确保客户对这些产品做出良好的反应。在选择搜索提供商时,您应该确保他们拥有允许您执行这些类型的分析和监控的所有功能。

Klevu 为搜索到的术语、未找到产品的搜索到的术语、点击的产品和检出的产品提供分析 。这些是通过 Shopify 和 Magento 集成自动收集的。对于使用 API 或其他前端的人来说,指标必须手动推送到后端。

Algolia 自动提供了一个 数量的数据点 ,比如搜索计数、热门过滤属性、热门搜索、不同 IP 和用户计数等等。不需要编码,因为这些指标是通过 API 的使用自动收集的。Algolia 还提供了一个全面的分析仪表板,允许分析师以适当的粒度快速查看和过滤数据。Algolia 还在分析上提供了更多的细化可能性(通过使用标签),在查询级别提供了更多的分析(例如,点击率、转换率、点击位置),以及比较分析范围的能力。企业客户也可以通过 API 访问所有这些内容。

【白盒】方法

调整和优化搜索是一个迭代和持续的过程,需要针对您的业务和客户。通常,内部搜索的相关性和排名对于商业用户来说是一个黑匣子,他们必须依赖他们的开发者来理解内部排名。因此,重要的是 搜索规则 和配置易于使用和理解。

Klevu 允许各种技术能力的用户修改搜索结果。然而,排序和相关性的逻辑有点不透明。

Algolia 使商业用户能够定制他们的个性化,并选择哪些因素会影响个性化,以确保搜索引擎适合他们非常具体的业务需求。Algolia 的构建使得所有用户都可以通过简单的拖放界面轻松调整搜索规则、相关性、排名等。虽然它的技术开发工具很强大,但 Algolia 认为,对于非技术用户来说,能够快速自己做出更改并跟踪性能是很重要的。

营销工具对于企业用户根据营销优先级和 KPI 调整内部搜索相关性至关重要。随着消费者品味和技术的不断变化,排名规则和促销活动应受到密切监控和调整。

Klevu 宣传自动分类重新排名。然而,如果你在它的上面做一些销售行为,商业用户将很可能不能控制重新排序,也不能进一步定制搜索引擎。也就是说,Klevu 确实允许满足各种条件的 提升结果 并插入横幅来推广产品。

Algolia 通过无需开发人员参与的可视化用户界面,让企业用户能够轻松调整销售策略。此外,Algolia 的规则允许将高级策略应用于排名策略,以及更多的定制和非常具体的业务方法。

针对开发者

由于开发人员将参与您搜索工具的更新、改进和日常维护,因此您选择的工具能够让开发人员以最少的麻烦完成他们的工作是至关重要的。

API-first

由于 Klevu 的设计重点是轻松兼容 Shopify 和 Magento,因此其资源和工具针对这些用户进行了优化。

Algolia 也提供 Shopify 和 Magento 扩展,是一个 API 优先的服务。这确保了开发人员获得与使用第三方插件或其他前端客户端的开发人员相同水平的一致性和质量。通过这样做,企业可以建立在 Algolia 的系统之上,并知道 API 将得到维护、支持和良好的文档记录。

工装和设置

【Algolia 和 Klevu 都有浏览器客户端和第三方平台插件。

不过,Algolia 也为 Android 提供 SDK,。NET、Javascript 和 iOS,以及一个丰富的、记录良好的 API。所有这些客户端和 SDK 都是通过 Algolia 的 GitHub 开源的,因此所有能力的开发人员都可以轻松地在 Algolia 的基础上进行构建。这允许即插即用和灵活定制更复杂的工作流程。Algolia 还提供了 健壮的文档 来帮助开发者解决搜索和导航体验各个阶段的挑战。

索引

Klevu 通过注入英语、法语和芬兰语目录的同义词来提供自动丰富。它们还为检测查询的属性提供了很好的支持,比如产品的颜色或类型。

Algolia 提供了多种向索引添加结构和标签的功能,以提高搜索的效率和性能。Algolia 的索引时间通常相当快(当然,这取决于您的记录数量),因为 基础架构已经针对索引速度 进行了优化。它还提供了管理 不同类型同义词 的工具,包括单向同义词、替代更正和占位符。这些都可以通过 API 和仪表板来管理。

为您选择最佳搜索伙伴

在选择搜索合作伙伴时,你需要确保他们的系统足够灵活,能够满足你的特定用例,并随着时间的推移而扩展。 请求演示 以了解 Algolia 如何为您的企业快速启动搜索体验。

开源搜索工具与 Algolia

原文:https://www.algolia.com/blog/product/algolia-vs-open-source-search/

如果你的网站需要一个搜索工具来匹配你的用例,你有两个选择:从头构建一个内部搜索引擎或者从搜索提供商那里购买。您可能会担心开箱即用的解决方案对于您的规格来说过于死板。然而,构建您自己的工具可能需要您没有多余的资源。

无论你决定走哪条路,你都需要确保你的业务需求和那些重要的利益相关者的需求,比如项目经理、开发人员和最终用户,以最有效的方式得到满足。

在本文中,我们将评估搜索即服务工具 Algolia,以及流行的开源工具 ElasticSearch 和 Solr,看看购买或构建是否适合你。

什么是开源搜索?

开源搜索是通过免费的开源软件实现的,该软件旨在处理许多不同的用例。通常,该软件受 Apache 或 MIT 许可证 管辖,这实际上允许任何商业或个人使用。虽然这提供了灵活性,但像 ElasticSearch 或 Apache Solr 这样的流行开源软件仍然需要大量的技术专业知识来构建特定于用例的行业标准搜索应用程序。

什么是搜索即服务?

搜索即服务是通过软件即服务(SaaS)模式实现的。有了 搜索即服务 ,搜索功能、托管、运营、维护等都由软件提供商提供。特别是 Algolia,它具有像 即时搜索 这样的功能,多语言功能,以及内置在可定制搜索界面中的错别字容差,该界面旨在随着业务的增长而扩展。

构建与购买搜索

是建立还是购买你的内部搜索工具取决于几个关键的考虑因素

  • 您需要的搜索定制的级别和类型
  • 开发资源的可用性
  • 构建搜索的预计时间表

一旦你概述了你最终需要的搜索结果,评估了你现有的资源,你就能更好地决定走哪条路。

为什么要建立你的搜索?

建筑搜索是一个耗费时间和资源的过程,并不适合所有人。虽然可定制性的级别看起来很有吸引力,但是构建只对少数类型的公司有意义。

将搜索作为其产品或功能的关键部分的资源丰富的公司(想想谷歌或亚马逊)可能会走这条路,因为他们可以投入整个团队来开发、实施和维护他们的搜索。此外,规范非常严格的公司或需要开发不太常见的搜索类型(例如,视觉搜索)的公司可能会选择构建。然而,绝大多数公司不属于这些类别。

【开源搜索的好处】

开源软件在开发者社区中很受欢迎。对于构建搜索应用程序来说,它有很多好处:

  • 初期成本低。 开源搜索需要最低的前期成本,因为它可以免费下载,并在构建和测试时在本地运行。
  • 社区支持 。世界各地的软件工程师都在使用和开发开源搜索工具。在线社区可以成为工程师进行功能开发的重要资源。
  • 灵活部署 。开源搜索工具也可以在许多不同的环境下运行。无论您是在构建一个小型的内部搜索工具,还是一个大型的分布式企业云搜索系统,这些工具都可以进行扩展,以满足大多数条件。此外,AWS 和 Google Cloud 等云提供商提供了一些基础设施来帮助部署和配置软件。

开源搜索的挑战

虽然开源工具提供了巨大的开发灵活性,但它们也带来了一些挑战:

  • 总拥有成本高。楼宇搜索包含许多隐性成本,包括持续维护成本和托管成本。请记住,将整个工程师团队投入到设计和维护你的搜索中,将会使公司每年花费数十万美元!
  • 技术复杂 。开源工具通常需要大量的定制开发工作才能应用于特定的用例。这意味着开发人员必须很好地理解工具如何在幕后工作,以确保正确使用,并且任何特定于业务的逻辑或 API 都必须从头开始构建。
  • 延长实施时间表。 与业务团队在优先级、构建、测试和启动搜索方面保持一致需要几个月的时间,即使你的开发团队技术高超。
  • 搜索的更新和改变需要密集的计划。一旦你的搜索上线,即使对你的搜索工具做很小的修改也需要许多利益相关者的配合。搜索算法的改变,增加新的排名因素,或者开发新的功能可能会比你想象的要长得多。
  • 监控和维护会消耗资源。随着业务的增长扩大搜索范围会占用开发者大量的带宽。花在监控和维护搜索上的时间会抑制其他领域的创新和发展。
  • 对于企业用户来说,搜索是一个黑匣子。 由于开发人员将完成搜索的大部分设计工作,业务团队可能很少或根本不了解为什么项目、内容和/或产品会以这样的方式排名。
  • 不包括分析。分析对于推动搜索工具的改进和调整至关重要,但它们不会自动包含在开源软件中。请确保将您的分析工具或数据可视化工具的成本包括在您的搜索总成本中。

为什么要购买搜索即服务解决方案?

大多数公司几乎没有开发资源来从零开始开发搜索引擎。然而,增加搜索功能可以极大地改善普通网站用户的体验。事实上, 43%的用户会立即去网站上的搜索栏 。从媒体到电子商务,再到中间的每一个网站,在线公司必须提供符合谷歌、亚马逊、网飞和其他主要参与者设定的标准的搜索体验。购买托管搜索即服务解决方案可能是改善用户体验同时保持可承受成本的有效方式。

搜索即服务的好处

搜索即服务工具旨在最大限度地降低搜索启动和运行的复杂性。以下是购买搜索即服务解决方案的一些好处,以及 Algolia 如何帮助您实现这些好处:

  • 开箱即用的可定制搜索 UI。 Algolia 提供了一系列现成的可定制搜索 UI 组件。 联合搜索 、随键入搜索自动完成、过滤器和方面、 个性化 和销售工具立即可用,帮助您以最快的速度构建强大的搜索。
  • 内置分析。每次搜索,Algolia 都会捕获有价值的用户数据,并将其显示在 一个可消化的分析仪表板 中。无需额外费用,您可以轻松查看重要指标,如点击位置、点击率、热门搜索、无结果热门搜索、搜索来源国家,并使用这些信息来推动
  • 可靠性和可扩展性。 如果你从头开始构建,你的开发者最终将不得不管理系统备份并解决网络延迟和搜索中断的问题。Algolia 的 分布式搜索网络消除延迟 。凭借 99.999%的 SLA(适用于具有 1000 倍折扣政策的精选计划),Algolia 网站上始终提供当前 API 状态。
  • 利用即时创新。得益于“搜索即服务”模式,Algolia 的新产品功能、升级和改进可立即提供给所有用户,无需额外付费。
  • 白盒方法。阿果的 排名公式 对所有人都是透明的。此外,像 可视规则编辑器 这样的工具,允许商业用户基于商业优先级对搜索排名进行改变和改进,所有这些都不需要开发者的帮助。
  • 更低的拥有成本。使用 Algolia 的持续成本是合理且可预测的,并且没有任何隐藏的维护、托管或升级成本需要担心。

搜索即服务的挑战

虽然“搜索即服务”模式提供了许多好处,但也有一些挑战需要考虑:

  • 不太适合技术性极强的工作流程。Algolia 是面向用户搜索的理想产品。如果你的重点是分析/日志处理,你可能需要一个不同的工具。

  • 一些灵活性的损失是不可避免的。如果你不是从零开始,你将无法控制搜索的每一个细节。然而,Algolia 是高度可定制的,适用于大量的用例,并旨在成为您用例的合作伙伴。

  • 可能很难转换供应商。当你作为服务提供商使用搜索工具时,你可以根据自己的需求调整工具,生成有价值的搜索数据。如果您需要切换到一个新的合作伙伴,将您的所有数据和规范移植到另一个供应商可能需要一些工作。

为您想要创造的搜索体验选择最佳合作伙伴

虽然从头开始构建新的应用程序很有诱惑力,但从长远来看,这看起来在短期内节省了成本,实际上却花费了更多的时间和金钱。大多数公司会在托管解决方案中找到他们需要的工具。如果你决定选择搜索即服务,你需要一个强大的合作伙伴,在你成长的过程中与你并肩作战。 观看我们的深度演示 ,了解 Algolia 如何应对开源替代方案。

Algolia Winter '20 —通过搜索体验管理增加收入

原文:https://www.algolia.com/blog/product/algolia-winter-20-business-value/

我们从一些世界上最好的品牌那里听说过:搜索和发现对用户体验至关重要,但很难衡量它们对收入的影响。

不难理解为什么:在过去的几十年里,任何消费级搜索工具对于非技术、业务团队来说都太难管理,这已经成为一种行业规范。然而,正是这些业务团队——数字战略家、产品经理、业务员、营销人员和内容编辑——最需要优化在线资产搜索和发现的能力和敏捷性。他们也是最直接关注投资回报和改善业务成果的人。

具有讽刺意味的是,业务用户不得不记录 IT 票证,并等待数天或数周来获得可能促进业务增长的增强功能,同时占用了宝贵的开发人员时间。

我们 20 年冬季发布的产品致力于改变这种模式。我们正在提供一套工具,使业务团队能够分析和优化用户的搜索和发现之旅,从而直接释放商业价值并实现增长。

新的搜索体验管理工具:分析、优化和迭代相关策略

如果做得好,搜索可以成为商业结果的强大倍增器。关键因素:相关性。交付足够复杂的搜索结果,以符合搜索者的意图并满足业务需求(推广季节性产品或趋势性新闻)是很困难的。现代营销和编辑策略正以(消费者)思维的速度变化;拥有支持它们的工具至关重要。

进入搜索体验管理(SXM)。

可视化编辑:简单技术换复杂策略

借助功能强大的拖放界面,我们新的可视化编辑器使编辑和销售团队能够完全控制搜索和发现体验。

“借助 Algolia 的可视化编辑器和仪表盘,我们改善了客户的搜索和浏览体验,并将无结果率降低了 60%以上。此外,我们的本地销售团队能够轻松地锁定和隐藏产品,使其符合我们的本地销售策略。"
理查德·米格特,迪卡侬新加坡电子商务主管

这里只是一些可视化编辑器的使用案例。

  • **动态可视化关联策略。**由于产品描述中缺少细节,或者产品目录中的数据不足,预想的相关性策略可能会失败。可视化编辑器使您可以可视化您的实际搜索,以确保结果按计划显示给用户,然后根据需要轻松地重新排列、删除和调整视图。

  • 过滤结果。 Visual editor 允许销售团队在后端过滤搜索结果,例如,确保当用户寻找特定商品时,只显示选定品牌的产品。【T2visual merchandising tool

  • 提升和锁定项目和类别。一家媒体公司可能希望展示优质内容和免费内容的健康组合,以增加转化率。将优质文章放在分类页面的顶部,或者增加令人兴奋的季节性文章,将鼓励非付费用户最终订阅。

直到今天,这种类型的功能还没有相应的速度、相关性或基础设施来支持现代在线体验。

增强的分析功能可获得更多可见性和洞察力

搜索体验管理的一个关键部分是了解搜索数据的性能。搜索有自己的一套关键绩效指标:搜索量、点击率和转化率等等。我们最新的分析功能让您能够超越定义和跟踪这些关键指标:我们希望您看到您的搜索分析数据中的大画面。

  • 趋势报告为您提供来自用户的即时反馈,告诉您他们如何使用您的应用程序

site search analytics

  • 比较不同的日期范围

site search analytics

  • **多标签过滤:**将分析集中在特定标准上,如设备、客户档案等。

site search analytics

这些特性会给你更好更快的洞察力,更多的控制,甚至更多的方法来评估你的搜索数据。

通过细分和谷歌标签管理器捕捉洞察事件

今天,我们将为您提供两个新的连接器,分别用于 Segment 和 Google Tag Manager,使您能够将事件从您已经跟踪的位置转发到 Algolia。

高级分析需要收集用户发送的信号:

  • 他们点击了哪些搜索结果,是在什么时候,从哪个设备上点击的?
  • 他们会浏览或添加哪些内容到他们的愿望清单中?
  • 他们将什么产品添加到购物车中?

到目前为止,Algolia 只提供了一种收集这类数据的选择:使用我们自己的点击分析。新的连接器允许已经使用 Segment 或 Google Tag Manager 的客户通过简单地将 Algolia 添加为 Segment 的目的地或使用 Algolia Google Tag Manager 模板,将他们的用户行为数据发送到 Algolia Analytics。在这两种情况下,设置都很快,并且需要最少的努力。

网站搜索企业网站

作为消费者,你可能知道浏览企业网站有多难。你可能会访问公司网站,寻找产品、培训、文档、常见问题、投资者信息,甚至是博客文章。在后台,该公司已经花费了数十万美元来制作你想看的内容。然而,似乎不可能找到。

作为一个企业,你知道将所有的营销内容组织成一个最佳的信息架构是多么困难,特别是当现代企业网站必须服务于如此多不同类型的访问者:客户、潜在客户、it 和业务人员…所以你伟大的内容永远不会出现。

我们的网站搜索正在改变这一点,它消除了内容孤岛,让您的访问者准确地找到他们需要的东西,就像他们在谷歌或亚马逊上一样轻松,同时让您的企业打开这个经常被忽视但却强大的商业价值口袋。

由浩浩荡荡的阿尔戈利亚履带驱动

Algolia 爬虫是使站点搜索成为可能的工具,把你的内容统一到一个单一的交付平台。爬虫自动地为你做艰苦的工作:浏览你的网站,提取重要的信息,并且在 Algolia 中无缝地索引数据。

但与市场上的其他爬虫不同,Algolia 爬虫是高度可定制的:

  • 您可以爬网多种类型的文件
  • 它允许你用商业数据丰富提取的内容,比如谷歌分析数据
  • 它带有自己的监控套件

还有更多。关于这一点…

我们希望您了解更多

以上是我们在冬季 20 版本中推出的最重要的功能和更新。有兴趣了解更多关于搜索体验管理或此版本附加组件的信息吗?观看我们的网上技术交流讲座,我们将深入探讨,并为您提供现场演示和客户示例。

阿尔戈利亚

原文:https://www.algolia.com/blog/algolia/

阿哥利亚

增加了商家的收入,Algolia 现在是 Shopify Plus 认证合作伙伴

超过 1,500 家 Shopify 商家的搜索使用率增加,转化率和收入提高,并且能够...

首席战略业务发展官

Algolia 对搜索、发现和零售的 10 个预测

原文:https://www.algolia.com/blog/algolia/algolias-10-predictions-on-search-discovery-and-retail/

外面的温度开始下降,随着零售商准备打折和转移商品,冬季节日展示越来越早出现。这也是一年中我们的顾客为节日旺季做准备的时候。我们想后退一步,寻找明年可能的模式和趋势——我们称之为“预测季”。

作为搜索和发现创新的先驱和 电子商务 玩家的热情技术合作伙伴,我们 Algolia 知道我们有责任展望 2023 年及以后的前景。所以,事不宜迟,下面是我们对搜索、发现和零售业未来的十个预测:

  1. M & A 势头: 并购一直 相对于疫情之前的水平,今年相当平静 ,因为投资者一直很谨慎,专注于保存资金。我们预计活动将会增加。证据?我们最新收购的Search . io…an M&这一举动帮助我们创建了世界上第一个也是唯一一个在单个 API 中结合关键字和 矢量搜索 的混合搜索引擎。
  2. 抑制通货膨胀:从商品到汽油的高价格已经把消费者推到了边缘,因为他们不断地重新评估他们的支出预算。消费者不想减少购买(尤其是假期即将来临),所以他们将依靠信贷来度过任何艰难时期。
  3. 说到通货膨胀,我们看到了零售商专注于其 普通品牌产品 的机会,比如家庭用品、服装和杂货,与名牌相比,这些产品以对通货膨胀有利的价格提供了巨大的价值。
    *** 关注搜索成熟度 :没有数据提供相关结果,你不可能有好的 搜索体验 。品牌和零售商在他们的搜索和发现中已经越来越意识到这一差距,并正在努力收集和提炼适当的信息,以提供更好的客户体验,尽可能挤压所有可能的转换..* 机器学习接管 : 机器学习 将接管零售商自动管理库存的方式,通过匹配实时数据来提供和推动更好的决策。随着员工成本的增加和利润率的压力,品牌将依赖于更加自动化的流程。* 混合搜索将占据主导地位 :为了让客户体验更上一层楼,预测意图和上下文含义是吸引消费者并向购物车中添加商品的关键——进入混合搜索。将他们带到与他们的搜索查询略有相似的商品的页面已经不够了,零售商需要不断地 改进他们的搜索能力 以准确地提供客户想要的东西,以及他们可能想要与他们最初购买的商品相匹配的东西——即使他们很难描述他们需要什么。* 混合购物的兴起: 消费者想要他们现在想要的东西,所以网上或店内缺货不会阻止他们今天得到他们需要的东西。 试试网上,店内提货 势头越来越猛,很可能在一年中最繁忙的购物季造成混乱。如果消费者在网上买不到他们想要的东西,他们就会跑到商店去找,这就要求零售商完善他们的全渠道战略。* 视觉搜索提速 :截至 2022 年 8 月, 30%的美国成年人 使用过视觉搜索购物。视觉搜索通过人工智能使用现实生活中的图像来指导用户的搜索查询,而不是文本。智能手机和 Pinterest 等社交媒体平台正在采用这种策略让用户购物——只需拍一张照片或点击你在 feed 中看到的照片,你就会被重定向到有该商品出售的网站。* 在线购物并未消亡 :尽管最近 Meta 和 Instagram 停止了在美国的在线购物计划,但社交商务仍然是零售商的一项资产——尤其是【Tik Tok】。* 语音搜索是发现资产:“Alexa,请把洗发水加到我的购物清单里。”这是一个为顾客提供充足选择的机会,他们可以选择购买哪种洗发水。如果一个品牌针对 语音搜索 进行了优化,那么它应该能够让自己的洗发水产品排在顾客考虑列表的首位。基于发现的查询是品牌认知和购物车转换的重要机会。**

**对于搜索和发现来说,未来是光明而令人兴奋的,每天都有新的功能被构建出来。在过去的几年里,搜索和发现已经越来越接近于希望获得新客户和吸引现有客户的企业的优先事项列表的顶端。2022 年对搜索来说是革命性的一年,我们只会继续前进,让我们搜索信息、产品和娱乐的方式变得更好。

想了解更多关于搜索发现如何让您的组织受益的信息吗?碰上一些神奇的阿洛利亚专家为 做了一个现场演示 。**

了解 Algolia 的压缩算法如何受到闪电和硬币分拣器的启发

原文:https://www.algolia.com/blog/engineering/algolias-compression-algorithm-inspired-by-lightning-and-coin-sorters/

在 Algolia,我们存储了大量的数据。在如此大的规模下,效率已经成为我们首要关注的问题——但是我们如何将如此多的输入数据放入一个可以在几毫秒内搜索完的索引中呢?

我们用一种非常有效的叫做树搜索的方法来解决这个难以置信的难题。一开始可能有点难以理解,但如果我们在深入研究之前先使用一些更熟悉的类比,将会很有帮助。

欧元和电子的算法

想象一下我有一个手动硬币分类器(这是一个的广告,如果你想看的话),你可以把硬币丢到一个导轨上。根据硬币运行轨道尺寸的变化,硬币按其大小落入不同的容器中。这种简单的机制不需要复杂的电子设备来读取和理解硬币代表的内容,而是记录它们之间的简单区别——它们的小尺寸差异——并通过在轨道上的几个关键点强制做出某种“决定”来利用它。实际上,你可以想象分拣员“问”硬币,“你够大了吗,可以继续沿着这条路走下去,或者你应该被分开走上一条新的道路?”

闪电是这种算法在实践中的另一个很好的例子,所以让我们浏览一下为什么闪电会有它的形状背后的科学表面。看看下面这幅闪电的图像,记住闪电本质上是一束非常兴奋的电子试图到达一个电子较少的地方:

image of a lightning strike

虽然我们很多人经常看到闪电,但我们可能从未想过这种模式有多奇怪。真的,如果闪电只是电子试图尽可能快地从 A 点到达 B 点,那么它们肯定会沿着直线前进,对吗?为什么闪电会走这么尖的弯?为什么会分裂成树枝?

老实说,这是一门正在发展的科学(我们的科学关注的是另一种不同的云),但一般的解释是闪电不是一次形成的。电子在离云层只有几十米的地方往下跳,停顿片刻,做出某种决定。根据它们周围空气的电导率(这是非常不规则的,因为“空气不是完美的混合物”),电子将“选择”采取不同的方向进行下一次跳跃。正是通过这一过程,它们跳跃到地面,每一步都扭曲甚至分支。虽然它看起来是随机的,但正是因为这个原因,闪电实际上是确定性的——如果我们可以在大致相当于每一步长度的规模上重建相同的空气混合物,我们理论上就可以重建已经存在的闪电。

硬币分拣机和闪电看起来是截然不同的现象,但如果我们剥离细节,它们实际上遵循类似的递归过程:

  1. 一些物品沿着轨道行进一段距离。
  2. 他们通过一些特定的方面分析轨道上的每个项目,并决定它是否应该分支到新的路径上。
  3. 对于轨道的所有新分支,重复步骤 1。

这是一个相当简单的算法,但这使得它非常通用。当谈到闪电时,击中地面的各种闪电的强度映射出它们上方空气的导电性(第二步的神秘“因素”)。硬币分拣机实际上是利用这种效应建造的,因为硬币分拣机的全部意义在于,每个桶中的硬币数量反映了首先进入轨道的硬币大小的差异。

树搜索的工作原理类似

如果我们有一种分支结构,像闪电穿过的空气或硬币滑落的轨迹一样工作,会怎么样?在这个基于节点的结构的每一步,我们都要通过将节点与搜索查询进行匹配来决定下一级的分支。本质上,我们对空气传导率或硬币大小的类比是查询相关性。通过逆向工程我们期望如何遍历这棵树,我们可以建立它!

假设我们的数据集是七个字符串:romaneromanusromulusrubensruberrubiconrubicundus。我们第一次尝试用这些数据构建一个树,将从树的顶层的r开始,然后向下的每个分支将一个字母一个字母地拼出我们的一个可搜索项目,如下图所示:

Tree search branch example image

现在,我们可以将每个字符串指定为每个交叉点上的一系列移动!例如,我们的原始字符串romulus可以描述为第一个分支处的第三个选项,以及其余连接处的第一个选项— 311111。不过,这只是为我们每个字符串节省了一个字符,因为连接点比字符数少了一个。让我们看看是否可以通过横向组合相同的字符来优化这一点,就像我们对第一行中的r所做的那样:

Tree search branch example image with characters combined laterally

这并没有缩短查询时间,因为遍历树需要同样多的步骤,但是现在已经干净多了!理解起来就容易多了,而且只占用了之前版本 65%左右的存储空间。它还提供了垂直组合节点的可能性:

Tree search branch example image with nodes combined vertically

这个新的、更短的树包含的数据量与前一个树相同,但是遍历起来要快得多——同一个查询romulus只需要我们经过两个交叉点,而不是前六个。当然,这是一个相当人为的例子,存在多种优化途径的情况,但要点就在这里。

树搜索实际上是用于什么

而且这也不仅仅是理论上的事情!树搜索是一项非常知名和常用的技术,您可能每天都在使用它而不会注意到它。像 JPEG 和 MP3 这样的格式包含了树搜索的版本(具体来说是一种叫做霍夫曼编码的相关技术)以获得压缩的好处,这可能是通过手机联系人列表进行搜索的动力。另一个常见的例子是抽象语法树,这是一种保存编程语言标记的树形结构。像let x = 100;这样简单的代码行不会直接由解释器或编译器运行,因为它并不知道如何处理完整形式的字符串。相反,它会把它分解成这样:

let x = 100 visualized

=;这样的语法细节有助于解决歧义,但它们实际上对代码的功能没有帮助。一旦代码被转换成一个清楚理解的树结构,编译器或解释器遍历树并一次运行或编译一个命令就不再需要这些语法了。

在 Algolia 这里,我们被问了很多问题,我们是如何让我们的搜索工具变得如此之快。真的,乍一看,我们可以整理数百万个数据点——JSON 对象、字符串内容、数字、URL、布尔值——但仍然可以在几毫秒内找到用户想要的东西,这难道不合理吗?嗯,我们不是魔术师;我们用的是树形搜索!

如前所述,我们选择了只有七个相似字符串的例子来展示这种算法的能力。实际上,对于这么小的典型数据集,树搜索几乎不会带来任何改进,因此很难为本文创建一个实用的数据集。随着数据集变大,真正的优势出现了,数据集的新条目中的信息更有可能已经包含在树的一部分中。这实际上可能比你想象的要快,有几个原因,其中最重要的是某些字母在句子中不会互相跟随。例如,作为不同分支并排放置的字符不遵循预期的均匀分布,并且可以垂直聚集到一个节点的字符序列比随机生成的文本更频繁。

作为一个题外话,这实际上允许我们相当容易地纠正错别字。包含W的节点不太可能是包含g的节点的父节点,因此用户可能指的是在我们现有的树中出现在W之后的最常见的字符,或者是碰巧在键盘上附近的字符,这些标准通常会集中在h.上,树越大,这就越有把握。

新添加到树中的平均分支点在结构中变得越来越靠下,我们将开始为新条目的每个字符需要更少的新存储空间。这意味着随着数据集的增长,Algolia 的搜索索引(本质上只是巨大的树结构)变得越来越有性能。出于这个原因,一些最知名的 Algolia 客户正在建立令人难以置信的大索引(想想 GitLab 文件中的指南,或者亚瑟王烘焙发布的食谱,或者 T4 GoFundMe 的筹款人,或者关于古驰产品的细节。这就是说,搜索速度和这些大规模数据集的大小不会随着它们添加更多信息而线性增长,而是实际上趋向于某个地方——如果你有时间和耐心,理论上你可以计算出古驰产品数据库的存储空间和搜索速度的极限,因为记录数接近无穷大!

也许我们现在应该就此打住,因为如果我们继续这种思路,我们可能会陷入一个很深的兔子洞。但是如果你觉得这个解释很有趣,这里有一些要点、进一步研究的链接和值得思考的问题:

  • 你每天都用树搜索。它们可能最常被实现为霍夫曼树,或者如果你是程序员,则被实现为 ASTs
  • 就像闪电中的电子穿过天空并选择最导电的路径一样,我们的树搜索算法本质上只是我们的搜索查询沿着树向下移动并找到最接近的可用匹配。还有哪些自然现象是这样的?
  • 优化树的大小和优化在树中搜索的速度是两码事:为了减小树的大小,我们将横向组合等价的节点,但是为了减少搜索时间,我们将纵向组合连续的单个子节点。这两个过程如何相互作用?
  • 这种通用算法是 Algolia 在处理大型数据集时无与伦比的性能的核心。如果你有兴趣在小范围内进行测试,我们的免费层足够大,可以开始感受树搜索优化的好处。

我们希望你喜欢这种深入的树形搜索,如果你想让对话继续下去,请像往常一样,随时在 Twitter 上联系我们。

Algolia 的下一波增长

原文:https://www.algolia.com/blog/algolia/algolias-next-wave-of-growth/

经过广泛的搜索,我很高兴向大家介绍 Algolia 的新任首席执行官 Bernadette Nixon。Bernadette 最近担任 Alfresco Software 的首席执行官,并带来了丰富的技术公司经验,从 Alfresco 到 OpenText 和 CA Technologies,这将帮助 Algolia 达到新的增长水平。

Bernadette 的经验和成熟的领导技能将加速我们的使命,使我们的客户和各种规模的公司能够建立和提供令人愉快、鼓舞人心的用户体验,帮助他们发展业务。

她强烈的目标感和紧迫感将指导我们继续关注:

  1. 确保我们的客户在 Algolia 取得成功;
  2. 扩展和升级 Algolia,以支持我们客户不断增长的需求;
  3. 打造融合最新技术的创新产品,包括人工智能、 个性化分析 让我们的客户在任何地方都能交付最佳体验;和
  4. 投资我们的合作伙伴,这样我们就能一起让我们的客户成功。

Bernadette 和我都对我们的客户使用我们的平台所取得的成就感到兴奋。我们看到了爆炸性的增长,包括安德玛、Dunelm、RealReal 和 ManoMano 等电子商务网站,Discovery 和 Dailymotion 等媒体和流媒体公司,以及 Stripe 和 Slack 等科技公司。超过 9000 家公司在 120 个国家使用 Algolia,我们的平台将在 2020 年支持超过 1 万亿次搜索,每天接触六分之一的网络用户。

虽然这证明了我们的客户、合作伙伴和员工共同取得的成就,但我们相信这只是一个开始,因为每个公司,无论大小,都必须为其用户在世界任何地方的任何设备上构建、定制和个性化令人惊叹的搜索和发现体验。

过去 8 年来,Algolia 一直是我生活的中心,我比以往任何时候都更信任这家公司和我们的员工。虽然我不会保留运营职位,但我将是 Algolia 最强有力的支持者,并将作为一名尽职的董事会成员继续支持 Bernadette 和团队。

感谢您一直以来对 Algolia 的合作和信任,请和我一起欢迎 Bernadette 加入 Algolia 大家庭!

谷歌网站搜索的替代品

原文:https://www.algolia.com/blog/product/alternatives-to-google-site-search/

曾几何时,谷歌为企业提供了一种简单、无广告的方式,将搜索功能整合到他们自己的网站上。按月付费,公司可以使用谷歌网站搜索来索引他们的网站,并允许访问者搜索网站的内容。这使得资源有限的公司能够提供强大的搜索功能,而无需构建自己的系统。

谷歌于 2017 年 4 月停止了谷歌网站搜索,转而采用一种新的解决方案,名为定制搜索引擎(CSE)。在这一声明之后,公司必须决定是试用谷歌的新网站搜索工具,还是转向另一家网站搜索提供商。

请继续阅读,了解更多关于谷歌定制网站搜索以及谷歌网站搜索工具潜在替代品的利弊。

什么是谷歌定制搜索引擎?

谷歌定制搜索引擎,继 谷歌网站搜索 之后,允许网络开发者为自己的网站和外部内容创建定制搜索引擎。

该解决方案提供了多种优势:

  • 费用: 基本功能免费使用。
  • 开发者可以选择搜索引擎应该索引他们自己或其他网站的哪些页面。
  • 简单性: 程序员很容易使用 JSON API 将搜索服务集成到网站中。

不过,Google CSE 也能给很多商家制造挑战

  • 广告: 大多数网站的搜索结果都会包含 Google AdSense 投放的广告。(非营利组织可以申请免于展示广告。)虽然网站管理员可以 阻止某些类型的广告 显示,但他们没有完全的控制权。
  • 额外费用: 完全屏蔽广告每 1000 次查询要花费 5 美元。如果你的网站搜索被频繁使用,这个成本会迅速增加。
  • 对品牌形象的影响: 网站访问者 倾向于不喜欢广告 ,这会分散注意力并引发隐私担忧。大多数不了解 CSE 如何工作的普通网站用户,可能会错误地认为你的企业应该对显示广告负责,这可能会损害你的品牌形象。

谷歌网站搜索的替代品

对于那些希望对搜索结果有更多控制权或者不想在搜索结果中显示广告的企业来说,有很多选择。

有些作为内部平台运行,有些则是托管在云中的 SaaS 解决方案。这些解决方案在功能、好处以及它们最适合的行业和内容类型方面各不相同。

SaaS 网站搜索解决方案

SaaS 对于开发者来说,搜索解决方案通常是最容易集成到他们的网站中的。

大多数都提供了 API,程序员可以用它们来指定一个自定义搜索工具应该出现在网站的什么地方,如何出现,以及应该显示哪些类型的内容。SaaS 网站搜索解决方案通过 索引网站内容 并自动交付搜索结果来处理剩下的工作。将托管和维护的责任移交给 SaaS 提供商可以减轻内部开发团队的压力。这些团队可以由更少的人组成,花更多的时间在业务创新上,花更少的时间保持事情顺利进行。此外,运营成本也降低了,因为不再需要存储和服务器等基础架构。最好的 SaaS 提供商应确保高服务可靠性,并根据您的业务需求进行配置。

尽管所有 SaaS 解决方案都提供了优于内部解决方案的显著优势,但还有许多其他功能可能会让您的站点搜索合作伙伴关系更加有利可图。诸如 分布式搜索基础设施、 多语言优化等功能,以及支持网络、移动和语音等多渠道的能力,可能有助于 SaaS 解决方案脱颖而出。

有许多供应商可供选择。像SiteSearch 360swift type,当然还有Algolia这样的提供商服务于一系列用例。然后,还有类似CludoKlevu 这样的专业化电商解决方案。此外,一些通用解决方案与许多内容管理系统和电子商务平台进行了一系列集成。确保您选择的工具愿意与您合作,以提供最定制的体验。

来自顶级云提供商的替代方案

主要的公共云提供商也提供定制的站点搜索解决方案。这些服务完全托管在云中,但是它们不同于上面描述的 SaaS 选项,因为它们是更大的云计算平台的一部分。对于那些已经使用主要云提供商来满足其他需求(如虚拟服务器托管或其他通用云计算)的公司来说,这些服务可能是一个有吸引力的搜索解决方案。虽然您的公司与少一个供应商合作可能更简单,但这些解决方案通常几乎不可能根据您的特定业务需求进行定制。

在这个领域有两个受欢迎的竞争对手:

cloud search,亚马逊网络服务(AWS)提供的定制搜索服务,提供了大量的可配置性,并拥有高级功能,如高亮显示和自然语言支持。然而,索引可能是一件麻烦的事情,因为新字段在被索引之前是不可搜索的,并且它一次只能搜索一个索引。Azure Search由微软 Azure 云托管,提供人工智能定制的搜索结果,部分基于驱动该公司必应搜索平台的同一引擎。这两个选项的定价取决于各种因素,如存储和地理区域,可能很难预先确定。此外,这两种解决方案都没有为业务用户提供用户界面定制,以控制体验或分析能力

【默认】或【本地】站点搜索

许多内容管理系统(CMS)或电子商务平台都带有预打包的本地搜索解决方案供您使用。但是你不应该在没有确保它满足你所有需求的情况下默认使用默认搜索。让我们看看这些选项。

WordPress 等 CMS 搜索解决方案

如果你使用 WordPress,一个非常流行的开源内容管理系统(CMS)来建立你的网站,你可以使用 WordPress 的内置搜索工具来索引网站内容。你可以把小工具 放在你站点上任何你想要的地方 并且改变搜索栏的标题。但差不多就是这样了。

大多数其他主要的 CMS 平台,如 Joomla 和HubSpot,也提供内置的站点搜索功能。好的一面?少了一个需要打交道的供应商。坏处呢?总的来说,他们没有提供一个强大的个性化的搜索算法,功能的广度也很缺乏。幸运的是,大多数第三方 SaaS 搜索解决方案可以轻松地将 集成到任何 CMS 平台

电子商务平台内部搜索解决方案

一些电子商务平台,如 Magento、Shopify 和 Prestashop,也提供内置的搜索解决方案。虽然这些搜索解决方案很有吸引力,因为它们不需要任何额外的安装或成本,但它们无法提供与可定制的独立网站搜索解决方案相同的速度和质量的相关电子商务结果。在这些平台上实现强大的电子商务搜索的推荐途径是使用独立搜索解决方案的插件来扩展它们。

开源解决方案

作为上述 SaaS 网站搜索解决方案的替代方案,企业也可以在自己的服务器上创建和部署搜索工具。但是要注意,部署开源解决方案需要大量的工作,因为搜索系统需要从头开始构建。此外,实施、维护、扩展和升级系统的责任完全落在站点或企业身上。如果出现问题,没有专业的支持服务可以求助——除非你付费。随着时间的推移,这些成本加起来会使总拥有成本高于托管解决方案。

然而,这些开源工具可以免费下载和使用。对于其中的许多工具,开源开发者社区非常活跃,您的公司可以从社区开发的特性中受益。不过,这个选项最适合那些拥有大量资源和知识,知道如何从头开始创建一个有效的搜索算法的人。

两个流行的开源解决方案是 Solrelastic search。虽然这两种解决方案几乎可以在任何站点上使用,但是您需要技术知识来实现和维护它们。对于大多数较小的站点(或优先级较高的较大站点),这种维护可能是不必要的投资。此外,如果您打算将这些解决方案用于,请记住,这将需要 对网站 的后端和前端进行大量投资。

选择最佳谷歌网站搜索备选方案

多亏了谷歌网站搜索留下的空白,公司有了一长串可供选择的解决方案。做出这样的决定肯定会很困难。

有些网站搜索解决方案是为特定垂直行业量身定制的,例如 SearchSpring、EasyAsk、SLI 和 Nextopia all market to e-commerce 网站,选择一个专门为您的行业设计的搜索平台可能是有意义的。然而,许多看似“普通”的网站搜索解决方案可能会提供你成功所需的所有工具。你应该确保解决方案符合你的网站的需求,而不仅仅是你的垂直需求。

当谈到现成的网站搜索解决方案时,有几个因素需要权衡,以决定哪一个选项最适合您的需求:

    • 搜索定制 :能够控制用户看到的结果对你来说有多重要?避免显示某些类型的内容(如政治敏感材料或脱销产品)是否至关重要?您希望能够设置规则来控制搜索引擎如何响应某些类型的查询吗?
    • 分析 :搜索会产生大量的数据,这些数据可以帮助你了解你的用户想要什么。提供结构化工具来帮助你解读这些数据并采取行动的搜索平台,将在竞争激烈的网络世界中助你一臂之力。
    • 速度**:并不是所有的搜索工具都能提供快速的搜索结果,尤其是当它们必须解析大量数据的时候。但是在谷歌主导的搜索世界里,网站访问者倾向于即时结果。你的网站搜索能提供必要的速度来保证积极的用户体验吗?**
      *** 个性化 :即使两个用户可能搜索同一个查询,他们理想的搜索结果也可能不同。这就是为什么在搜索平台的搜索结果中添加个性化层有助于确保满足用户的期望。* 实现和支持 :你的开发人员和 IT 团队在设置搜索工具方面有多少专业知识?如果他们在这个领域的经验有限,那么选择一个需要最少设置并提供足够客户支持的工具是有意义的。* 维护: 如果你在自己的硬件上建立了一个服务器端的搜索解决方案,你将不得不无限期地维护那个硬件。SaaS 解决方案消除了这种需要。您是否有带宽和资源来维护内部解决方案?* 视觉设计:搜索界面的可用性和视觉设计是客户体验的重要组成部分。你正在研究的工具考虑到这一点了吗?**

*** 集成:一个能与你的网站使用的平台、插件和扩展一起工作的工具是至关重要的。考虑一下你目前用来支持你的站点的工具,看看你的站点搜索的首选是否与这些工具(或者理想的替代品)相结合。如果他们不这样做,实施的道路将更具挑战性。

站点搜索同阿果

如果您正在寻找一个功能强大的网站搜索解决方案,该解决方案易于安装和配置,开发人员几乎没有经验,Algolia 是首选。作为一个完全托管的 SaaS 搜索解决方案,Algolia 的搜索功能可以使用 API、高级前端库和爬虫(如果需要)快速轻松地集成到网站和移动应用程序中。此外,Algolia 根据用户的个人需求个性化搜索结果,同时仍然提供极快的性能。

要在您的网站上查看 Algolia 的运行情况,请观看我们的 演示 ,它概述了 Algolia 的所有优质功能和专业客户支持。**

探索搜索和索引:实时索引场景

原文:https://www.algolia.com/blog/product/an-exploration-of-search-and-indexing-real-time-indexing-scenarios/

我们并不总是写搜索的数据或内容方面,我们称之为索引。老实说,我们认为索引是理所当然的。我们说,“将您的数据发送给我们”,然后,一旦解决了这个问题,您就可以开始关注关键部分了,即构建强大的面向客户的搜索界面、提高转化率、客户参与度和目录发现。

并不是说主要写如何构建一个伟大的商业价值搜索 UI/UX 有什么错。但是,由于没有谈论 Algolia 如何索引您的数据,我们跳过了一个位于我们提供的核心的步骤,并且为您的企业创造了与您构建的搜索界面一样多的价值。

搜索索引的价值在于 它可以 将任何和所有后台数据和文件类型转换为可搜索的数据 ,支持在全球范围内任何设备上对任何用户(客户、合作伙伴和员工)进行快速和相关的搜索。一旦将大量数据放入后端和前端之间的单一接触点,您就可以利用 Algolia 的全功能搜索& AI 在业务的各个方面处理任何用例,无论是内部还是在线。

索引作为前端和后端之间的中间层

在这方面,我们可以认为索引与搜索和推荐是同等的。

  • 首先,您所做的一切都与我们的 搜索推荐 产品引用回我们的快速索引和云基础设施

  • 我们的搜索速度取决于我们在服务器上索引内容和存储数据的方式

  • 我们在幕后管理、发送和存储您的数据的方式是安全、稳健、可靠的,并且能够在所有 B2C、B2B 和系统对系统使用案例中充当所有系统和所有潜在用户之间的中间层

大多数公司都有一个或多个通用数据库,用于存储产品数据、销售历史、客户、库存和财务信息等业务关键内容。Algolia 不是这些数据最初存储的地方。Algolia 不是一个通用存储数据库。它也不是管理特定业务功能的应用程序,如客户关系或产品和库存管理。

我们并不期望每笔销售都送到阿尔戈利亚。我们不提供这种搜索。这是专用 POS 系统的领域。但是 Algolia在后台办公室中有作用吗:它被构建来与每一个真实的来源接口,以提供由 任何 后台办公室系统馈送的快速且相关的可搜索数据集。其云基础设施提供了一个可靠、安全的可搜索数据层,位于后台数据源和任何向用户提供数据的前端之间。

阿果的力量在于帮助 表面 这些后台系统中的内容,将用户引向原始信息。例如,Algolia 可以用来存储足够的产品信息——价格、图像、描述、可用数量和受欢迎程度,以帮助客户购买或员工管理。在这个用例中,点击一个产品应该把用户带回一个产品页面,这个页面的细节直接来自原始数据源。

瞬时搜索,快速索引

为了满足所有前端搜索需求,Algolia 提供一个坚实的索引基础是非常重要的。我们将很快发布一系列关于“无头搜索”的文章,在这些文章中,我们将讨论我们的 API 优先索引如何将后端与前端分离,以创建可搜索数据的中间层。通过订阅我们的新闻简报 ,率先了解这些文章以及其他当前和未来的内容

让我们来分析一下 Algolia 的搜索和索引选项与产品之间的差异。

搜索

我们对 Algolia 进行了设计和优化,以提供 即时搜索结果 ,因此在输入信件和获得即时回复之间没有延迟。我们的 SLA 是确保搜索在 99.99%的时间内可用。以下是我们软件承诺和提供的一些细节:

  • 实时搜索
  • 相关性
  • 高级功能
  • 人工智能相关性
  • 前端 UI/UX 库
  • 商业利益——增加转化率和客户参与度

标引

每一次搜索的背后都隐藏着一个简单的索引框架——一个简单的调用就能以完全 灵活的格式 发送来自任何系统的任何数据。

  • 灵活性——我们可以为搜索目的构建任何数据
  • 大小——当托管在我们云架构中的多个实例上时,我们提供无限的数据容量
  • 安全
  • 全球可用
  • 可靠 SLA,始终可用

搜索 vs 索引

  • 搜索优先–每当请求搜索时,搜索优先于任何索引
  • 索引旨在返回速度最快、信息丰富且可随时显示的搜索结果
  • 良好的索引实践可以在不到 1 秒或长达 5 到 10 秒的时间内处理数据

为什么我们让搜索优先于索引?两个主要原因:

  • 为了满足用户的期望,即当他们键入查询时会立即得到结果
  • 不要错过任何一个搜索请求,因为每次搜索都是一次潜在的转化

典型的搜索和索引用例

典型的搜索和索引过程如下:

  1. 用户搜索一个公司的产品目录,最终想要转化(购买)。
  2. 用户在线或在商店购买产品。
  3. 在线或店内 POS 应用程序处理交易,并将数据发送到后端服务器。
  4. 后台销售软件(POS)存储交易。
  5. 根据公司的使用情况,后台会定期更新 Algolia 中的数据。也就是说,后台 POS 系统向 Algolia 发送新产品或更新的产品数据,如可用性和受欢迎程度数据,从而在用户不断输入搜索查询时影响向用户显示的新内容。

注意,重索引需要是 常规 ,而不是每笔买卖。一次销售不会改变目录。一天之内很少会发生重大变化,更不用说几分钟了。价格、可用性、促销活动和自定义排名(如受欢迎程度)需要时间来调整。

因此,我们的客户最关心的是确保 所有的 搜索都是成功的和即时的,并且后端更新足够定期和响应,以便及时考虑重大变化。通常,这意味着每 30 分钟,甚至 1 小时,或者一整夜。每个公司都为其不同的用例选择最佳的时间框架。

然而,有一些活跃的时间框架,公司需要 10 秒钟的更新,甚至是即时更新。让我们来讨论这些独特的用例。

高级搜索和索引用例

我们先来看一个定义再开始吧。

实时 可以表示:

  • 一旦在现实世界中发生,就会被考虑(在搜索中)的实际更新。这是一个股票市场的场景。
  • 更新发生后每 X 秒 考虑一次 ,其中 X 通常是一个较小的数字。

以下用例将需要其中一个。

临危不乱

这场危机始于一艘集装箱船陷入苏伊士运河的河床。它不仅无法运送自己的货物,还阻碍了其他集装箱船,因此也阻碍了世界上很大一部分货物的供应。在销售方面,世界各地的电子商务公司必须立即重新考虑他们的库存,以避免缺货订单。他们还不得不寻找替代品,调整促销活动,以保持在线目录像危机前一样吸引人。当他们的 IT 部门重新索引在线目录以删除被屏蔽的商品时,他们的采购员开始采购替代商品并重新考虑他们的促销活动。

在等式的另一边,批发供应商必须通过从他们的 B2B 目录中删除被封锁的商品来匹配新的需求,并将不同的产品推给他们的买家。

索引显示为三个部分:

  • 移除被阻止的项目
  • 添加新项目
  • 调整他们的促销活动

快速指数化在突然激增的买卖中(如黑色星期五)

另一种需要快速索引响应的情况发生在黑色星期五和圣诞节结束之间的 5 周内。在这种情况下,公司需要不断监控他们的库存,并保持领先于市场,以确保他们能够履行每一个订单,并通过每次搜索和促销,以最好和最重要的商品响应客户的需求。在这种情况下,他们相当频繁地进行监控,有些公司一天要监控多次。

在不断变化的在线目录(如市场)中快速索引

在这个场景中,我们有一个大型市场,独立供应商不断更新他们的库存。在大多数情况下,这些供应商并不拥有全部的物品库存;相反,他们拥有每种产品中的一种。因此,一次销售可能会导致产品无法销售,因此他们需要在销售完成后立即移除物品。一些市场允许用户暂时保留添加到愿望列表中的对象。

每个市场网站都想出了一个策略来管理这种不可预测且快速变化的缺货和产品持有量。以下是一些策略:

  • UI 明确提醒用户是否有货(在商品旁边显示“只剩 1 件商品”)。
  • 如果用户将商品放入购物车,用户界面允许供应商暂停该商品。
  • 用户界面明确地告诉其他用户某个项目是否处于暂停状态。他们可以将其添加到愿望列表中,并在该项目变得免费或不可用时收到通知。

易贝增加了一个额外的复杂性,物品的买卖通过拍卖和出价来改变价格。处理这种实时更新的方式取决于用户界面。然而,这种情况非常接近于需要对搜索 索引进行实时数据处理。让我们仔细看看最后一个用例。

实时行情中的实时指数

这里的情况是,每次供应商对产品(尤其是价格)进行更改时,他们都希望用户立即看到这一更改(以及任何相关的计算)。因此,它与典型的股票市场工具没有什么不同,你可以看到价格像闪烁的灯光一样变化。考虑一个在股票价格变化时买卖股票的自动化交易工具。任何延迟都会影响系统的竞争力,并可能造成巨额损失。

人们可能会怀疑是否有任何 B2C 场景需要实时索引。价格变化这么大,这么快吗?大量的人和系统基于最小的价格变化买卖商品吗?

也许 B2B 需要显示即时价格变化更合适。供应商很有可能实时出价高于对方。

在任何投标领域,我们可以将易贝加入其中,拥有最快的索引响应时间至关重要。

这就是我们对 快速标引 的用心之处。任何搜索引擎的索引速度会和它的搜索功能一样快吗?也就是说,虽然搜索引擎提供商在合同上承诺在用户键入时显示即时结果,但它不以同样的方式承诺“即时”或接近实时的索引。这是因为,为了实现实时搜索(以毫秒为单位的搜索),您必须以某种不可避免地需要时间的方式来索引数据(1 到 10 秒,取决于索引的大小和索引请求中的更新次数)。

Algolia 重视比数据库更快的搜索(毫秒),代价是比数据库更慢的索引过程(秒)。正如在上面的高级用例中所看到的,即使在危机或不断变化的库存/定价环境中,我们的索引引擎的速度也是可靠的、反应灵敏的,并且超出了预期。

下一个读数

本文提供了标准和高级索引用例的高级概述。我们的下一篇文章将带您了解索引最佳实践和标准索引过程的实现细节。接下来是一篇关于如何在高级用例中优化索引的文章。

我们剩余的文章将为我们讨论的一些高级索引用例提供前端和后端代码,从实时定价开始。

要了解 Algolia 强大的索引和云基础设施如何转变您的数字战略, 免费注册 ,亲自体验。或者 今天就从我们的搜索专家那里获得一个定制的演示

ML 101:什么是机器学习——现在和不久的将来

原文:https://www.algolia.com/blog/ai/an-introduction-to-machine-learning-for-images-and-text-now-and-in-the-near-future/

随着机器学习技术的显著发展,人们不禁会问—*下一步是什么?*但是 要谈论基于 ML 的搜索(使用机器学习的搜索)的未来,我们需要知道和理解已经存在的东西。在这篇文章中,我们将仔细看看两个流行的应用程序,说明了艺术的状态-图像识别和语义搜索。了解机器学习如何实现通过图像或描述性和基于问题的文本进行搜索,将有助于我们预测不久的将来。

我们将展示机器如何识别图像,以创建按图像搜索的功能。图像识别将提供对机器如何学习的直观理解。然后我们将继续进行语义搜索,向您展示机器如何学习单词的含义,从而使我们能够通过日常语言(习语、句子和问题)进行搜索。

我们将保持高水平。因此,不要期望看到任何数学模型或术语,如神经元、隐藏层、权重、偏差和成本函数。相反,你将理解驱动机器学习的 机制——这是在深入网络之前的最佳起点。

机器学习——识别像素和图片,寻找相似图像

监督式机器学习

如果你给计算机输入 1000 张狗和猫的图像,并正确地标注为“狗”和“猫”,那么一个 ML 算法最终可以知道狗或猫长什么样。它是这样做的:它将图像分解成像素,将像素转换成数字(代表颜色),将这些数字绘制在图表上,然后识别狗或猫图像的典型模式。一些像素可能包含鼻子(楔形或吻形)或耳朵(尖或下垂)形状的图案。

给每张图片贴上“狗”或“猫”的标签有助于计算机知道它的猜测是对还是错,以及错了多少。如果它是错误的,它会重新处理图像,锐化其模式检测,直到它最小化其判断的错误。当计算机能够预测到图像是一只狗或一只猫的时候,这个过程就结束了——这种可能性非常高。

有监督无监督学习

刚刚描述的狗和猫的图像识别算法被称为 监督 学习,这意味着它使用图像标签(或其他元数据)来帮助它学习。然而,贴标签是乏味的——也是不可能的:如果我们想让我们的机器理解这个世界,我们不可能给世界上的每一个物体贴标签。比如注释狗和猫很容易,但是在医学报告中注释预后又如何呢?所以我们需要一个不用显式标注就能学习的算法。我们需要教会计算机学习 无监督——也就是无标签。这是机器学习中的一个重大变化,影响了 ML 建模过程的所有方面。

然而,有一点是不变的:监督学习和非监督学习都依赖于错误检测;也就是说,它们都运行并重新运行 ML 过程,直到其预测中的误差最小化。有了监督学习,ML 模型使用了一个 真/假 错误分析(是狗吗?它是一只猫吗?);在无监督的情况下,虽然它可以使用二元是/否分析,但它更经常地对 的可能性进行概率测试。T42

无监督机器学习——对物体进行分类(聚类)

无监督学习使用 聚类——也就是说,它将对象分组到具有相似特征的类中。因此,无监督学习不是将一只狗与一只狗进行比较,而是将几只动物输入一个系统,并允许机器辨别具有相似特征的不同群体。计算机可能会发现猫和狗,但它也会发现像毛茸茸的动物、小动物、有牙齿的动物、有鳍或爪子的动物等群体。一般来说,无监督学习是基于我们输入到系统中的特征来寻找相似性和差异。

你可能更喜欢一个监督系统,把狗归类为狗,把猫归类为猫。但是,基于世界上存在的许多可能的相似性,一个无监督的系统可以检测许多种分组,这是一个非常强大的检索工具。例如,当你输入一张新的狗的图片时,系统不仅检索到一只狗,还可能检索到相同的种类和姿势。这是可能的,因为无监督学习场景考虑了所有详细的像素信息,所有这些都可以允许它根据物种和不同的姿势对动物进行分类。

这都是关于集群的。

Image clusters

来源:GraphicMama-team

机器学习识别物体,并根据显著特征进行聚类:1、毛茸茸的狗;2、嘴里有东西;3、反面;4、发现。

聚类——无监督的机器像孩子一样学习

机器学习模型将内容分解成小块(图片中的像素,文本中的单词),并为每一块赋予特征。例如,像素有颜色和形状,当它们放在一起时,就形成了一幅图片;单词被其他单词包围,当这些单词放在一起时,就形成了有意义的短语和上下文。

我们可以把机器想象成玩几何积木(立方体、球体、三维三角形等)的孩子。).游戏就是把他们组合在一起。一个孩子可能会感觉到并把它们翻过来。另一个孩子将品尝它们或将它们扔向墙壁,观察它们如何反弹。两个孩子都在通过寻找特征并根据相似性对物体的形状进行分类。第一个孩子用边和角;另一个用味道和密度。对于两个孩子来说,虽然他们可能无法命名物体,但最终会将立方体和球体放入不同的组(群)。

机器也是这样。我们告诉机器要看什么(形状、角度,也许不是味道),然后将大量不同的形状输入机器。该机器经历一个来回的过程(ML 模型和算法),直到它成功地将不同的形状聚类成有意义的类别。

模式和将世界分组为集群

大多数无监督学习模型将真实对象表示为一组数字,称为向量,因为计算机只能计算和比较数字。然后,机器获取这些数字集,并多次调整它们(就像一个孩子多次摆弄一个立方体一样),直到模型中出现清晰的模式,使模型能够将对象分成有意义的集群。

在几何示例中,对象很简单:三角形、正方形、圆形等。,其中每个对象由一个向量表示([边数、长度、宽度、角度])。如果您将每个对象的这些值的大样本输入到学习过程中,模型将执行一组计算,这些计算将转换矢量化的数字并将它们输出到图形(向量空间)上。这种转变就是学习发生的地方。起初,物体是随机分散的,但如果你将转换后的向量反馈回机器并重新应用计算,它们将被放置在二维图形的不同部分。彼此靠近的图像在意义上是相似的。正方形将靠近正方形,三角形靠近三角形,直线对象(三角形和正方形)将被推离圆形更远。

世界是由复杂的物体组成的

当然,世界没有这么简单。例如,基于 ML 的自动驾驶汽车如何识别一个孩子正在跑过街道?嗯,我们首先需要添加更多的特征,而不仅仅是二维的;我们需要 1000 个甚至几百万个维度,比如速度、运动、颜色、形状、大小、重量、方向等等。计算机输入系统的代表儿童奔跑的移动三维图像的特征越多,最终的聚类就越好——计算机就越“知道”汽车应该继续行驶、减速还是停车。

从图像到文本——无监督机器学习应用于文本

从图像到文本,应用于文本搜索的技术水平在过去 10 年里有了不可估量的发展。在这一节中,我们将看到机器学习如何取代或结合历史悠久的搜索技术来创建语义搜索,对单词之间有意义的关系进行分类和检测。

Word clusters and embeddings

奠定文本搜索的基础:非 ML 词匹配和关键词搜索

搜索建立在理解 文字——字母和单词——而不是 意思 。目标始终是将 单词与 单词相匹配,从而查询到文本的底层索引。

在 90 年代,使用自然语言处理(NLP)的高级单词匹配技术使我们能够构建强大的搜索引擎。当时我们无法构建任何语义。单词匹配依赖于理解语法和语言的词典和 NLP。单词匹配还包括创建预定义的规则和同义词,以及检测拼写错误和打字错误等技术。

最重要的是,关键字搜索和单词度量统计,如 TF-IDF(词频-逆文档频率),用于改善单词匹配。有些搜索引擎只匹配全词;其他的执行前缀匹配,这意味着搜索引擎一次一个字母地查询文本。前缀搜索返回用户输入的即时搜索结果。

这些技术中有许多非常强大,现在仍在使用。例如,当使用 结构化的 数据(如定义明确的对象)时,基于 NLP 的关键字搜索会立即返回完全相关的结果。想象一系列厨房产品,或者电影,甚至是建筑设计图。另一方面,像 TF-IDF 这样的基于统计的搜索方法更适合于长的 非结构化的 文本,其中单词的频率有助于确定相关性。例如,查找单词“whale”的频率,应该会出现莫比·迪克以及关于鲸声音和捕鲸业的书籍。

机器学习让关键词搜索更上一层楼。

机器学习和非结构化文本:寻找上下文

标准单词匹配技术缺少的是对文本的 语义 理解。使用有监督和无监督的学习技术,计算机可以查看数百万个具有数十亿个 单词关系 的文档来确定语义。例如,机器可以确定银行、共同基金和对冲都与金融机构和财务管理有关。当有人搜索“投资我的钱的最佳地点”时,机器学习算法可以开始对问题进行语义理解。

聚类和构建单词关系

与图像识别一样,机器学习涉及基于相似特征对单词进行分类(聚类)。对于单词,聚类会变得非常复杂,因为单词可以放在许多不同的聚类中。同一个词,如“跑步”,可以放在语法簇(动词,ing-words),体育,运动,动物做的事情,水做的事情,等等。这只是一个词。

我们举个简单的例子:如果用户问“今天有多热”,计算机可以检测出上下文(天气,尽管没有提到“天气”)和中心思想(温度,来自“热”)。考虑到这一点,一台训练有素的计算机可以回答如下问题:“今天的温度将达到华氏 90 度,请务必穿上轻便的衣服,并涂上大量的防晒霜!”。

机器如何学习聚类单词:寻找模式

类似于图像识别的功能,其中图像被输入到机器中以找到有助于对图像进行分类的模式,多个文档和短语可以被输入以辨别语义单词模式,这使得机器能够基于相似性和差异将单词划分成簇。

主要的技巧是看 短语 看每个短语中的每个单词是如何使用的。朗朗上口的公理“你应该通过它的同伴知道一个单词”,抓住了这个逻辑:计算机(和孩子)通过检查单词在有意义的文本和对话中如何使用来学习 上下文 。语境就是短语。

让我们用狗和猫可以互换的下列两个短语:“猫”和“狗跳上屋顶”。因此,“猫”和“狗”是相似的。猫狗也会“跳”——因此,猫狗可以群集在“跳”字附近。尽管桌子、飞机和地毯离“跳”这个词很遥远,但它们都可以“跳”出纸面…你可以看到它有多复杂!最终,你会得到大量定义明确且相互重叠的集群。

然而,这并不是一个小任务。你可以想象,如果对每个单词都进行这种语言学习,计算机可能会学习数十万个单词,其中有数百万种微妙的变化,结果谁知道会有多少重叠的簇。而且很多句子并没有包含任何有用的信息,比如“我看到了一只猫”——意思是猫是一个可以看到的物体,但是没有给出物体的种类

今天的语义搜索明天:将过去的工具与机器学习的进步混合在一起

自然语言处理(NLP)总是有必要筛选世界上 1000 多种语言的句法和语法,以及它们不同的规则和例外。

然而,语义搜索已经取代了手动创建同义词、规则或统计数据的需要。机器学习生成单词相似度,甚至比同义词更强大,建立一个不需要规则和统计的索引..

前缀、即时、关键词搜索呢?他们哪儿也不去,我们将在下面看到。

因此,回到本文的最初目标,在不久的将来会发生什么?

结构化文本和关键词

单词和关键词匹配永远不会消失,尤其是当内容是结构化的和标签良好的时候。甚至像“500 内存的廉价蓝色手机”这样的复杂搜索也可以用关键字搜索很好地解决,因为它基于关键字的结构很容易检测。

也就是说,机器学习仍然可以在结构化内容领域提供帮助。例如,当您输入“给我看看跳舞用的鞋子”,而产品列表中不包含“跳舞”这个词时,会发生什么情况?这就是语义搜索的亮点。多亏了语义机器学习,“跳舞”可以通过它的上下文来理解,其中包含舞厅、芭蕾舞演员、婚礼鞋和晚礼服等词的鞋子描述将与“跳舞”的鞋子在上下文中相似。

非结构化文本和机器学习语义

但是语义搜索最大的价值在于非结构化文本。不是所有的数据都可以被结构化。考虑一个在线书商。语义将帮助引擎理解查询“具有魔力的孩子”匹配哈利波特书籍,或者“混沌理论和恐龙”匹配侏罗纪公园书籍。

ML 和语义搜索的进步将继续推动 NLP 和关键词

基于 ML 的搜索将继续以显著的方式改变搜索。例如:

  • 费力的 NLP 编码将被基于 ML 的 NLP 取代,它可以理解语言的异常复杂性,在某些情况下,甚至比人更好。
  • 基于 ML 的图像搜索将与关键字搜索并行工作。例如,使用房屋图纸来搜索类似房屋的用户,也可以通过在搜索栏中键入“5 个房间”并点击小平面“木质镶板”来进一步深入。这是可能的,因为机器可以在图像识别过程中提取关键词,为每张图像创建关键词索引(和聚类)。

如果说机器学习的爆炸式增长有什么模式的话,那就是 ML 如何继续与关键词搜索、NLP 和其他强大的搜索技术相结合,以创建一个更强大的搜索和发现平台。

宣布面向 Salesforce 商务云的 Algolia 无头商务集成

原文:https://www.algolia.com/blog/ecommerce/announcing-algolia-headless-commerce-integration-for-salesforce-commerce-cloud/

今天,我们非常激动地宣布我们的 Salesforce 商务云套件。Algolia 和 Salesforce 客户现在可以轻松采用统一的无头架构,在每个渠道(从网站和移动应用程序到语音技术和信息亭)上创建基于创新产品的体验,以推动更多的客户参与和转化。

“Algolia 在育碧的在线体验中起着关键作用。我们使用 Algolia 取得了很好的结果,它非常容易与 Salesforce Commerce Cloud 集成并管理不同国家的配置。我们计划在 2020 年将 Algolia 的使用范围从 5 家扩大到所有 17 家在线商店。我们注意到,在搜索整合了 Algolia 的最新商店时,转化率提高了 35%。”

——育碧电子商务项目经理大卫·勒沃

让我们探索 Algolia Cartridge 为 Salesforce Commerce Cloud 提供的功能。

轻松将目录编入 Algolia

在后端,Algolia cartridge 使将 Salesforce Commerce Cloud 的产品目录同步到 Algolia 的任务变得非常简单,只需点击几下鼠标。Algolia Cartridge 自动索引商业云产品和类别,使其可搜索,并增强高级导航体验。联合客户可以定义他们想要在 Algolia 中索引的产品属性,使它们可搜索,在结果中显示它们,或者在 Algolia 的排名公式中使用它们。

扩充您现有的店面参考架构(SFRA),无需任何开发…

Algolia 的 Salesforce 商务云套件集成了 SFRA。它取代了原生搜索和导航体验,为在线购物者提供快速、相关和个性化的体验。可以使用全面的开源 Javascript 框架和预先存在的小部件来定制体验。

开箱,下面是阿尔戈利亚的异能:

丰富的产品和类别自动完成,允许输入错误,随输入搜索:

SSFC autocomplete

具有动态过滤功能的完整搜索结果页面,便于浏览:

2d gif

动态过滤分类页面,方便浏览:

这种原生前端集成带有内置的点击和转换跟踪,允许进行 点击和转换分析A/B 测试个性化 等等,一切都是现成的。

…或者,在每个频道上采用无头架构和全新的、创新的体验

虽然用于 Salesforce Commerce Cloud 的 Algolia Cartridge 与 SFRA 的店面进行了本机集成,但客户只能使用 Cartridge 的索引功能,并在每个渠道上构建基于定制创新产品的体验,在 Algolia 的 API 上采用无头方法。

利用我们的 API 客户端、先进的前端库和丰富的文档,Salesforce Commerce Cloud 客户可以在其在线商店上进行产品搜索和发现,还可以为商店员工提供配套应用程序、为客户服务代表提供库存浏览器、店内信息亭等。

为您的电子商务和销售团队配备直观的工具

Algolia 通过一个 视觉营销工具 l,一个用户友好的仪表板和高级搜索分析,提高了商业团队的工作效率。只需点击几下鼠标,即可发起促销活动,并对各种渠道、特定商品关键词或类别页面的最新趋势做出反应。 Algolia cartridge for Commerce Cloud 的用户可以访问 Algolia 的用户友好仪表板来管理体验,其中包括可视化销售工具、关联算法的轻松管理、个性化算法管理工具及其实时模拟器、A/B 测试工具等。

将多个云的内容汇集在一个统一的体验中

除了通过插件索引 Salesforce Commerce Cloud 产品和类别之外,Algolia 还可以通过其 API 和爬虫索引任何内容源,包括 Salesforce Commerce Cloud、Community Cloud 和 Service Cloud 中的内容,并将其引入 Algolia,以提供统一的搜索和发现体验。

如何入门

Algolia for sales force Commerce Cloud 现已正式上市。您可以通过sales force Commerce Cloud Partner market place访问它,并阅读我们的 墨盒文档 几下鼠标即可开始使用。

Algolia 与世界领先的系统集成商和数字机构合作,帮助零售商制定和实施正确的数字战略。联系我们,开始或加速您的数字化转型!

accenture logo

Algolia 在日本开设新办公室

原文:https://www.algolia.com/blog/algolia/announcing-expansion-japan/

在过去的六年里,Algolia 有幸与世界各地的领先公司合作,从世界上最大的在线市场之一到世界上最大的游戏公司之一,以及其他许多公司。除了提供闪电般的搜索和发现体验,在现代网站和移动应用程序中提供更好的业务结果,Algolia 的搜索即服务平台是语言不可知的,这帮助它迅速成为全球 6500 多家公司使用的顶级搜索解决方案。

随着我们的超高速增长,并继续在全球范围内扩大公司规模,我们相信我们需要更接近我们的客户——倾听、学习并建立长期的合作伙伴关系。

今天,我们朝着这一目标又迈进了一大步,宣布随着我们在日本东京的新办事处的成立,我们将向亚太地区进行全球扩张。

拥有 100 多家总部位于日本的客户,包括 Cookpad ( Komerco )、 CYDASaluCansell ,Algolia Tokyo 将能够更好地支持我们的本地客户,提高日语搜索的相关性,更好地了解我们的全球客户群,并吸引本地人才加入我们的世界级员工队伍。

日本文化丰富,语言、习俗和规范独特。有了新的东京办事处,我们现在可以更好地了解日本特定的业务和技术需求,例如,处理三种字母,包括日本汉字、片假名和平假名,标记日语文本以获得更好的搜索相关性,以及为我们的客户微调我们的解决方案。

Algolia 在巴黎、旧金山、纽约、亚特兰大、伦敦和现在的东京设有办事处,并在世界各地设有 70 多个数据中心,无论客户需要什么,无论他们需要什么语言,Algolia 都能为他们提供支持,同时提供他们自己的客户所期望的现代、闪电般的体验。

我们很高兴能够继续投资于我们的全球足迹和全球平台。今天就是一个例子,也是未来的一个征兆。在接下来的几周和几个月里,请继续关注这方面更多令人兴奋的消息。

宣布 Firebase + Algolia 搜索扩展

原文:https://www.algolia.com/blog/product/announcing-the-firebase-algolia-search-extension/

我们知道你为什么在这里。你想学习如何整合谷歌 Firebase Firestore 数据库与 Algolia 搜索。

Firebase Firestore 是一个 NoSQL 云数据库,它提供了将您的数据管理成多个集合的结构。它是可扩展的,无服务器的,它提供客户端和服务器之间的同步和离线模式。最重要的是,它非常安全,而且价格合理。

然而,Firebase 不支持开箱即用的搜索功能。为了解决这个问题,你需要求助于第三方应用 Firebase 推荐的应用实际上是 Algolia

我们有一个搜索产品,可以实现快速、相关、API 优先的全文搜索,并且有一个可靠的免费计划,可以轻松启动和发展您的产品。我们还为所有主要语言/平台提供了广泛的客户端库和 SDK 选择,并为我们的文档感到非常自豪。

然而,直到今天,整合 Algolia 和 Firebase 还涉及到一个非同寻常的 步骤 。今天,我们很兴奋地宣布 Firestore < > Algolia 扩展。

技术堆栈

让我提供一个高层次的集成图,说明我们试图用您的产品组合中的这两种产品实现的目标。

T32

那么,我们如何用新的 Firebase 扩展框架实现上述架构呢?

老派方式

有很多文章和 博文 描述了实现。其要点是使用云函数来实现监控 Firestore 数据库的逻辑,并将更改推送到 Algolia 索引。这需要在 Google Cloud 函数中编写代码来连接和监控 Firestore 数据库的变化,以及维护和支持集成。

街区上的新小子

在 Fireconf 2019 上,Firebase 公布了 Firebase 扩展框架。其思想是为用户提供由扩展提供者维护和支持的仅配置的扩展。正如在 Google I/O 上宣布的那样,我们很自豪能够在 2021 年成为该框架的一部分。只需点击一个按钮或使用 CLI 即可安装 Algolia 扩展,这将启动一个提供云功能的流程,以根据开发人员提供的配置信息监控 Firestore 数据库的变化。让我们来看看实际情况。

先决条件

1。导航到 Firebase 扩展列表页面

有关扩展的详细信息,请点击“查看详细信息”。

2。单击“在控制台中安装”开始安装过程。该过程的第一步是创建或选择一个现有的 Firebase 项目。

3。系统将提示您输入以下配置:

  1. 收藏路径,您的 Firestore 数据库中收藏的路径
  2. 字段,要发送到 Algolia 进行索引的文档字段
  3. Algolia 应用程序 ID
  4. 阿尔戈利亚指数名称
  5. Algolia Api 密钥
  6. 地点,GCP 地区部署云功能

注意:该扩展可以多次安装,以监控不同的集合,并将更改推送到中央 Algolia 搜索索引或每个集合的单独索引。

就是这样!现在,继续点击安装并根据您的意愿进行配置,别忘了给我们发送反馈:twitter.com/algolia.,配置愉快!

附:未来的改进

该扩展有一些已知的限制,将在未来的版本中解决。

  1. Algolia 相关性适用于小于 10kb 或根据您的计划设置的限制的记录。任何大于此限制的记录将被 Algolia 索引过程拒绝。在扩展的未来版本中,我们希望实现一个记录分割逻辑,将大记录分割成小记录用于索引。有关大型文档 的更多信息,请参考 发送和管理数据。
  2. 在将 Firestore 文档发送给 Algolia 之前对其进行重组,以提高相关性。

宣布新的 JavaScript API 客户端 v4

原文:https://www.algolia.com/blog/engineering/announcing-the-new-javascript-api-client-v4/

二月初,我们发布了 Algolia API 客户端 JavaScript v4,这是我们有史以来最强大的 JavaScript 客户端。它更快、更小、更灵活,并且完全支持我们的 通用 API 客户端规范 。值得注意的是,它包括以前不可用的方法,如零停机时间重新索引、跨帐户操作和许多其他复杂的操作。

好消息是它只涉及到对 API的最小改动,所以更新应该用不了 十分钟 : 升级指南

在本文中,我们将重点介绍这个全新版本的一些主要改进。

缩小了文件大小

我们的新客户带来了许多新功能;然而, 尽管增加了这些内容,但实际上 比【v3】小了

  • 精简版是 v4 上压缩的4.27 kbg,比 v3 上的 13.21 kb 有所下降。
  • 默认版本是 v4 上压缩的7.44 kbg,低于 v3 上的 19.35 kb 。

这相当于与前一版本相比, 总共减少了 64%的尺寸 。随着这种减少, 您的页面加载更快

零依赖

此外,我们还将 依赖项的数量从 15 减少到 0 。对,没错——0 依赖 。因此,我们不再冒险接收可能破坏客户端的第三方更新。

更进一步 DX

为了提供最佳的开发者体验,我们添加了一系列新的助手,它们不仅仅是 API 端点的简单映射。用户现在能够零停机地“替换所有对象”,或在应用程序之间“复制索引”,以及许多其他这样的多任务操作!下面是一些例子:

【T9

最新 JavaScript

为了优化开发者体验和类型安全,新的客户端是 完全写在TypeScript中。 得益于此,开发者将能够利用 开箱即用的可选静态类型和类型推断。

重新设计的架构

就像 v3 一样,我们 出货有两个版本:lite默认——这些都是 预定义版本 ,帮助开发者快速入门使用传统的:algoliasearch(appId,apiKey)

现在,得益于全新的架构,你可以 构建自己版本的客户端****适应你的需求 。这里有一个例子:

使用这种方法,开发人员可以注入他们自己的请求程序和日志程序,以及他们自己的缓存实现。好消息是,即使你注入你的具体实现,一切仍然在我们的 重试策略 下运行。

我们相信这种模块化有助于开发人员满足更高级用例的需求。

等等!

Algolia API 客户端 JavaScript 是 100%开源的,所以可以随意挖掘 源代码 来看看它到底是如何工作的。挖吧!访问我们的 文档

看到需要改进的地方?只需在 GitHub 上向我们发送请求。谢谢!我们希望你喜欢这个新版本!🎉

API 密钥与 JWT 授权:哪个最好?

原文:https://www.algolia.com/blog/engineering/api-keys-vs-json-web-tokens/

当你构建自己的 API 时,检查你的 用例 将帮助你决定为每个 API 实现哪些安全方法。对于某些用例,API 键就足够了;在其他情况下,您会想要 JSON Web 令牌(JWT)授权带来的额外保护和灵活性。所以在比较 API 密匙和JWT 授权时,胜者是..看情况。

所有 API 调用都需要某种程度的安全性和访问控制。具有合理 ACL 的 API 密钥可以提供足够的安全性,而不会增加太多的开销。但是随着微服务在几乎所有大小任务中的使用越来越多,您的 API 生态系统可能需要一种更统一、更细粒度、更安全的方法,比如 JWT 授权。

API 键正常时

使用基于云的搜索 API 的在线企业通常可以暴露只读 API 密钥,而没有太大的风险——如果数据的底层索引不包含秘密的话。事实上,客户端应用程序 应该 出于性能原因直接连接到云搜索引擎——从而暴露其 API 密钥——以避免在走向云之前更长时间的后端服务器之旅。另一方面,索引更新需要限制访问的 API 键,这些键永远不应该公开。

但是在两种用例(搜索和索引)中, API 键一般还好;没有迫切需要 JWT 授权的开销。

什么时候才能考虑 JWT 的授权

然而,API 越来越需要更多的灵活性和保护。JWT 授权不仅增加了额外的安全级别(下面将详细介绍),它还提供了一种更易于管理和更容易的方法来协调日常使用的大量 API 和网络。如下一节所述,通过生成包含用户和应用级信息(加密或散列)的 单个共享令牌 来帮助同一生态系统中的任何 API 确定令牌持有者被允许做什么,从而集中认证&授权。

**API 密匙,乍一看,似乎很简单——你只需要发送正确的 API 密匙就可以了。但那有点骗人。当您的生态系统依赖于许多集成的微服务时,管理众多的 API 密钥会变得混乱、不可靠,并且几乎无法管理。它们的数量会增加、更改、过期、删除、ACL 更改等等,而无需通知依赖这些 API 密钥的应用和用户。

借助 JWT,您为单点登录架构奠定了基础。 我们在下面的 一节中讨论这个切换到 JWT。

相关链接–

  1. 深究 API 密钥安全
  2. 对于 CLI 人员,一个全新的 Algolia CLI 工具
  3. 关于 Algolia 的安全性和合规性。

使用 API 密钥 vs JWT 授权

使用 Api 键

API 密钥直接、简单且完全透明。它们不代表任何潜在的信息,它们不加密秘密消息。它们只是一个不可读的唯一 id。

这里有一个客户端 javascript 中公开可用的 API 密钥的例子。该代码包括一个应用程序 ID (app-id-BBRSSHR ),它使用 API 键(temp-search-key-ere 452 sdas 56 qsjh 565d)来允许它进行搜索。应用程序 ID 是指您的一个面向用户的应用程序(如在线网站或流媒体服务)。API 密钥是临时的和短暂的(在一段时间后过期),以提供某种保护来防止不必要的使用或滥用。

import { hitTemplate } from "./helpers";
const search = instantsearch({
  appId: "app-id-BBRSSHR",
  apiKey: "temp-search-key-ere452sdaz56qsjh565d",
  indexName: "demo_ecommerce"
});

再比如:索引,需要更安全的 API 密钥。它有相同的格式(appId + apiKey),但它是私有的,因为它对公众是隐藏的,要么在编译的代码中,要么在后端的安全数据库中。App ID ( YourApplicationID)指的是后台系统。API 密钥(YourAdminAPIKey)可能是一个永久的管理密钥,为了简化维护,它一年只改变一次。

use Algolia\AlgoliaSearch\SearchClient;
$client = SearchClient::create(
    'YourApplicationID',
    'YourAdminAPIKey'
);
$index = $client->initIndex('demo_ecommerce');
$index->saveObject(
  [
    'firstname' => 'Jimmie',
    'lastname'  => 'Barninger',
    'city'      => 'New York',
    'objectID'  => 'myID'
  ]
);

使用 JWT 令牌

一个 JWT 令牌 是一个庞大的不可读字符集,包含隐藏和编码的信息,被签名或加密算法掩盖。它由三部分组成:标题、正文和签名。它们之间用一个句号隔开:Header.Body.Signature

EZPZAAdsqfqfzeezarEUARLEA.sqfdqsTIYfddhtreujhgGSFJ.fkdlsqEgfdsgkerGAFSLEvdslmgIegeVDEzefsqd

JWT 报头EZPZAAdsqfqfzeezarEUARLEA,包含以下信息:

{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

有不同的算法可用,例如RS256HS256。这里我们使用HS256,它要求在生成签名时使用一个私钥。“RS256”使用私钥和公钥组合。

JWT 体 (称为 有效载荷 )是sqfdqsTIYfddhtreujhgGSFJ,它包含用户的身份,帮助建立令牌用户的权限。它还给出其他信息,比如截止日期(越短越安全):

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

签名fkdlsqEgfdsgkerGAFSLEvdslmgIegeVDEzefsqd, ,它是通过使用 HS256 散列方法组合报头、主体和共享私钥而生成的,如报头中所示。

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

这就是你如何得到下面的令牌:Header.Body.Signature :

EZPZAAdsqfqfzeezarEUARLEA.sqfdqsTIYfddhtreujhgGSFJ.fkdlsqEgfdsgkerGAFSLEvdslmgIegeVDEzefsqd

关于认证的一句话&授权

API 密钥和 JWT 都用于认证和授权,但它们的工作方式不同。

  • 认证 允许用户或应用程序使用 API 的一个或多个方法。
  • 授权 定义了他们如何使用那些方法。有些 app 或用户只能读取数据;其他的可以更新;其他人是管理员(角色和权限)。API 键也是如此,由它们的 ACLS 管理——它们可以是只读的、写访问的或管理的。

API 密钥使用相同的 API 密钥进行认证和授权。JWT 授权在生成授权令牌之前需要一个初始身份验证过程。令牌生成后,将在整个生态系统中使用,以确定令牌持有者可以做什么和不可以做什么。

另外,API 密钥认证的是 应用 而不是 用户;而 JWT 对用户和应用程序都进行身份验证。当然,您可以使用 API 密钥进行用户级授权,但它并不是为此而精心设计的——生态系统需要为每个用户或会话 id 生成和管理 API 密钥,这对系统来说是不必要的负担。

关于更好的保护和安全的一句话

在安全性方面,API 密匙和 JWT 都是易受攻击的 最好的安全措施是为所有的端到端通信实现一个安全的架构。

也就是说,API 密钥在历史上不太安全,因为它们依赖于隐藏的 你可以用 SSL/TLS/HTTPS 隐藏密钥,或者限制它们在后端进程中的使用。但是,你不能控制所有的 API 使用;API 密钥可能会泄漏;HTTPS 并不总是可能的;诸如此类。对于 JWT,由于令牌经过了哈希处理/加密,因此它采用了更安全的方法,不太可能被暴露。

JWT 令牌中有什么信息?

API密钥 和 JWT 令牌 之间最显著的区别是,JWT 令牌是独立的:它们包含 API 需要的信息,以确保交易安全并确定令牌持有者的权限粒度。相比之下,API 键使用它们的唯一性来获得初始访问权;但是 API 需要在一个中央表中找到一个键的相关 ACL,以准确地确定这个键允许访问什么。通常,API 密钥只提供应用程序级的安全性,给予每个用户相同的访问权限;而 JWT 令牌提供用户级访问。

一个 JWT 令牌可以包含像它的截止日期和用户标识符这样的信息,以确定用户在整个生态系统中的权利。

让我们来看看你可以在 JWT 令牌中包含的一些信息:

iss (issuer): identifies the principal that issued the JWT.
sub (subject): identifies the principal that is the subject of the JWT. Must be unique
aud (audience): identifies the recipients that the JWT is intended for (array of strings/uri)
exp (expiration time): identifies the expiration time (UTC Unix) after which you must no longer accept this token. It should be after the issued-at time.
nbf(not before): identifies the UTC Unix time before which the JWT must not be accepted
iat (issued at): identifies the UTC Unix time at which the JWT was issued
jti (JWT ID): provides a unique identifier for the JWT.

示例

{
    "iss": "stackoverflow", 
    "sub": "joe", 
    "aud": ["all"], 
    "iat": 1300819370, 
    "exp": 1300819380, 
    "jti": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
    "context": 
    { 
        "user": 
        { 
            "key": "joe", 
            "displayName": "Joe Smith" 
        }, 
        "roles":["admin","finaluser"] 
    } 
}

JWT 授权提供了灵活性、可靠性和更多的安全性

这是一个场景。你有很多应用:

  • 允许我们跟踪所有用户的 API 使用情况的应用
  • 提供账单和客户数据的应用
  • 允许 API 用户在不同系统上更改设置的应用
  • 检索产品数据或业务内容的应用
  • 等等

用 API 键做

运行节目的 API 多了,问题就出现了。您将所有这些访问所需的 100 多个 API 密钥存储在哪里?管理太多的 API 密钥需要将 API 密钥表提供给生态系统中运行的所有应用程序。

因此,生态系统中的每个应用都必须了解数据库。每个应用程序都需要连接并读取该表。一些应用程序将被允许生成新密钥或修改现有密钥。所有这些都很好,但是变得难以维持。管理这个问题的一种方法是创建一个 API,根据这个数据库验证一个键。但是为此,您需要第二个身份验证系统来连接到这个 API。

不仅检索 API 密钥很麻烦,而且维护它们的持续时间和授权级别也很繁琐。而且并不是每个 app 都是 app 级别的功能,他们需要用户级别的权限。此外,API 的使用方式因系统而异。更糟糕的是,不同的应用程序共享 API 密钥,因此依赖于不同的应用程序来维护共享 API 密钥的正确访问级别。

切换到 JWT

任何需要认证的 API 都可以很容易地切换到 JWT 的授权。通过 JWT 授权,您可以获得基于用户的身份验证。一旦用户通过身份验证,用户将获得一个可以在所有系统上使用的安全令牌。用户(以及令牌)的管理是集中的。您设置了访问权限,并为每个用户提供了每个系统的不同权限。JWT 授权端点对用户进行身份验证并创建令牌。

有了这个架构,下一步就是创建一个单点登录到完整的生态系统中,并且只依赖令牌来获得权限。最后,最简单、最可靠、最易于管理的方法是创建一个端点,专门进行身份验证和授权,这样整个生态系统中的所有其他服务器都可以依靠这个中心点来授权客户端和服务器之间的 API 交互。

jwt single sign on authentication and authorization

总之,有时候 JWT 是绝对需要的,有时候又是多余的

作为一名应用程序开发人员,我在构建 API 时主要关心的是正确使用它们并提供正确的数据和功能。因此,我非常依赖 DevOps 的建议来推荐最佳和最易管理的安全性。但这不仅仅是安全问题。在一个大型生态系统中,我们需要一种简单而健壮的方法来跨多个系统和服务器访问微服务,这种方法最好通过集中身份验证和授权流程来实现。

【JWT】在以下两种情况下是矫枉过正:

  • 只有几个 API 的简单生态系统
  • 第三方原料药供应商。

第三方 API 应该易于使用和快速实现,集成时前期工作很少。此外,您需要共享用于签署令牌的密钥。所以两端都控制的时候最好,这在第三方场景中不太可能。您还需要信任实现。例如,API 可以选择忽略截止日期或 NBF(“不在此之前”)。

JWT 不是矫枉过正当…

当多个服务需要在一个巨大的网络上相互通信时,您会想要使用 JWT。集中和保护这些交流至关重要。当每个网络或应用程序需要基于用户而不仅仅是应用程序的不同访问级别时,这一点尤为重要。控制流量并能够对网络呼叫进行优先级排序也很重要。最后,在添加新的微服务或改进现有微服务时,您需要简单的即插即用体验。

相关链接–

  1. 深究 API 密钥安全
  2. 对于 CLI 人员来说,一个全新的 Algolia CLI 工具
  3. 关于 Algolia 的安全性和合规性。**

自动建议:自动完成建议的最佳实践

原文:https://www.algolia.com/blog/ux/auto-suggest-best-practices-for-autocomplete-suggestion/

你能领会暗示吗?搜索框中的自动完成建议怎么样?

更重要的是,如果你是零售商或在线媒体内容提供商,你能有效地为你的搜索框用户提供自动建议吗?

当你输入谷歌搜索词或使用其他高端搜索引擎如必应时,你可能已经注意到了自动完成功能。搜索框技术似乎越来越擅长预测人类需求。自动建议功能似乎在思考你可能想要什么,也许你的请求与其他人所做的流行搜索相一致。你在一家公司主页的搜索栏中输入几个字母(甚至只是一个字母),感觉就像在玩哑谜游戏:搜索引擎开始猜测。

汽车建议的定义

想知道自动建议和自动完成功能之间的区别吗?你并不孤单;很容易将它们混淆,人们经常将它们与包括 typeahead 和预测搜索在内的其他术语互换使用。

但如果我们要谈技术问题, 自动建议 是一个宽泛的概念,包括预测搜索用户查询,并根据部分输入的搜索词提供查询建议,通常在搜索栏下方的文本框中。

自动完成 本质上是自动建议的一个子集;当用户键入时, 自动完成单词和短语 ,而不是提供建议。

当然,自动暗示不仅仅是一个被疯狂猜测打断的室内游戏。搜索算法是基于大量用户数据专业设计的,因此它们可以“智能地”预测用户的想法。

不管优点如何,如今,如果你有一个可搜索的网站或应用程序,并想在竞争中领先或保持领先,为用户提供自动建议功能是必不可少的。

自动完成建议最佳实践

在实现自动建议时,哪些搜索功能会吸引你的受众并帮助他们快速找到想要的内容?这里有一些设计合适体验的最佳实践:

范围您的内容

自从 20 世纪 90 年代的网络泡沫以来,可用的数字内容数量激增;甚至一个电子商务网站可能包含数百个网页。涉水通过内容的泥潭不是用户的选择——他们 必须 能够立即缩小他们的搜索范围,否则他们将浪费时间,永远也到不了任何地方。

这就是范围界定的用武之地。在搜索引擎开始搜索之前,确定搜索范围有助于用户定制和缩小搜索查询。

范围“标签”根据类型对搜索查询进行分类,将用户指向网站的正确部分。一个很好的例子是谷歌搜索引擎的标签,它最初通过图像、视频和新闻等类别缩小搜索结果页面。

适用于: 提供丰富内容的网站和应用,这些内容可以按类型分类

例如: 亚马逊,其将产品划分为书籍、电影、家居、服装等类别。

提示

  • 让您的范围标签更宽泛(如电器、清洁产品)
  • 允许用户选择多个范围标签(这样人们就不会过早地排除整个产品类别)
  • 将范围标签放在搜索栏附近,以便于选择(然后让搜索栏确认选择)。

迎合移动搜索者

76%的消费者 使用移动设备的微型键盘购物,提供 优秀的移动友好搜索 可以极大地提高他们的购物成功率。

适用于: 拥有大量移动用户的网站或应用(如苹果地图)

举例: Gmail 自动完成

提示

  • 使搜索图标和输入栏足够大,便于查看
  • 提供快速预测(延迟不到一秒)
  • 用插件支持键盘导航和快捷键
  • 支持移动功能(例如,提供优化的用户友好界面)

提供高级搜索

研究表明,人们 偏好更少的选项 而不是更多的选择;超过一定数量的选择,他们变得不知所措。如果用户被过多的选项淹没,很可能会导致“行动瘫痪”——无法做出选择。

这对你网站的搜索意味着什么?简单来说,过多的用户搜索选择会扼杀你的转化。

保持精简的高级搜索可以帮助你的用户做出选择并继续前进。高级搜索是范围的扩展,有更多的过滤器供用户选择。它让搜索者可以快速导航到更具体的搜索结果,这在搜索结果很多的时候特别有用。

有用: 提供大量内容的网站或 app

举例: 右移

提示

  • 提供适当的 过滤
  • 有吨高级滤镜?不要试图把它们都塞进一页,在底部提供一个延续的“更多过滤器”按钮
  • 添加价值范围的滑块(如定价的美元金额)

记住人们最近的搜索

不记得你昨天做了什么?还是有希望的:你的搜索引擎也许能帮助你恢复记忆。

最近的搜索历史记录可以帮助那些可能已经变得忙碌或分心的用户回忆他们的搜索活动,并从他们停止的地方继续,目的是让他们第二次快速找到搜索结果。

适用于: 任何网站或 app,尤其是那些对用户来说决策旅程较长的,比如涉及昂贵购买的)

示例: 沃尔玛,它在搜索栏中显示最近搜索的下拉列表

提示

  • 不删除用户之前的搜索查询
  • 按照从最近到最早的顺序列出搜索结果
  • 在显示最近的搜索时,纠正错别字以潜在地节省用户时间

缩短建议列表

这种可用性改进技术建立在范围和高级搜索的基础上。短建议列表不需要用户没完没了地上下滚动,而是挑选自动完成的搜索建议,只显示最相关和最及时的(根据其他用户的趋势等因素)。

有用之处: 让搜索建议列表更合胃口

举例: 谷歌,将建议数量限制为 10 个

提示

  • 在桌面电脑应用上,将搜索建议限制在 10 条左右
  • 在手机等较小的设备上,可容纳的结果较少,建议列表最多为 4–8 条

提供语音搜索

语音搜索通过自动语音识别(ARS)工作,将口头建议翻译成文本搜索。说话会取代打字吗?也许吧。针对网站和应用的语音搜索肯定在增加,尤其是在电子商务领域。对于想要不用手就能搜索的智能设备用户来说,这尤其方便。

有用的为: 乡亲们赶路

举例: 谷歌地图

提示

  • 创建一个手机友好型网站
  • 为基于问题的关键词优化你的网站(语音搜索者比打字者更有可能提问)
  • 在你的内容中使用自然的“口语”语言(例如,用户更有可能以“展示给我看”或“我需要…”开始短语。

自动建议最好

有效的自动建议功能提供了 正确的搜索体验 ,让用户在发现、考虑或转化阶段(或三个阶段)参与进来。

想了解更多关于自动建议的信息,并开始使用这项技术来提升你的网站搜索用户体验吗?世界领先的企业信任 Algolia 的 搜索 API 能够提供令用户满意的搜索优化,并提高他们的底线。今天就开始 免费

搜索建议如何增加转化率

原文:https://www.algolia.com/blog/ux/autocomplete-how-search-suggestions-increase-conversions/

今天的网站访问者要求无摩擦的用户体验——尤其是在使用搜索时。因为领先品牌(谷歌、网飞等)设定的高标准。),用户希望立即找到信息,没有麻烦,或者他们只是在竞争对手的网站上这样做。组织必须使用过滤、联合搜索以及最重要的自动完成等功能来优化他们的站点,以支持无缝体验的需求。

想象一下,只需轻轻一击就能找到你要找的东西。这正是 autocomplete 所做的,也是它对转化率有直接影响的原因。

什么是自动完成?

当用户在搜索栏中键入内容时,自动完成功能会向用户提供搜索建议。它使用上下文来预测用户正在搜索什么,使他们能够停止键入,只需点击列出的项目。它也被称为预测搜索、提前键入、自动建议、随键入搜索或搜索建议。

优化良好的自动完成功能为成功和引人入胜的搜索铺平了道路。以流行的鞋类零售商 GOAT 的以下示例为例:当用户搜索一双 Yeezy 500 鞋时,他们只需输入首字母 Y 即可看到显示 Yeezy 500 的结果。在输入鞋的第一个单词和字母 5 后,他们会得到几乎所有可用 Yeezy 500 的结果。

Yeezy autocomplete search

5 种方式自动完成影响转换

搜索是联系用户和他们需求的好方法。事实上,将近一半的用户在访问一个网站时会立即进入搜索框。搜索可以提供一条赢得转化的途径。据发现,转化率可以提高 200%,添加自动完成功能可以促进销售额和转化率提高 24%。给你的搜索添加一个自动完成搜索框还有其他好处

缩短搜索所需的时间

自动完成搜索允许用户点击建议并直接进入搜索结果,从而减少搜索所需的时间。autocomplete 提供的即时反馈可以帮助改善网站的整体用户体验,引导用户找到他们需要的东西,并更快地转换。

增加搜索成功的几率

通过产生已知能产生相关结果的关键字建议,自动完成功能大大增加了首次搜索成功的可能性。适当优化的自动完成功能减少了影响搜索结果的打字错误或笨拙措辞的机会。总的来说,这减少了搜索体验中的挫折感,让用户更顺畅地找到他们想要的东西。

扩展用户对你网站的了解

使用自动完成功能,每次击键都是扩大用户对组织目录了解的机会。最佳的自动完成功能支持多种语言,使用户能够发现他们以前不知道的目录功能、产品和服务,使他们更加熟悉(和舒适)公司的网站。这种意识增加了转换机会、销售收入和客户满意度。

支持商品销售计划

自动完成建议是一种管理用户在你的网站上互动的内容和产品的方法。您可以根据用户在网站上的一般搜索行为,将搜索配置为首先显示最相关的项目。通常这是基于什么是最受欢迎的,流行的,或新发布的。

您还可以根据业务优先级和销售目标提供自动完成建议,例如,促销价格更高或利润更高的商品。您可以采取措施,通过自动完成规则来管理季节性商品销售,和/或通过自动完成为回头客设置体验和个性化。

提高对您至关重要的业务指标

即使转化不是你的首要任务,自动完成搜索也能帮你实现目标。自动完成搜索增加了购物车网站的平均订单价值,从而带来更大的收入。它还提高了用户参与度,尤其是对于电子商务之外的垂直行业。用户搜索信息的时间越少,他们实际参与网站内容的时间就越多。这两个好处都表明用户满意度更高,用户体验更好。

3 自动完成最佳实践

这里有三种简单的方法为用户创造最好的自动完成体验:

1。突出显示可扫描性建议

突出显示建议之间的相似或不同之处,以便用户可以轻松浏览、区分和找到与他们最相关的建议。由于屏幕尺寸较小,高亮显示在移动设备上更加重要。

安德玛强调了搜索建议中的相似之处,这样用户就可以很容易地看出它们的不同之处。在这个例子中,自动完成搜索建议都用粗体显示用户的原始查询“top ”,这有助于强调返回结果的不同类别。

Under Armour search suggestions

2。使用联合搜索

自动完成与 联合搜索 配合使用效果最佳。联合搜索将来自不同数据库和/或来源的结果交付到单个界面上。将这种方法与 autocomplete 结合使用,扩大了用户可以访问的结果范围,并且由于搜索界面中的建议,帮助他们更快地找到他们需要的内容。

Birchbox 的网站采用了搜索栏中的联合搜索。只需敲几下键盘,用户就能获得相关产品、相关品牌和有用的指南。

Birchbox’s site employs federated search
https://www . algolia . com/doc/guides/solutions/gallery/federated-search/

3。限制建议

重要的是不要给用户太多的建议。相反,给他们与他们正在寻找的东西相关的最佳建议。搜索分析能够洞察最有效的搜索信息,从而获得最佳结果。如果您不简化 autocomplete 的建议,它们对用户和组织都失去了价值。

使用自动完成功能创造有益的搜索体验

借助自动完成等有用的功能,您的企业可以显著减少从搜索到转换的时间。事实上,Algolia 的 即时搜索 (显示搜索结果和建议)为您提供了创建无与伦比的搜索体验所需的所有 UI 组件。

为你的网站打造一个奇妙的搜索体验可以推动业务增长。阅读我们的电子书“ 【超越框框的搜索】 ”来了解像自动完成这样的工具如何改善你网站的搜索体验,并帮助你最大化参与度和转化率。

自动完成(预测搜索):在线转换的关键

原文:https://www.algolia.com/blog/ux/autocomplete-predictive-search-a-key-to-online-conversion/

你有没有一个朋友会帮你完成句子?有人那么了解你,这很神奇,不是吗?

在科技世界中,这种互动的最佳伙伴的等价物是自动完成,也被称为预测搜索、提前键入、自动建议、自动填充和自动填充。当你试图在搜索框或文本框中输入你想要的内容时,在线搜索功能似乎会考虑你想要的内容。它是人工智能预测你接下来要输入哪个按键、单词或短语,然后尽最大努力完成你的句子。

自动完成中的冒险

例如,假设你突然很想吃巧克力圣代,想找一家冰淇淋店。你开始在手机的搜索栏中输入“ic”,甚至还没来得及添加“e”,就出现了令人垂涎的“我附近有冰淇淋”的想法。

啊,艾好了解你。而万一洒在石路上的是 而不是 你想要的,那也猜测一些备用的想法:iCloud,艾斯·库伯,冰岛。然后,您可以退出输入字符的烦人过程,单击正确的建议,并获得您的相关结果。

卑微的出身

根据维基百科,自动完成预测的概念最早是在 1967 年提出的。在其初期,autocomplete 的第一个应用是帮助身体残疾的人打字更快,减少他们在写作时必须击键的次数。

举例来说,建议的单词和短语的吸引力最终被证明要大得多,例如,在医生当中,他们不得不为难以拼写的药物开处方,因此很高兴有长名字提供给他们以方便考虑。另外,即使所有类型的非医生也能欣赏这种文本输入。

2004 年,谷歌推出了其自动完成技术的实验版本,开创性的“谷歌建议”,并于 2008 年发布。

你最初可以从谷歌搜索中获得的建议自动补全功能,会将其他人已经搜索过的数据考虑在内,这些功能无休止地古怪有趣,甚至激发一些人将其命名为“

圆满成功

今天,autocomplete 是一个熟悉的老朋友,它向使用搜索引擎、网络浏览器、数据库查询工具、电子邮件等的人提供听起来合乎逻辑的建议。网站访问者希望它就在那里,因为由于谷歌、亚马逊和网飞等公司设定的高标准,他们已经习惯了数字手持。他们期待即时的建议和正确的搜索结果;如果缺乏技术,他们会直接去竞争对手的网站。

事实上,自动完成让搜索变得更加容易和快捷,它已经被公认为可用性最佳实践。这是一件好事,因为尽管人们习惯于能够使用有效的搜索,但他们自己的搜索技能很糟糕:根据一项研究, 只有 1%的人知道如何调整他们的搜索策略以找到更有效的结果。所以没有自动完成功能,人们是不完整的。

后端细节

自动完成是如何发挥它的魔力的?都是算法的问题。基于各种因素,应用算法来识别当用户开始键入查询时他们将看到的可能的完成。自动完成算法可以考虑:

  • 当前正在谈论什么,有多少人在搜索它

  • 搜索者输入一个术语的次数或频率

  • 特定搜索建议的点击率

  • “语义”考虑,精确定位搜索者的具体意思——上下文; 同义词可以替换 来提高关联性

  • 在一个电子商务网站上,该网站查询先前输入并点击的潜在买家,并导致购买

操作选项

您可能已经注意到,您使用过的自动完成功能并不都以完全相同的方式工作。具体技术包括:

  • 在开始打字时立即提供建议,没有延迟,这不仅提供了很好的用户体验,而且看起来更像
  • 强调搜索建议之间的相似或不同之处。这使得快速扫描正确的项目变得容易(在小的移动屏幕上特别有帮助)。例如,在线零售商安德玛是如何强调相似性的——“top”是粗体:

  • 限制建议。重要的是不要让人们有太多的选择,所以您可以配置自动完成功能,只显示最佳建议,这是由搜索分析确定的。
  • 优化建议,即展示那些显示最相关结果的建议。这增加了搜索者第一次尝试的成功机会,减少了可能破坏搜索的打字错误和笨拙的措辞。自动完成建议通常基于业务相关性、来自 站点搜索分析 的数据以及业务目标。一个优化的自动完成搜索引擎是允许输入错误的,并且使用 相同的相关因子作为你的搜索引擎。
  • Teaming autocomplete 与 联合搜索 功能,扩展了可选搜索结果的广度。例如,在一个美容网站上,可以为购物者提供产品、相关品牌、编辑指南以及诸如“如何选择润肤霜”之类的提示

A 为自动完成,B 为利益

根据谷歌的统计,自动完成的搜索转化能力得到了证实

  • 使用自动完成功能时,用户完成表单的速度比快 30%
  • 它在移动设备上特别方便,但在桌面上也很有效;平均来说,自动完成功能 减少了大约 25%的打字时间 (从全球来看,累计起来,每天的打字时间超过 200 年)

当然,搜索可用性的提高会带来后续的提升,你猜对了。易贝的 Shanmuga Priya Pandiyan 解释说:“你对用户要求越少,他们就越倾向于填写表格,更快的填表速度会增加转化率。”。Autocomplete 帮助人们更快地找到相关结果,减少因混乱、分心或因搜索引擎无法解析查询而无法找到项目而导致的跳出率。

自动完成通常能在多大程度上改变游戏规则?搜索分析专家迈克罗伯茨(Mike Roberts)说,有人估计:它可以提高 24%的销售额和转化率。“自动完成使搜索查询更长,”他指出,“更长的查询有更高的转化率。”

如果转换不是你的首要任务,自动完成仍然会是一个巨大的帮助。怎么会?如果您的站点有购物车,自动完成功能可以增加平均订单的价值。它还提高了用户参与度,尤其是对于电子商务以外的垂直行业。人们花在搜索信息上的时间越少,他们花在网站内容上的时间就越多。

许多行业的网站都可以从添加(和微调)自动完成功能中受益,这是显而易见的。当然,电子商务网站可以用它来帮助购物者浏览他们的产品目录;媒体公司可以用它来帮助用户找到相关的新闻文章和视频。但令人惊讶的是,尽管有证据表明 autocomplete 很棒,但根据bay mard Research的数据,截至 2020 年,66%的电子商务网站没有提供该功能。

为商家赢得一份

如果你是一家有网站的公司,投资自动完成功能能得到什么?通过向人们展示流行的查询,引导他们找到他们喜欢的结果,你可以增加他们逗留和查看更多你的内容的机会。可以:

  • 向人们介绍你的网站。例如,您可以让自动完成功能显示产品类别,以扩大人们对您的产品的了解。您可以将自动完成建议与您的业务优先级保持一致,还可以让它适应多种语言以避免混淆。提高游客的认知度可以增加游客的满意度。
  • 减少人们必须花在搜索上的时间。因为自动完成提供了快速的上下文建议,所以不太可能有人需要键入整个查询。他们很乐意避免输入冗长的查询和输入错别字,这是一个未经优化的搜索引擎很难解析的。
  • 支持销售计划。您可以使用自动完成建议来管理用户交互的内容。例如,您可以:
    • 根据用户的一般搜索行为,首先显示最相关的项目(例如,什么最受欢迎或最受欢迎)
    • 根据业务优先级提出建议(例如,推广价格点或利润较高的商品)
    • 使用自动完成规则管理季节性商品销售
    • 为回头客设置个性化
  • 改善用户体验。让人们立即找到他们想要的内容意味着出色的可用性。

移动不(总是)移动

企业失败的一个特殊领域是移动应用。

假设你出门在外,想看看火车什么时候离开。你在 iPhone 或 Android 手机上输入“火车时刻表”,就会弹出一个看起来像压扁了的公司网站,让你费尽周折才找到时刻表。这被证明是一个巨大的麻烦,如果该公司针对移动设备进行了优化,这本来是可以避免的。

这种问题经常发生。电子商务移动网站的转化率比桌面网站低 66%()。例如,移动应用程序不能给人们提供正确的自动填充结果。

贝玛研究所 支持这一观点。它做了手机屏幕自动完成可用性测试(总共 87 家公司),发现一些预测最终是误导性的。“移动自动完成特别难,”它总结道,“因为用户界面受到已经很小的屏幕的影响……再加上用户的触摸键盘同时显示(几乎占据了 50%的屏幕)。”

自动优势

尽管需要更多的自动完成功能,但谁能说这不是最伟大的事情呢?当它在 移动设备 或其他任何地方可用时,它:

  • 让生活更轻松
  • 提供经过验证的查询供用户点击
  • 增加搜索者成功找到物品的机会
  • 减少人们从一次搜索中获得 零个结果 的次数
  • 增加搜索者的信心:你可以看到你在正确的轨道上,然后添加细节
  • 帮助支持营销计划
  • 可以扩大搜索者对其他产品的认知(交叉销售)
  • 通过这种扩大的认知,可以减少放弃,获得潜在的转化机会

在电影《杰里·马奎尔》中,汤姆·克鲁斯对他的行政/恋爱对象说:“你让我变得完整。”无论这种完整的概念是应用于关系还是搜索术语,它显然是一个真正强大的东西,就搜索技术而言,它只会变得更受欢迎。

了解更多信息

作为服务合作伙伴与 搜索合作伙伴 可以提供 UI、分析和其他工具来创建出色的搜索。如果您对自动完成 的 可能性感兴趣,这里有一些资源:

如何避免“无结果”页面

原文:https://www.algolia.com/blog/product/avoid-no-results-pages/

随着像谷歌和亚马逊这样的网站提供即时和个性化的搜索结果,今天的网络用户希望他们访问的每个网站都有相同的体验。

但是返回“零结果”或“没有结果”页面的搜索是用户体验中令人沮丧的障碍。而且,通常情况下,他们会驱使访问者访问你的竞争对手的网站。通过对网站搜索引擎的战略性改进,你可以避免“没有结果”的页面,并确保你总是为用户提供一条前进的道路。

什么是“无结果”页面?

“无结果”页面是当内部站点搜索引擎不能定位与用户查询相关的任何内容时向用户显示的网页。

有时,确实没有任何产品或内容与查询相匹配。但是,对于很多站点来说,相关内容 确实存在——但是站点搜索没有 优化得足够好 找到匹配。

当用户遇到一个“没有结果”的页面时,他们通常会完全放弃这个页面或网站。如果你真的很幸运,他们可能会尝试重新组织他们的查询并再次搜索。但是注意力持续时间很短,提供一个“没有结果”的页面很快就会失去客户的兴趣(并可能失去他们的购买)。

为什么“没有结果”的页面不利于生意

“没有结果”页面对用户来说是个死胡同,因为它没有回答最初的查询,也没有给出有意义的替代建议。它既会让用户感到沮丧,又会以多种方式损害业务,包括:

  • 危害整体 UX。 一个不返回结果的网站搜索无法实现将用户与他们需要的东西联系起来的基本功能。当用户没有得到他们需要的东西时,他们就不能与你的网站进行有意义的互动。
  • 破坏用户对网站内容的感知。当搜索失败时,用户可能会认为你没有提供他们想要的内容或产品。用户更有可能不了解你的网站所提供的一切就离开,这反映在搜索失败后的高跳出率上。
  • 对 KPI 产生负面影响。频繁出现的“无结果”页面会对品牌本身产生负面影响。一个不合格的网站搜索给用户的感觉是,相对于竞争对手,该网站的服务质量很差。这导致跳出率上升,参与度和转化率下降,销售额下降等。

繁体“无结果”页面无效

一些“无结果”页面通过提供一些关于如何更好地组织他们的查询的基本提示或者推荐一些常见的搜索来鼓励用户再次搜索。有时网页会包含幽默的图片来减轻不可避免的沮丧的搜索者的情绪。拥有充足客户服务资源的网站也可能会提供如何获得支持的信息。

然而,最终这些补救措施都是不够的。为什么?内部站点搜索引擎仍然没有满足理解查询和提供最相关结果的基本期望。

在许多行业,收购比以往任何时候都难,而且大多数网站的内容已经饱和。因此,现实是,如果游客不能很快得到满足,他们会离开去寻找其他东西。

微调你的站点搜索以消除“无结果”页面

任何普通的网站搜索都能返回结果。但是如果相关性没有被微调,用户将会遇到“没有结果”的页面,特别是对于不太常见的查询。通过调整相关性、语义设置和搜索引擎的其他组件,您可以完全消除“无结果”页面。

设计良好的网站搜索系统可以动态地分解复杂搜索的语义和结构,以提供最佳匹配。这允许引擎返回相关的结果,即使当查询拼写错误或者没有使用与相关产品列表或网页完全相同的术语。

Example of a complex query returning relevant search results

出色的网站搜索体验可以将不完美的用户查询转化为相关的结果。但是最好的网站搜索工具更进一步。当确实没有与查询相关的产品或内容时,搜索引擎应该推荐用户可能感兴趣的相关产品或内容,而不是针对预期查询的“无结果”页面。通过这种方式,你的网站搜索将访问者连接到他们知道他们需要的东西,以及他们还不知道他们需要的东西。

避免“没有结果”的 6 种方法第页

有很多方法可以优化搜索引擎,避免出现“没有结果”的页面:

1。构建你的同义词库

一个灵活的搜索引擎必须能够 处理同义词 来捕捉访问者可能引用同一条目的各种方式。例如,一家在美国销售汽水的公司必须能够应付来自中西部使用“pop”一词的顾客。因此,了解你的客户并把这些信息建立到同义词库中是很重要的。该信息可以与产品或服务相关的内容一起被索引。除了其他研究之外,使用你的网站搜索数据来了解哪些同义词是最重要的,哪些关键术语你可能会错过。

2。使用自动完成和查询建议

自动完成 搜索和查询建议当用户在搜索栏中键入时,提供推荐和备选查询。这有助于用户细化他们的搜索和/或发现新的查询,引导他们更快地找到他们所需要的。通过建议已知返回结果的查询,自动完成消除了搜索失败的可能性。

Twitch search

Example of a rich autocomplete that goes beyond search suggestions

3。确保你的网站搜索能够适应人为错误

人类经常拼错单词和误用标点符号。一个未优化的网站搜索将会被用户的错误绊倒,因此不会返回匹配结果。伟大的网站搜索系统必须 处理错别字 并过滤标点符号以提供最佳结果。但是,请注意,通常通过计算字符与最可能的单词匹配之间的距离来进行输入错误纠正,因此需要进行一些实验和监控,以确保系统不会过度纠正或不足纠正单词。

query with typo yet relevant result

Example of a query with a typo returning relevant search results

4。个性化结果

用户历史可以为客户可能的搜索兴趣提供有价值的见解。通过使用诸如过去的搜索、购买和自我报告的兴趣之类的数据,搜索引擎应该能够更好地理解用户的搜索意图,并提供 上下文相关的结果 。这也将增加点击率和转换率,因为用户更有可能对结果感兴趣。

5。基于业务需求定制您的搜索

虽然许多搜索功能可以跨领域推广,但也有一些因素是您的企业或行业所独有的。根据业务考虑因素(如网站的主要 KPI)以及客户优先级(如最畅销的产品),优化您业务的定制相关性。随着您细化搜索的相关性以满足业务需求和客户需求,搜索将返回越来越多的相关结果。

6。使用分析来了解客户需求

优化搜索是一个反复试验的过程。令人欣慰的是,每次用户与网站交互时,他们都会生成大量关于他们所需的有价值的数据。 分析你的网站搜索 可以帮助你理解这些数据并据此采取行动。通过发现热门搜索、表现不佳的内容和受欢迎的产品,以及其他指标,您可以调整您的相关性,甚至填补内容空白。

Site Search data presented on Algolia Dashboard

如果真的有“没有结果”怎么办?

不幸的是,“没有结果”的页面最终还是会出现,即使是使用了很好的网站搜索。在这种情况下,尽快让用户回到相关内容并从错过的机会中吸取教训以改进未来的搜索是非常重要的。

在整个搜索体验中推荐产品是防止反弹的好方法,因为用户可以快速点击一个产品,而不必重新开始搜索。理想情况下,有了足够的用户数据,推荐的产品应该是上下文相关的,受欢迎的,以增加点击率。

因为搜索是一个持续的迭代过程,一个“没有结果”的浏览量应该是一个额外的数据点,以改善未来的实施。使用您的站点搜索仪表板定期查看返回零结果的搜索。有了这些信息,您可以决定是否需要调整搜索设置或创建新的内容或产品列表,以更好地满足这些需求。无论你做什么决定,确保“无结果”页面在此期间尽可能优化,这样你就不会失去有价值的客户。

如何为你的用户提供最相关的结果

“没有结果”的页面让开发者和最终用户都很沮丧。有了一个功能强大、经过优化的 站点搜索解决方案 ,你就可以轻松避免这种头痛。

在我们的 媒体电子商务 电子书中了解更多优化搜索的好处。亲自了解如何通过智能搜索改善用户体验并满足您的业务目标。

B2B 电子商务的数字化转型:如何建立一个成功的 B2B 电子商务网站,结合最佳行业实践

原文:https://www.algolia.com/blog/ecommerce/b2b-commerce-digital-transformation-how-to-build-a-successful-b2b-ecommerce-website-incorporating-best-industry-practices/

在构建引人入胜且适应性强的 p 产品搜索和发现界面时,无头、可组合的架构创造了关键的灵活性,以确保 c 转换和增加的交易和订购。在本文中,我们将讨论这三个要素,或者说步骤——无头/可组合、搜索/发现、转化/参与——如何在一个现代的、竞争激烈的 B2B 业务中发挥作用。

第一步:无头/可组合架构取代传统的单片平台

Gartner 预测,“到 2023 年,采用可组合方法的组织将在新功能实施速度上超过竞争对手 80%。”

无头架构 通过去除前端和后端之间的链接,允许自由和灵活。站点内容和 UI 元素可以即时更改,而不会影响后端基础设施。现代的 API 优先方法让内部团队(产品、营销和销售)能够迭代在线全渠道体验,并测试具有高敏捷性和可扩展性的新策略。

B2B 行业领导者,如 戴尔科技 为其电子商务平台采用了无头、API 优先的架构。与传统整体解决方案相比,无头/可组合方法的优势对任何组织都非常有影响:

  • 快速创新:快速部署新功能,更好地控制每个功能
  • 降低维护成本:可以灵活选择组件和功能,立即获得自动软件更新
  • 轻松适应和改变业务需求的任何变化

可组合架构使 B2B 公司能够实现全渠道销售模式,这已被证明比传统方法更有效。麦肯锡 发布的最新研究将全渠道确定为“全球 B2B 销售的至关重要的固定设备”,83%的 B2B 领导者称其是比传统的“仅面对面”销售方法更成功的发现和获得新业务的方法。

此外,全渠道模式适用于多个地区,显示了全球 B2B 公司的热情采用趋势。

第二步:产品搜索和发现

根据 Forrester 的研究, 92%的 B2B 购买都是从搜索 开始的。此外,Baymard Institute 最近的 研究 发现,“产品类型”搜索(例如,“男孩的帽衫”、“凉鞋”)几乎总是用户与网站的第一次交互。产品类型查询有助于塑造用户对可用产品的早期印象。即使用户查询与网站的精确类别描述不匹配,正确配置搜索相关性以提供相关结果也是至关重要的。当搜索结果给用户留下库存有限或不受欢迎的印象时,放弃的风险就会大大增加。

  • 将产品目录和电子商务功能统一到一个 UX 中,针对多个平台进行优化
    • 产品目录和购物平台必须统一
    • 支持内容,如规格表、文件、销售过程中因各种法规要求提交的文件以及类似文件,应可通过单个搜索栏访问,并链接至特定产品或产品类别
    • 架构需要将搜索引擎和定价引擎结合起来。

注意:对于 定价是动态的 并且产品价格经常变化的情况,定价引擎解决方案应该提供任何定价复杂程度的实时定价数据。

  • 产品目录结构:计划包括哪些可搜索属性(尺寸、产品类型/类别、品牌、颜色、流行度)
  • 相关性设置:确保快速高效的产品发现,包括并配置 B2B 特定功能(如 SKU 搜索)
  • 商品销售:使用以下工具自动销售活动和促销产品:
    • 相关性规则(例如,将特定产品提升到搜索结果列表的顶部)
    • AI 动态重新排名
    • 艾同义词建议
    • 个性化
    • 产品推荐

第三步:兑换、交易、订购

提高转化率和用户参与度的一些要素是什么?

  • 个性化定价:确保您的每个企业客户都能看到自己定制的预先协商好的价格、折扣和运输信息,并实时更新
  • 结账流程简化:确保高效的结账流程,同时包括所有相关的订单信息,如库存/存货数据、跟踪和运输。
  • 快速简单的再订购:B2B 购物者大部分时间都是回头客;因此,重新订购流程应该精简和简化(例如,通过别名进行个性化搜索,个性化搜索结果页面和浏览页面,一个快速订购按钮,让 B2B 购物者只需粘贴他们想要购买的产品的 SKU)

为 B2B 电子商务公司的数字化转型选择合适的搜索和发现引擎的决策流程:

  • 时间表和紧迫性
    • B2B 购物者已经习惯了 B2C 在线体验 。他们对 B2B 世界的期望是与 B2C 电子商务的趋势和最佳实践相匹配。今天,用户不想再等了,这给在在线 B2B 购物体验上落后的 B2B 组织带来了风险。因此,数字化转型的紧迫性和优先性需要很高。
  • 基础设施
    • 性能。在搜索和索引等关键功能中,专门设计和构建的第三方引擎具有明显的优势。你应该期待搜索引擎能以闪电般的速度提供搜索结果,并且可以很容易地从一个平台复制到另一个平台。
    • 可靠性。不需要安全或维护补丁的解决方案,为具有高安全维护需求的产品提供了更好的替代方案。
    • 规模。为扩展进行资源调配需要付出巨大的努力,并且由于时间限制、工程资源缺乏和预算限制,通常无法很好地实施。最佳解决方案需要能够处理任何规模的大数据量。
  • API 优先 vs monolith 解决方案:可组合/无头方法是使公司适应未来新趋势和挑战的重要工具。
    • 易于构建和迭代。搜索引擎解决方案应该有完整的文档记录(API 客户端、前端库)。当打开新的渠道或部署到新的国家或地区时,应该不需要从头开始。
    • 易于连接/为无头体验做好准备。为了成功实现全渠道销售模式,搜索引擎需要连接到所有的客户接触点。全渠道是 B2B 行业的关键,也是开展业务的最佳方式,例如,销售人员应用程序、在线目录、仅提供给特定客户的翻新专用应用程序、客户支持工具等等。
  • 相关性管理
    • 白盒方法。搜索引擎应该提供透明的算法,让商业团队控制排名和相关性策略
    • 仪表盘为了高效运作并对业务趋势和挑战做出快速反应,业务团队应该能够从用户友好的仪表板管理相关性,而不需要每天都依赖它。

性能、可靠性、可伸缩性和灵活性 是搜索和发现引擎应该为 B2B 商务组织提供的四个基本优势。Elastic 和 Solr 等开源解决方案是高度资源密集型的,需要大量的工程资源来维护和更新。虽然开放源码解决方案看似“免费”,但其实施和维护既昂贵又耗时。这些困难堆积在其他挑战之上,例如搜索结果排名算法缺乏透明度。另一方面是易于实现的解决方案,它们的灵活性和可伸缩性有限,因为它们依赖于开源解决方案和千篇一律的架构和设计。这些解决方案受到不透明排序算法的限制,并且当面临对搜索结果的相关性排序实施修改或定制的需求时,它们的不可预测性是众所周知的。这对于任何 B2B 商务公司来说都是一个很大的劣势,因为这些公司可能需要对产品进行多次修改。Algolia 为客户提供了广泛的定制,以确保产品满足每个 B2B 企业的独特要求,并提供可扩展性和从一个平台到多个其他平台的简单复制。

B2B 商务数字化转型:营销和人工智能优化

原文:https://www.algolia.com/blog/ecommerce/b2b-commerce-digital-transformation-merchandising-and-ai-optimizations/

在我们的 B2B 数字化之旅中,继搜索和导航优化 之后,我们将讨论商品销售以及如何利用人工智能自动化对其进行优化。数字销售让您能够控制产品目录的展示,并允许您将业务逻辑应用于搜索结果页面、类别页面、过滤面,甚至产品传送带。

面向 B2B 公司的商品销售

B2B 公司需要完全控制如何向网站用户展示目录,轻松选择要推广的产品和要突出显示的产品。为了在日常生活中有效地利用这种功能,需要一个以业务用户为中心的 UI 界面,其目标是使 B2B 销售团队能够独立自主地工作,不受工程和其他技术团队的影响。此外,拥有多个子部门的大型 B2B 组织需要有能力在子级别推出销售指南。每个地方分支都应该能够独立地建立自己的规则和商业策略。

销售策略是电子商务的重要工具,不应该是 B2C 零售商的专利。B2B 公司需要能够受益于 B2C 的最佳在线销售实践,并获得基于内部销售和营销策略快速推广任何产品或类别的能力。

用 AI 自动化优化商品销售

自动化是另一个可以增强销售工作并最大限度提高效率的方面,尤其是在处理超大目录时。这包括为用户提供 ML 生成的产品推荐,对搜索结果进行动态重新排序,以确保最受欢迎的产品出现在顶部,或者根据用户搜索建议人工智能生成的同义词。

通过应用人工智能和机器学习工具,我们可以腾出时间让组织的人才专注于电子商务流程和网站管理的定制方面,同时补充员工可用的数据,并利用人工智能生成的分析见解支持他们的业务决策过程。人工智能和人工智能工具能够大规模分析大量数据,并推荐和强调战略机会,例如识别潜在的增长空间或发现应该减轻的“失去的”机会。

商品销售

搜索商品销售

搜索营销确保所有必要的业务逻辑都包含在将呈现给用户的搜索结果中。

商品类别

类别销售工作流程使公司能够将业务逻辑应用于类别页面。这样,每次购物者在浏览网站和不同的产品类别时(或从外部来源(如谷歌)登录类别页面时),结果都会以特定的顺序出现,可以根据当前的促销业务需求轻松调整和优化转换。

  • 锁定并隐藏物品
  • 增强、隐藏和过滤类别
  • 设置类别排序的优先级
  • 禁止物品类别
  • 商品筛选选择
  • 基于日期范围的商品,用于限时促销
  • 基于地理位置、设备、用户群的商品
  • 可配置的预览界面
  • 设置无条件规则(规则一直触发*),例如:*
    ** 返回自定义数据,如横幅(例如,在类别页面上显示横幅)* 添加默认搜索参数(例如,将所有查询的半径搜索参数设置为 1000 米)* 隐藏项目(例如,根据用户搜索的内容隐藏记录)*
    ** 设置仅上下文规则(由‘rule context’触发的规则,不需要查询)* 基于过滤器选择的商品,其中过滤器可以是条件或触发器,但也可以是商品* Facet Merchandising(Facet type 和 value 重新排序–功能可应用于搜索和分类页面)*

*### Algolia B2B 电子商务客户成功实施销售策略的例子:

使用相关性规则搜索商品和促销项目:工具站

当用户在 B2B 零售商 Tool Station 的网站上搜索“hozelock”时,选定的产品会被钉在搜索结果的顶部,以便更有效地进行商品销售。

搜索商品——重定向到一个包含相关规则的专用登录页面:亚瑟王面粉

在 B2B 零售商亚瑟王烘焙网站上,当用户输入查询“过敏”时,他们会被重定向到网站上专门为他们的查询定制的页面。

AI 优化

人工智能

动态重新排名利用人工智能来发现用户行为的趋势。根据查询和他们点击或转换的结果的位置,它可以通过提升越来越受欢迎的结果来提高你的相关性。

艾同义词建议

使用人工智能,Algolia 可以识别用户经常更改(重写)的查询,并提出术语的同义词。有了动态同义词建议,你所要做的就是接受或拒绝建议的同义词。如果你认为有更好的选择,你也可以在接受建议前调整一下。这些同义词很好地表明了用户在网站上搜索的内容以及他们如何表达他们的查询,这对 SEO、数据改进、产品目录增强等非常有用。

人工智能推荐

利用 ML 对推荐进行过滤、推销、排名和语境化以符合您的品牌和独特的业务目标。

  • 经常一起购买——推动交叉销售,增加平均订单价值
  • 相关产品–最大化转化率和目录曝光度

Algolia B2B 电子商务客户成功实施人工智能优化的例子:

动态同义词建议:工具站,Selco

在 Tool Station 的网站上,由于 Algolia 的人工智能生成的同义词建议,用户即使在输入查询时使用不同的词(例如“水泥”或“混凝土”),也可以获得相关的结果。

在 Selco 的网站上,由于 Algolia 的人工智能生成的同义词建议,用户即使在输入查询时使用不同的单词(例如“loft flooring”或“chipboard flooring”),也可以获得相关的结果。

上面的例子展示了配置和执行稳健的销售策略的各种有效方法,从开展季节性促销活动,到利用人工智能和人工智能工具,通过自动实现向 B2B 电子商务网站购物者显示的搜索和浏览结果的最佳相关性来推动销售和收入。*

B2B 商务数字化转型:个性化

原文:https://www.algolia.com/blog/ecommerce/b2b-commerce-digital-transformation-personalization/

优化 B2B 电子商务网站上的搜索和导航体验 是实现 B2B 业务数字化的重要一步。下一步是配置一个设计良好的销售策略 ,包括整合人工智能工具,利用“群体智慧”自动生成同义词和产品推荐,以及动态重新排列搜索结果和产品在类别页面上的显示顺序。个性化在这种设计之上又增加了一层。

为每个用户个性化搜索结果和类别页面不仅可以最大限度地减少购物者搜索产品的时间,我们知道这是一个非常重要的因素,也是 B2B 购物者的最佳实践、、而且还可以确保用户始终看到与他们独特偏好最相关的结果。实施个性化策略可以确保每个用户在 B2B 网站上都有不同的电子商务体验,这些体验符合用户的特定需求和购物习惯。预期结果将是客户满意度的提高,这对于 B2B 电子商务的成功 至关重要,因为单个“用户”实际上可以代表一家大公司的众多用户,并负责下大订单。考虑到每个购物者的体验对 B2B 行业的重要性,用户在 B2B 电子商务网站上的旅程可能比 B2C 零售商更重要。

个性化对 B2B 公司来说有几种意义。除了我们刚刚讨论的用户级别的行为个性化之外,还需要帐户级别的个性化。这种个性化解决了 B2B 商务的特殊需求。对于 B2B 公司,向其他企业销售产品和服务可能意味着拥有特定的目录、价格或 SKU,这些都可以在帐户级别进行个性化。

个性化 B2B 搜索体验的四种方式

B2B 电子商务网站的个性化类型:

  1. 个性化目录
    • 公司与权限设置
  2. 个性化定价
    • 针对每个用户和客户群的动态定价
  3. SKU 个性化搜索
    • 通过别名搜索自定义别名
  4. 行为个性化
    • 个性化查询建议
    • 1:1 个性化

个性化目录

B2B 产品目录往往很复杂,每个买家账户都有许多产品变化和特定的条款和条件。通常,B2B 购买流程也比 B2C 更复杂,涉及不同权限的不同用户。

例如,一个帐户中的买家可能有权请求产品报价,但实际上并没有购买,或者根据允许他们购买的产品查看不同版本的产品目录。当个人买家搜索或浏览时,他们希望只找到他们有权看到的产品。

使用 Algolia,您可以使用 安全 API 密钥 来确保每个登录用户只能搜索或浏览他们有权访问的产品目录部分。

例如,您可以使用安全 API 密钥:

  • 将搜索限制到特定索引
  • 对每个搜索应用预定义的过滤器
  • 将预定义的搜索参数应用于每次搜索

https://www . algolia . com/doc/guides/security/API-keys/# secured-API-keys

个性化定价

根据 B2B 买方和卖方之间的具体协议,为每个买方账户定制定价、库存和其他条件。有了 Algolia,你可以确保每位买家都能看到适用于他们的条件。

根据您的定价结构,处理灵活价格和其他条件所采用的策略:

  • 固定价格和折扣。如果你有一个适用于所有买家的产品目录,没有每个买家或每个细分市场的差异,你可以使用 Algolia 的常规 B2C 解决方案。标准价格是价目表中产品的固定价格。比如“公价从”。
  • 定价等级。如果您的客户群具有不同的定价等级,您可以将每个客户群的价格作为其自身的属性进行索引。当买家搜索时,会显示他们所属细分市场的价格。对于每个细分市场的定价,不同的价格是为不同的买家群体量身定制的。
  • 每位买家的定制价格。如果每个买家帐户都有自己的定价,您可以动态更新定价信息。当买家搜索产品时,您从数据库中获取该特定买家的产品价格,并将其显示在搜索结果中。
  • 基于数量的单位定价。根据订单数量,单价需要实时变化。
  • 可协商报价/现货合约定价(按用户定价)。允许您的 B2B 购买者直接从购物车中请求报价并使用协商的价格更新定价信息。商务平台应该允许 B2B 卖家查看、接受和拒绝报价请求。

注意:给定产品的库存可用性或运输交付时间可能因 B2B 买家而异。例如,B2B 销售者可以允许苹果购买 10 台,微软购买 20 台。定价和库存可用性将需要个性化和实时反映。

实施个性化定价时,您可以从许多可用的解决方案中进行选择。该决定可能取决于业务需求和架构依赖性或其他功能限制。解决方案评估标准应考虑可扩展性/记录数量、可用性以及对个性化、商品销售、动态重新排名、推荐、分析、仪表板可用性、过滤&排序以及索引性能等功能的影响。

个性化定价策略实施的一个例子是延迟加载定价信息,对每个客户或每个用户组使用一个指数:

https://www . algolia . com/doc/guides/solutions/ecommerce/B2B-目录-管理/教程/个性化-定价/

在下面的例子中,B2B 电子商务网站要么要求客户登录以查看具体价格,要么根据之前协商的价格连接到销售代表以核实定价信息。

个性化‘按别名搜索’

终端企业用户能够通过 SKU 搜索自定义别名。例如,通常在 B2B 网站上订购一套清洁产品的业务代表将能够输入别名查询“清洁产品”,并看到他们通常订购的所有产品的列表。这种类型的自定义别名对特定用户来说是唯一的,对其他用户不可用。每个自定义别名都将针对特定的业务用户配置文件进行个性化设置。

行为个性化

个性化 通过在关联策略中加入个人层,加强了交互搜索。在搜索体验中加入个性化的偏好会让搜索结果对个人用户更有吸引力。

行为个性化允许 B2B 网站将历史客户信号整合到 ML 中,以根据以下数据智能地对结果进行排序:

  • 位置/地理
  • 首选商店
  • 过去的购买记录
  • 过去的搜索
  • 首选品牌
  • 按地区划分的季节性
  • 产品/客户细分目标(根据地区和行为产生群体)

在决定个性化策略时,公司需要首先分析哪些客户信号对他们的业务最有价值。这将使公司能够控制和“定制”个性化在网站上的应用方式。例如,我们可以为客户行为的不同方面赋予不同的权重,例如赋予品牌与商店更高的重要性。

个性化查询建议 :根据不同用户的个性化配置文件,向他们显示同一查询的不同建议。

【1:1 个性化 :根据用户先前在网站上的行为和独特的用户偏好,将搜索和浏览结果个性化到每个用户简档。B2B 客户在下订单时经常使用相同的类别和子类别。考虑到在大多数情况下,企业用户需要登录才能浏览目录并进行购买,跟踪他们在网站上的行为并个性化他们的购物体验是非常有益的。

个性化对于 B2B 电子商务行业非常重要。有多种策略可以借鉴 B2C 最佳实践,如行为个性化。同时,有一些独特的方面和要求在 B2B 行业中特别常见,例如个性化目录和定价,需要有效地解决这些问题,以便提供卓越的电子商务体验。通过精心规划数字化转型和逐步实施 B2B 电子商务解决方案 B2B 零售商将能够跟上 B2C 行业趋势,满足购物者对 B2B 电子商务网站的期望。此外,可组合的商业方法将提供传统技术栈架构所不具备的灵活性和可伸缩性。这种方法给了 B2B 公司快速发展和成为行业领导者的自由。B2B 电子商务成功的关键是随时准备适应新的趋势,并在过程的每一步满足买家的期望和需求。

B2B 商务数字化转型:搜索、过滤、分类和导航

原文:https://www.algolia.com/blog/ecommerce/b2b-commerce-digital-transformation-search-filtering-sorting-and-navigation/

B2B 零售业 的最新趋势和发展正在敦促和挑战企业采用 B2C 电子商务最佳实践 :

“为了在这种环境中竞争,组织必须借鉴 B2C 领域的最佳实践,包括面向客户的员工的数字工具和全渠道商务。”

Forrester,让您的 B2B 业务成为数字业务,2021 年 1 月

这种数字化转型需要精心规划的战略和对 B2B 技术体系、架构和流程 的重组,这使 B2B 零售商能够从面向未来的全渠道电子商务解决方案中受益,提供灵活性、可扩展性和相对于技术落后的竞争对手的竞争优势。对于您的组织的数字化之旅,推荐的方法是从搜索开始,因为这是购物者与公司网站交互的第一种也是最常见的方式,尤其是在 B2B 世界中,用户是受意图驱动的,并确切知道他们在寻找什么。接下来是浏览、过滤和增强的导航体验。为了统一和一致的用户体验,搜索和浏览功能应该在网站上产生无缝的用户旅程,以满足用户对电子商务网站上现代购物体验的期望。

搜索型界面

建立支持 B2B 买家需求的强大搜索界面:自动完成、查询建议和 B2B 特定搜索解决方案。

  • 使用包含最新趋势的预测性搜索建议,加快重复购买:
    • 查询建议
    • 关于空查询的流行或推广的搜索建议
    • 搜索结果可视化
  • 为买家提供对产品、常见问题、技术规格和其他信息的无缝搜索:
    • 在一个下拉菜单中组合了联邦/多索引搜索和查询建议。例如,每个客户查询将同时触发对多个索引的搜索,并在单个界面中呈现不同类型的搜索结果:产品、产品规格表、类别、常见问题解答、销售解决方案的组织的客户案例等等。
    • 产品列表详情——包括每件产品的相关库存信息。例如,库存状态、单价、批量价格和可用折扣。
  • 按 SKU 等号码搜索:
    • SKU 搜索
    • 按款式编号搜索

B2B 买家正在寻找特定的产品和规格,并希望使用产品标识号,如库存单位(SKU)。请务必设置 Algolia,使其更易于搜索产品编号和按特定尺寸过滤。

B2B 行业特定搜索功能示例

让我们来看看一些已经成功实现 B2B 行业特定搜索功能的 Algolia B2B 电子商务客户。

为业务需求量身定制的产品搜索:安德玛

安德玛为其 B2B 买家提供了一个单独的在线目录,为他们提供了一个适合其业务需求的浏览体验,例如包括批发价和建议零售价以及商品款式编号的列表。

【T2

带查询建议的联合搜索:Selco

当用户在 Selco 网站的搜索栏中输入查询时,相关信息会以下拉菜单的形式呈现在用户面前,该菜单分为多个类别,显示来自多个索引的结果以及查询建议,省去了大量浏览网站所需的时间和精力。

联邦搜索空查询:多佛

当用户在多佛 OPW 洗车解决方案网站的搜索栏中输入查询时,只需在输入前点击搜索栏,就会生成多索引查询建议。关于空查询的建议缩短了搜索时间和精力,并改善了网站上的客户体验。

网站用户有多种选择来探索相关内容。他们可以从建议的搜索、产品和类别中进行选择,而不仅仅是在搜索框中输入查询。

当用户使用自动完成功能搜索时,可视化结果:Chomette

Chomette 的 B2B 网站具有动态自动完成搜索功能,用户可以在搜索结果页面上输入相关产品进行预览。

SKU 搜索:乔梅特

Chomette 的 B2B 网站让用户在输入 SKU 时找到相关产品,而不是产品名称或关键词。

B2B 产品列表详情:Chomette

Chomette 向企业用户显示多种类型的相关产品列表详细信息,如 SKU、库存状态、单价、批量价格和折扣可用性。

基于浏览的界面——过滤、排序和导航

在您的网站页面上实施高效、直观的浏览功能,如过滤和导航,以满足您企业客户的需求。

  • 搜索结果页面
    • 过滤和排序
    • 分级过滤面
  • 类别页面
    • 给分类页面添加导航和过滤器
  • 产品列表页面
    • 产品变型交互样本
    • 轻松批量订购

B2B 行业特定的示例 B2B 特定的导航和订购功能

搜索结果页面——过滤和排序:Chomette

Chomette 利用 Algolia 的过滤和排序功能,在搜索结果页面上向用户展示与他们相关的内容。比如新产品或者打折产品。

搜索结果页面——动态分层过滤面:多佛

多佛 B2B OPW 洗车解决方案网站的访问者可以通过选择“动态”分级过滤器来深入查看所需产品。这些过滤器提供了与它们的查询以及它们的搜索结果集相关的方面值。

分类页面——添加导航和过滤器:安德玛

在安德玛网站上,想要运动装备的人,例如短裤,可以在导航菜单上选择产品类别,立即显示相关的 Algolia 驱动的类别页面,上面满是可供浏览的商品。

产品列表页面——产品变型交互样本:安德玛

运动器材零售商安德玛提供互动色板(当你点击色调时,模特穿的衣服的颜色会改变),以及尺寸指示视觉效果,以帮助人们做出正确的购买决定。

产品列表页面-轻松批量订购:安德玛

结论

以上示例展示了优化 B2B 电子商务网站搜索和导航体验的好处。这些都是基于 B2C 的最佳实践,并适合 B2B 行业的独特要求和具体情况。实施同类最佳的 B2B 在线购物功能不仅改善了当前的用户体验,还为任何 B2B 电子商务购物流程的未来扩展和数字化优化奠定了基础。

向数字化的转变带来了收入方面的好处:买家将更频繁地访问在线平台下订单。此外,我们倾向于在搜索会话中看到更高的平均订单量(AOV),这意味着如果买家使用搜索,他们可能会订购更多。最后,投资电子商务平台和数字化转型将为幕后人员(如销售代表、支持或客户服务团队)腾出时间,专注于定制交易和专门的增值建议,而不是通过电话重新订购产品。

B2B 电子商务的数字化转型:建设一流 B2B 电子商务网站的基本搜索和发现组件是什么

原文:https://www.algolia.com/blog/ecommerce/b2b-commerce-digital-transformation-what-are-the-essential-search-and-discovery-components-for-building-a-best-in-class-b2b-ecommerce-site/

电子商务网站的基本要素包括快速、相关和上下文相关的搜索和导航体验,以及通过销售功能和人工智能优化实现的业务逻辑,如搜索结果的动态重新排序、同义词建议和基于独特用户配置文件的个性化。这对于 B2B 来说应该没有什么不同,因为用户希望能够快速方便地订购。

除了上面列出的标准电子商务元素之外,B2B 网站还有独特的挑战和要求,这些对于成功实施电子商务平台解决方案至关重要:

核心要求

| 数据 | Personalised catalogues

  • 买方账户级别的目录管理和授权政策
  • 每个客户的可用库存
个性化价格
  • 搜索最终客户自己的参考资料(大宗产品订单的别名)、标题、描述、技术信息、特性( 、零件号 、制造商、品牌、项目功能)
  • 使用特殊字符搜索尺寸-缩写、 连字符属性 、符号“("、" = "、"/")、测量单位的刻面(m,cm)..)
  • 强&快 刻面
  • 长尾查询(超出最受欢迎的结果)

|
| 用户界面 | B2B 快速订单(根据 SKU 或产品名称快速下单) |

高级要求

| 联合搜索 | 包括多种结果类型 : FAQ、产品评论或规格表 |
| 排序依据 | (注意:B2B 的价格排序特性的实现取决于每个独特的用例以及技术堆栈/架构)下面是一些建议和想法

  • 公共价格:如果每个客户的折扣以百分比表示,则公共价格可能有用。
  • 每客户价格(虚拟副本)
  • 每个客户群(虚拟副本)
行为个性化 基于用户交互的个性化结果

https://www . algolia . com/doc/guides/solutions/ecommerce/B2B-catalog-management/

数字化转型计划需要将独特的 B2B 需求与基本的电子商务功能无缝融合,以实现拥有高效易用的全渠道 B2B 电子商务平台的目标。你想让你的买家从你的平台上购物变得尽可能简单高效——比打电话给你的销售代表或客户服务更容易。

实施计划从配置搜索开始;设计过滤、分类和导航流程;运用营销策略;并通过人工智能优化来放大设计,包括 B2B 特定的个性化功能。对于 Algolia,相关层的结构和设计使您能够完全控制如何向客户展示您的产品和内容。

B2B 商务数字化转型:为什么 B2B 零售商应该采用 B2C 最佳实践

原文:https://www.algolia.com/blog/ecommerce/b2b-commerce-digital-transformation-why-should-b2b-retailers-adopt-b2c-best-practices/

B2B 电子商务的数字化转型对数字化用户体验提出了越来越高的要求。对 B2B 电子商务的需求正在迅速增长。目前, 75%的 B2B 产品采购已经在网上完成 。虽然有 30%的 B2B 买家更愿意在网上购买至少 90%的产品,但目前只有 19%的人这样做。B2B 网站访问者的活动不仅限于购买产品,而是跨越多个其他领域,如产品信息收集、客户服务相关的互动(如帮助中心搜索)、通过聊天或电话与销售或支持代表沟通等。多达 62%的 B2B 买家现在更喜欢在线获取信息,这促使企业开始考虑客户对 B2B 商务流程和体验的新需求和期望。

如今,超过 90%的 B2B 购买是从搜索 开始的,而 大多数互动已经通过数字渠道 发生。新一代买家对 B2B 电子商务平台有更高的期望:相关和直观的产品搜索和导航,更容易和更快的结账,容易重复订购,更快的交货和改进的跟踪。

“在线 B2B 领导者,如亚马逊商务、W.W .固安捷公司、MSC 工业供应公司、惠普企业和戴尔技术公司,多年来一直在提高制造商和分销商的电子商务标准。”(来源:**Order Up:酝酿 B2B 买家的有效购买路径 *,2021 年 8 月)*这些公司迅速跟随 B2C 数字化转型的脚步。通过采用 B2C 电子商务最佳实践,他们成为了 B2B 领域的领导者,现在主导着整个行业。

“制造商 HPE 和戴尔长期投资在线订购和相关系统,如复杂的产品配置器。分销商固安捷(Grainger)和 MSC 都在继续改进他们如何让客户通过多种电子渠道(从电子商务网站和移动设备到互联网连接的自动售货机和 EDI)找到并订购产品和服务。”(来源: Order Up:酝酿 B2B 买家的有效购买路径 *,2021 年 8 月)*这种对 B2B 商务平台数字化的战略投资让这些公司经得起未来考验,使他们从竞争中脱颖而出,并允许他们快速适应和迭代任何行业转变。最重要的是,持续创新的文化使新技术的采用成为一个更顺利的过程,并且比那些跟不上潮流的组织更少内部阻力。

当前 B2B 商务趋势

领先的 B2B 电子商务市场平台包括以下功能*(来源:* 亚马逊促销营销杂志阿里巴巴**2021):

  • 该平台是各行业/品类产品的采购中心
  • 买家可以按行业或产品类别进行分类或搜索
  • 该平台支持公司采购卡,并提供数量折扣、商业定价和其他优惠
  • 一种供应商/卖家过滤选项,通过各种品质进行过滤,例如多样性、公平性和包容性,旨在将买家与小型和多样化的卖家、供应商、行业、年收入、原产国、行业经验、他们经营的市场等联系起来
  • 该平台允许买卖双方直接在平台上协商价格,包括使用聊天功能
  • 该平台利用 B2C UX 和最佳实践

UI 和 UX 设计仿照 B2C 最佳实践

在下面的例子中,亚马逊 B2B marketplace 采用了单独的产品目录和不同的 UI 设计,专门为每个行业的企业客户量身定制,以确保只向每个用户提供最相关的产品。

登陆页面最佳实践

在下面的例子中,亚马逊为其 B2B 市场上的每个行业定制了登录页面 UI/UX 设计,以最好地满足每个企业客户部门的需求。向企业销售商品和服务在多个方面不同于向个人销售。B2B 公司可能会面临 B2C 领域通常不存在的挑战。例如,B2B 公司必须展示他们的专业知识,并在登录页面上反映他们买家的行业和背景,以便在他们的商业客户中建立信任。

高级电子商务功能,如促销和推荐

在下面的例子中,B2B 市场阿里巴巴为其 B2B 市场提供了 B2C 电子商务网站上常用的高级电子商务功能:基于用户搜索查询的产品推荐、促销类别和推荐搜索查询。

领先的 B2B 制造商和零售商网站包括与领先的 B2C 网站类似的高级电子商务功能。成功的 B2B 电子商务网站包括 B2B 特定功能与 B2C 电子商务最佳实践*(来源:* 贝玛研究所 ) ,如:

  • 带有预测性查询建议的自动完成搜索,包括迎合特定 B2B 用户行为,如 SKU 搜索
  • 高搜索结果相关性
  • 高效的过滤和导航,服务于特定的业务需求
  • 个性化目录、搜索结果、定价等。对于每个企业用户
  • 人工智能优化和先进的销售策略,以实现更好的转化和销售增长
  • 直观、B2B 优化的结账流程
  • UX 迎合新手用户,而不仅仅是老用户或有经验的用户

为什么迫切需要采用 B2C 的做法?

B2C 公司的数字化转型比 B2B 零售商更早开始。当新冠肺炎·疫情加速电子商务的发展并快速适应不断变化的客户需求和期望时,最懂技术的 B2C 零售商准备利用他们可用的多种工具,将自己与亚马逊等大型 B2C 零售商相提并论。今天的购物者习惯于快速和相关的搜索结果、简单的网站导航和订购流程、产品推荐、方便的结账流程和有用的客户支持服务。新一代的商业购物者希望 B2B 网站也能提供类似的功能和用户体验。随着 B2C 零售巨头进入并很快主导 B2B 领域,尽快适应商业购物者的期望并为其网站实施 B2C 最佳电子商务实践对于 B2B 零售商的生存至关重要。

数字化转型对 B2B 行业的影响

  • **市场规模:**B2B 市场总规模为 67 万亿美元,是全球零售市场规模的近三倍。(来源:加拿大皇家银行资本市场, 美国消费者新闻与商业频道 )
  • 商机: 今天的 B2B 世界仍然没有达到高效服务的地步。(资料来源:加拿大皇家银行资本市场, 美国消费者新闻与商业频道 ) 如今相对较低的在线销售额落后于 B2C 同行,但仍在稳步增长,代表着在线扩张的巨大潜力。今天的 B2B 购物者希望获得与 B2C 购物者相同的购物体验。通过投资 B2B 电子商务平台、技术基础设施和其他在线交易支持系统(如定价引擎、库存管理)的数字化转型,B2B 公司将能够获得更大的市场份额,因为大多数 B2B 竞争对手在电子商务数字化方面都远远落后。
  • **成功指标:**根据麦肯锡进行的一项研究,成功掌握数字化转型的 B2B 公司比同行多 8%的股东回报和五倍的收入增长。

亚马逊等行业领导者预计将主导 B2B 零售市场。通过正确的 B2B 数字用户体验和电子商务流程优化方法,例如采用 B2C 的最佳实践并解决 B2B 的独特需求和常见难题,亚马逊能够在市场份额和盈利能力方面实现巨大增长。

  • 到 2023 年,亚马逊的业务(B2B 电子商务市场)收入将达到 310 亿美元,同期销售额将增长五倍,达到 520 亿美元。(来源:加拿大皇家银行资本市场,**)
  • 2019 年亚马逊业务(B2B 零售)增速比亚马逊(B2C 零售)快 3 倍。(资料来源:加拿大皇家银行资本市场, 美国消费者新闻与商业频道 )
  • 亚马逊业务在 2019 年的增长速度也是亚马逊网络服务的 1.6 倍。那一年,亚马逊网络服务的销售额从 256.6 亿美元增长到 350.2 亿美元,增幅为 37%。(来源:加拿大皇家银行资本市场, 美国消费者新闻与商业频道 )
  • 亚马逊企业全球采购解决方案被 9 个国家的 500 多万家企业使用,全球年销售额达 250 亿美元。(来源: 亚马逊 ,2021)

B2B 电子商务的特点及含义

| | 特性 | 含义 |
| 用户细分 | 领域专家和回归用户拥有专业背景和丰富的产品知识 | 产品知识水平极高的 B2B 用户可以执行导航快捷方式:搜索 SKU、点击导航面包屑、在表单中使用键盘跳转等。 |
| ‘领域专家’谬论 | 对新手用户 (对 B2B 品牌、行话或整个行业领域来说都是新的)的关注度低导致了重大的导航挑战。 | 忽视新手用户会让 B2B 网站错失良机,因为这些用户是获得新客户的巨大潜在来源。 |
| 个人用户的重要性 | 个人用户代表着巨大的利润来源,更不利于疏远。 | B2B 网站在客户支持解决方案上投入更多,而 B2C 网站出于利润考虑,尽量减少投入。 |
| 用户意图 | B2B 产品浏览更多的是意图和问题驱动。 | B2B 用户倾向于根据特定的产品属性进行过滤,或者执行功能查询(寻找特定的东西)。 |
| 结账流程/复杂性 | Checkout flow and order confirmations are more complex (separate billing and shipping addresses, VAT numbers, PO numbers, accounting information, etc.).支付方式可以是异步的(发票、采购订单、信用等。). | B2B 结帐将需要结帐优化,以在功能丰富和可用的流程之间建立适当的平衡。 |
| 电子商务功能 | 电子商务功能通常与产品目录分开。 | 从网站 UX 的角度来看,目录和电子商务的分离与用户对网站功能的期望不一致。 |

【https://baymard.com/premium/guideline-collections/t0ynv1】来源:

*为了成功地将传统 B2B 零售业务转变为现代数字电子商务平台,必须重新设计和重构软件架构。为了能够实施和利用电子商务行业的最佳实践,这是一个必要的步骤。此外,这样的架构变化将使 B2B 组织经得起未来考验,并使其有能力生成快速有效的迭代,并对任何新趋势或业务影响事件做出闪电般的快速响应。

T39*

B2B 搜索最佳实践:增加买家终身价值的 3 种方法

原文:https://www.algolia.com/blog/ecommerce/b2b-search-best-practices-3-ways-to-increase-the-lifetime-value-of-your-buyers/

当今的经济环境给商业公司带来了宏观层面的挑战,从对衰退的担忧到供应链中断。在这个充满挑战、瞬息万变的时代,对于制造商和经销商来说,保持领先至关重要。建立客户忠诚度和高价值买家的回头客是建立竞争优势的关键。但是,95%的高管 表示 他们的客户变化的速度比他们改变业务的速度更快,因此投资能够预测客户行为并帮助您保持领先的解决方案比以往任何时候都更重要。 埃森哲 发现92%的 B2B 购买都是从搜索开始的。这意味着建立无缝的在线用户体验是提高客户满意度和终身价值的关键,否则就有可能在竞争中失去业务。在这篇博文中,我们将讨论数字领导者使用数据优化网站搜索引擎功能并创造愉快的在线购物体验的三种方式。

1。使用搜索查询来了解买家想要什么

行业研究 显示94%的 B2B 买家在购买前会在网上研究产品,71%的买家不喜欢与销售人员互动,因此帮助买家快速找到他们想要的东西很重要。为了预测并更好地满足客户的需求,您需要了解他们在寻找什么。

有几种方法可以收集这些数据,例如通过调查、焦点小组、搜索分析、谷歌分析和内部搜索日志。还可以用转化率优化工具分析用户行为,跟踪用户如何与搜索结果交互。例如,假设您的大部分 B2B 客户正在搜索特定类型的工业设备。通过分析用户行为,你可能会发现他们经常点击带有详细规格和技术图纸的产品搜索结果。 了解了这一点,你就可以定制你的搜索结果,用这种类型的信息对结果进行优先排序,这给买家更好的体验,并有助于增加 AOV。这可以用商业搜索的 机器学习技术来处理。动态重新排名将根据客户的购买行为,如过去的购买、点击等,从您的产品目录中推广相关商品。

2.在搜索结果中提升重要产品

麦肯锡 写道 随着买家期望值的提高,购买过程中的个性化和便利性对于推动销售和保持忠诚度变得越来越重要。一种方法是根据你的商业目标对产品进行排序,比如促销新产品或季节性产品或高库存产品。例如,如果你有一个新系列的安全设备要推广,在搜索结果中推销这些产品会增加它们的知名度,使它们更有可能被购买。

你还可以使用一种算法,对利润、转换率和库存等因素进行优先排序,以帮助确定哪些产品对你的业务最重要。另一方面,用于隐藏缺货或运输时间长的产品或降低其优先级的功能可以防止可能导致放弃订单的挫折。

此外,在 B2B 销售中,重要的是考虑推广过去的购买,并根据个人买家定制搜索结果,以简化他们的工作流程并增加订单价值。

3.设计一个高性能的搜索体验

最后,你的网站搜索速度和性能对你的业务成功至关重要。akamai Technologies发现 页面加载时间延迟 100 毫秒会导致电子商务网站转化率损失 7%。想象一下,你是一个想买一大笔东西的买家,你最不想要的就是缓慢而没有反应的搜索体验。

Akamai Technologies 发现 页面加载时间延迟 100 毫秒会导致电子商务网站转化率损失 7%。

搜索经常被低估。定制选项似乎是一个好主意,但它们往往速度较慢,更容易出错,并且需要不断维护,从而导致高 OPEX 成本。此外,如果您的目录中有许多具有复杂规格和属性的产品,那么具有实时索引功能的搜索解决方案对于实现大规模速度至关重要。当一次搜索体验可能让你损失几十年的重复订单时,重要的是要考虑实现一个灵活、高速的 API 优先的解决方案,适合任何可组合的技术堆栈。此外,自动完成和分面搜索等功能通过加快搜索结果来改善客户体验。

通过遵循这些最佳实践,B2B 分销商和制造商可以通过解决未满足的买方需求来创造可持续增长,从而增加他们的客户终身价值。高级网站搜索可以轻松创建无缝购买体验,赢得客户忠诚度和回头客。要了解如何成为搜索领域的数字领导者,请查看这些 资源向我们的专家请求搜索审核

成为你想看到的改变

原文:https://www.algolia.com/blog/algolia/be-the-change-you-want-to-see/

正如我们的联合创始人 Nicolas Dessaigne 在几周前的博客中所说,他最近将控制权交给了我,让我接替他担任 Algolia 的首席执行官。工作了将近 3 周,充满了许多高潮,但也充满了悲伤,因为最近世界上发生的事情太可怕了,令人深感不安。乔治·弗洛伊德最近死于那些宣誓有责任保护我们所有人的人之手,这让我非常沮丧。任何形式的种族主义和歧视都是不可接受的,任何无谓的暴力行为也是如此。

最近的悲剧和随后的内乱发生在新冠肺炎疫情已经紧张的时候,这在许多方面扩大了社会差距。这就是为什么我个人认为我们需要“成为我们希望在这个世界上看到的变化”——给那些听不到的声音,给那些看不见的东西以可见性,给所有人以同情。当我审视 Algolia 的核心价值观时,平等融入了我们表达谦逊的方式、我们认为每个团队成员都同等重要的方式,以及关爱是如何帮助彼此取得成功的。

那么我们来谈谈上周发生的事情。我们不能转过身去,认为如果我们回到日常生活中,这一切都会消失。我们必须继续前进,取得进步——但我们只能通过积极地继续倾听、进行对话和继续关心来做到这一点。我们站在一个更广泛的社区中,我们相信这取决于我们所有人一起努力创造一个我们结束歧视和偏见的未来。我们必须通过正义、同情和怜悯做得更好。

周二,我们召开了全体员工扩大会议,分享了我们正在采取的紧急措施。和往常一样,在 Algolia,当员工提出互相帮助的建议,并作为一个团队挺身而出时,坦诚和关心溢于言表。这是我们今天要做的。

对于我们的团队成员,我们希望尽可能多的参与其中:

  • 我们正在检查我们的员工,看看他们做得怎么样,倾听他们的故事和建议,并提供免费的咨询资源。
  • 我们将举办一个倾听圈,员工可以在这里相互分享他们的经历,以增加同理心,并对少数族裔每天面临的问题有更深入的了解。
  • 我们将邀请演讲者谈论种族不公正,并提供我们在工作场所和社区中互相帮助的方法。

对于我们的地方、国家和全球社区,我们正在立即采取行动,并为 Algolia 及其团队开发新的方法,使其成为变革的力量:

  • 我们正与其他公司合作,敦促国会议员支持 2020 年 5 月 29 日的一项决议,谴责警察暴行、种族貌相和过度使用武力。
  • 我们将向致力于改变我们国家的组织捐款。
  • 我们鼓励团队成员利用我们的慈善匹配计划,在帮助他们喜欢的组织创造变革时,将他们自己的影响加倍。

当我们采取这些谦卑的步骤时,我们承诺做得更好,做得更多。对有色人种的系统性种族主义和野蛮行为不容忽视,早就应该改变了。我们加入,因为世界说:够了。

保重,

贝尔纳黛特

自定义内部网站搜索的好处

原文:https://www.algolia.com/blog/ux/benefits-internal-site-search/

今天,众所周知,谷歌、亚马逊和网飞这样的巨头为搜索设立了很高的门槛。因此,用户希望随时搜索他们想要的内容,并立即获得相关的结果。不幸的是,许多网站和企业认为搜索是一种事后的想法,而不是一种商业工具。如果你的网站有一个普通的搜索工具或者没有优化的搜索工具,你可能会把用户从你的网站上赶走,并且浪费你的商业资金。

定制的内部网站搜索通过提供一个为企业量身定制的搜索引擎,将用户与网站内容或产品目录快速关联起来,从而帮助您保持竞争力。通过定制网站搜索,企业可以测试、调整和迭代搜索和 UX,以确保它对用户来说始终是一流的。自定义内部站点搜索是实现业务目标和流畅客户体验的关键功能。

内部搜索如何惠及客户?

自定义网站搜索将传统搜索提升为有益且令用户满意的体验。每个网站访问者都有许多好处:

减少搜索体验中的摩擦

自定义内部搜索使搜索流程更加简化和高效。大多数现代网站和应用程序都充斥着多种格式的信息,这些信息以各种方式组织在不同的微型网站和子域名中。

即使你的网站是精心组织的,绝大多数网站或应用程序用户并不知道你的布局,许多人也不会花太多时间去理解它。事实上,根据 Forrester Research 的调查,43%的网站访问者 在打开网站时会立即进入内部搜索栏。因此,一个适当优化和相关的搜索功能是连接他们所需要的最快捷的方式。

这是零售网站上使用搜索栏 的购物者比不使用搜索栏的购物者多花费 2.6 倍 的部分原因。定制搜索工具将有强烈购买意愿的用户与他们的需求紧密联系起来,而不需要他们进行大量的网站搜索或反复试验。

为每个查询提供更好的相关性

不幸的是,用户经常面对过多的模糊或偏离目标的搜索结果,太少的结果,或者在某些情况下,根本没有结果。如果一个搜索引擎的实现没有考虑到用户概况和客户及行业的期望,搜索将会受到影响,你的网站访问者也会注意到。当客户遇到糟糕的搜索体验时,他们会记住它。

定制的内部网站搜索通过向用户提供相关结果来消除这些客户痛点。相关性可以分为两个主要部分——匹配和排名。

匹配是指为查询找到适用的记录。要做到这一点,网站搜索必须容忍用户的错误,如打字错误和替代措辞。网站搜索还需要真正具有适应性,考虑自然语言特征和部分单词匹配等因素,以确保每个查询都能找到结果。

排名确保最佳匹配出现在搜索结果的顶部。最好的网站搜索工具了解用户的在线行为,并迎合他们的期望和需求。对于现代网站搜索,基于用户简档的个性化可以驱动优化排名。所有这些加在一起就能产生符合每个用户期望的结果,让访问者更加满意,并最终提高转化率。

为网站访问者提高 UX

对于用户来说,没有什么比一长串没有优先级的结果更糟糕的了。通过自定义搜索,公司可以突出显示搜索结果,以帮助用户了解为什么会返回某些结果。他们还可以 使用方面和过滤器 为复杂的搜索建立一个直观的界面,以及从网站的不同区域提取内容,以简化用户需要完成的搜索数量。

An example of a search query where several attributes are required to explain the result: the movie title & the actor name.

但是除了交易体验之外,网站搜索能做的不仅仅是引导客户快速转化。当访问者查询一个真正优化的、定制的内部网站搜索时,他们应该很高兴发现他们甚至不知道自己需要的内容或产品。相关产品和内容、季节性商品或企业希望推广的商品可以配置为在特定查询的搜索结果中显示,从而推动用户进一步参与您网站上的产品或内容。

在这个网络世界中,客户希望他们的需求尽快得到满足,而不是感觉自己在商业计划中无足轻重。他们也想获得鼓舞人心的经历。自定义内部网站搜索可以帮助你做到这两点。当您释放自定义网站搜索的潜力时,您的客户将从即时提供的更相关和个性化的结果中受益。这提高了用户满意度,建立了品牌忠诚度,并增加了回头客的机会。

内部网站搜索如何让企业受益?

受益于定制网站搜索的不仅仅是用户。提供强大的搜索功能是在用户对他们的搜索体验有很高期望的世界中保持竞争力的重要方法。毕竟,你的用户搜索越成功,你的生意就越成功。

自定义内部搜索也有助于解决公司面临的关键挑战:

揭露客户意图

其中一个挑战是,由于缺乏关于客户兴趣的数据,对客户的需求缺乏了解。自定义内部网站搜索功能可以让公司直接获得这些信息。事实上,当需求出现时,消费者通常会转向搜索,期望获得即时、顺畅的体验。这些“Now Moments”提供了与客户联系并了解其意图的最佳机会,因为每次搜索都会生成可操作、可分析的数据。通过搜索,企业可以直接了解用户在某个特定时刻的需求,并获得战略洞察力。

提高内容可发现性

另一个挑战是内容的可发现性。随着网站的发展,寻找特定的内容变得越来越困难。某些页面、产品或信息可能比网站导航本身更容易通过网站搜索找到。

自定义网站搜索可帮助您发现所有内容。无论你的站点上有多少页面或文档,只要是组织良好的索引的,你的站点搜索就能全部解析。配备了 联合搜索界面 的定制内部站点搜索工具特别有效,因为它们可以同时在几个单独的索引中进行搜索。例如,通过一个查询,联合搜索界面可以在一个简化且直观的界面中显示博客文章、常见问题解答和产品,其中相关性可以根据业务和用户规范进行调整。一个优秀的联合搜索引擎还可以包含同义词,并考虑到搜索过程中的拼写错误和其他关键变量。

通过这种方式,内部搜索最大限度地增加了为客户提供相关搜索结果的机会,而无需您付出特别的努力。推而广之,它提高了转化率。自定义搜索还允许您向用户显示特色产品或相关信息,这些用户可能不会在其他地方发现这些信息。

真正的商家如何从定制网站搜索中获益

Coursera, 一个拥有数千门课程和数百万用户的在线学习平台,需要一个能够跟上公司发展的网站搜索功能,而 Coursera 的开发人员无需付出太多努力。Coursera 需要直观的网站搜索,开发者可以随时定制和测试。使用 Algolia,Coursera 实现了 联合内部搜索 以及全新的 UX、高亮显示、标签等等。结果,Coursera 看到了 令人印象深刻的改进 :

  • 10 倍的搜索速度
  • 学位描述页面浏览量增加 10%
  • 30%的注册来自网站搜索

德国的在线杂货商 Bringmeister 正在努力满足网站搜索用户和开发者的需求。用户感到沮丧,因为他们必须键入准确的产品名称才能找到他们要找的东西,而开发人员对性能问题和他们的开源搜索平台缺乏灵活性感到沮丧。Bringmeister 在 Algolia 上实现了一个新的搜索功能,结果令人惊讶。Bringmeister 发现,退出搜索页面的用户减少了 63%,与搜索相关的客户投诉降至零。除此之外,Bringmeister 还有 增加效率和敏捷 几个方面:

  • 团队可以在没有开发者资源的情况下调整搜索排名。
  • 商业领袖可以使用查询规则来推广某些产品以及其他活动和合作关系。
  • Bringmeister 可以通过搜索向客户展示新的、鲜为人知的产品。

为什么需要自定义内部站点搜索

使用自定义网站搜索的网站在速度、用户体验、开发者控制和效率方面有优势。在这个世界上,近一半的用户在访问网站时会寻找内部搜索栏(成功的搜索会使转化率增加一倍以上),自定义网站搜索为保持竞争力和提供出色的用户体验带来了重要的好处。

Algolia 让您在网站或应用上轻松创建和实现出色的搜索。借助开箱即用的各种高级功能和丰富的分析功能,您可以将您的站点搜索转化为竞争优势。

了解更多关于 购买 vs .构建您的内部搜索 ,或 观看我们的演示 了解 Algolia 的行动。

数据驱动的决策优势

原文:https://www.algolia.com/blog/ecommerce/benefits-of-data-driven-decision-making-how-real-time-analytics-can-identify-user-intent/

你的电子商务网站出了点问题。一件商品突然停止销售,或者你在社交媒体上收到了关于购物过程的投诉。因此,为了解决这个问题,您需要做出一个(或几个)业务决策。

你使用哪种业务决策流程?

  1. 咨询神奇 8 球 (娱乐目的),然后跟着你的直觉走——嘿,你还没有错(据你所知)
  2. 召集一次会议 以获得上级的意见,然后进行投票并希望避免需要某种决胜局
  3. 在人工智能的帮助下生成大量的流数据 集合,然后对其进行分析,看看你能做出什么样的基于数据的决策

如果你选了 C,是的。当然,是数据——正确的数据——带来了更好的商业决策。

一些商业领袖仍然不收集数据,而是以老式的方式做出商业决策,比如在他们思考产品线过去发生了什么时,听取他们的直觉指导。然而,分析目前的数据,然后做出明智的决定,显然是正确的答案。

收集实时的事实、数据和指标,根据这些数据获得可行的见解,并做出适当的回应,这是明智的、风险较小的,也是你想继续做生意的基本要求。

那么我们甚至需要一整篇博文来阐明为什么 c 是最佳答案吗?也许不是,但是既然你已经读到这里,我们将会建议一些方法来帮助你发现用户意图并做出明智的决定。

旧类型的数据收集:会议、共识、猜测

在过去,商业人士会在他们的游戏中处于领先地位,例如,与利益相关者一起投票,因为没有基于科学的方法来阐明正确的决策。获取能够准确告知好的决策的相关数据是不可行的。高管和员工都必须查看他们偶然发现的任何信息——例如,通过批量数据处理收集的几个月或几周前的数据——然后猜测用例的最佳行动方案。

有时行得通,有时行不通。如果成功了,这个团队可能没有办法复制它。如果没有,很可能没有办法找出原因,更不用说如何纠正了。

幸运的是,访问实时数据为商业决策提供信息,然后熟练地采取行动,这是许多公司现在可以做得很好的事情。由于人工智能和机器学习,对企业来说,这是一个完全不同的竞技场,特别是那些在数字领域运营的企业,如电子商务网站。

有了先进的分析技术,公司可以挖掘出更多的信息,而且相对来说是瞬间完成的。此外,如果指导明确,他们可以采取建设性的措施来实时响应客户的需求。

什么是数据驱动决策?

数据驱动的决策意味着利用大量的最新原始数据。能够看到趋势和模式可以使所有的差异。例如,通过将实时数据与产品供应相匹配,机器学习正在改变许多在线零售商做出管理库存的关键决策的方式。

那么,数据驱动的决策(简称 DDDM)就是根据充足的数据做出商业决策的过程。最好是新鲜相关的实时数据。

就这样。让数据说话,倾听它说什么,了解如何最好地利用信息,并采取相应的行动。

再简单不过了。什么是 实时 数据驱动决策?

当速度的概念进入数据检索等式时,事情变得有点不确定。

当提到响应时间时,流行的“实时”是一个松散的概念,无论营销人员是指发生时间还是指不太令人兴奋的版本, 接近实时 。我不想打击任何人的热情或营销人员的热情,但据我们所知,没有任何信息是真正实时提供的,因为它正在发生。这是因为在数据驱动的方法中,仍然必须收集和处理数据,尽管是在几毫秒内,但随着时间的推移,仍然需要

所以“近实时”是一个更准确(法律上不太确定)的术语。这并不意味着一些软件程序在处理数据时不会更快:被认为接近零的延迟时间因应用程序和网站而异,因此一些公司声称的实时分析比其他公司更真实。(在 Algolia,我们只是指即时搜索结果:从用户输入一封信到得到回复之间没有延迟。)

为什么实时数据分析如此重要?

对不断变化的迹象和环境的实时可见性使公司能够收集有价值的商业情报,然后以可能改善客户体验或带来回报的方式快速做出响应。预测机器学习(ML)模型可以快速关联大量数据,以揭示问题。这意味着先着手解决需要彻底改革的问题。如果您的竞争对手在基于数据的运营和决策方面领先一步,而您却依赖旧信息来做出关键决策,他们很可能会进一步领先。

公司看重 DDDM

在很大程度上,成功的公司正在利用数据驱动的技术来增强他们的决策能力,并最终利用这一流程在竞争中胜出,实现他们的业务目标。我们知道这一点是因为:

  • 根据 Forrester (2020 年)的调查,90%的企业领导者理解实时洞察的价值,他们中的大多数人(84%)认为能够进行实时课程纠正是必要的
  • 在一项涉及跨国公司 调查 的研究中,80%的公司表示他们通过利用实时数据实现了一些改进。

因此,你有一个明智的选择:使用实时分析作为商业决策的基础,可以提高你的关键绩效指标(KPI ),这是一个很好的选择。

……但不一定适用

那么,是什么阻碍了更多的企业将其数据驱动的金块转化为重大成功呢?可悲的是,将知识——看起来很基础,看起来很清晰——融入到做出良好的实时分析决策的蛛丝中并不容易。

即使你可以将所有合法的数据带入组织的集体视野,你仍然必须能够理解这些数据,能够从不断堆积的废话中提取出有价值的部分。数据也可能过于复杂,这使得数据分析成为一项挑战。

公司不一定知道如何将他们的综合数据转化为成功;他们不知道分析他们挖掘到的大量信息的正确方法。

事实上,专家估计,意识到建设性地使用数据的重要性的商业领袖中,只有一小部分人能够利用实时数据来指导他们的业务发展。

成功的数据驱动型决策不一定是通过让合适的技术专家来解读茶叶,甚至是通过选择合适的分析技术提供商来实现的。好的结果不能保证。

这里有一个 的研究 证实了这种不幸的情况。研究人员引用:

  • 访问数据有问题
  • 无法理解用户需求或业务环境
  • 收集劣质数据(例如,不适合决策)

有点发人深省。但这并不意味着应该完全放弃数据驱动的决策。

还是一个值得冒的风险

尽管可能会遇到障碍,许多公司还是继续投资分析工具。然后,如果他们能够战胜困难——看看他们的图表和仪表板,弄清楚如何分析数据,并在收入方面做一些伟大的事情——他们就赢了。

另外,一个“安慰”的好处是,如果你还不能做出最好的数据驱动的决策,这些决策中的一部分可以为你做出。一些类型的人类决策不再需要,因为有了人工智能,某些最佳决策可以自动化。

(嘿谢谢,AI 数据分析师!可能没有人感谢过你们机器人不知疲倦的信息检索和想法。只要记住:虽然我们喜欢你做的事情,但你不是负责人,你只是在为我们做决定。)

数据驱动决策的十大好处

抛开障碍和机器人欣赏不谈,让我们专注于应用实时分析如何帮助你捕捉和优化你的网站或应用,这样你就可以更好地了解你的 用户意图

得益于基于数据做出的准确决策,消费者已经习惯于即时满足他们的需求,比如在网上购物时。例如,当有人在你的网站上结账时,如果你能使用实时数据处理结论进行交叉销售或追加销售,你就能实现可观的利润增长。

借助智能数据驱动的决策,您将:

获得有价值的见解。 当你能找到数据的底部时,你已经回到顶部的一半了。

见机遇。 有了好的数据就有了扎实的思路和方向。

根据成熟可靠的数据集做出更好的决策

趁热打铁。 通过实时分析,您可以了解并主动解决客户问题和需求变化。

提高效率。 当高管、经理、员工和顾问拥有他们得出明智商业结论所需的所有数据点时,他们可能会承担更少的风险。可能会犯更少的错误,导致更少的车轮旋转和浪费时间。

满足顾客,提高转化率。有效的客户服务和个性化的根本是什么?深刻的分析。

通过发现隐藏的数据宝石,击败竞争对手 你可以利用这些数据领先于可能没有采用分析平台的竞争对手。

创造数据驱动的文化。 当您将数字洞察力作为团队成员和您的组织的资产来重视和推广时,您就创造了一种以教育为中心的文化。

更加敏捷。随着数据的指引,你可以做出正确的选择来保持前进的势头。

增加收入。

DDDM 在行动:两个案例研究

在哪些场景中,关键数据驱动的决策在重新定向营销工作和实现企业转型方面发挥了重要作用?这里有几个鼓舞人心的大企业例子。

沃尔玛

这家大型零售商收集了大量的客户数据,并以各种方式使用这些数据,依靠大数据分析“实时了解药房、配送中心以及整个商店和电子商务的工作流程。”

借助实时数据分析提供的专家见解,公司能够根据客户需求调整库存,并立即采取行动,最大限度地提高客户满意度和利润。例如,他们发现这是一个 非常 的好主意,在飓风之前(和之后)储备大量某种舒适的食物 草莓馅饼 。是的,果馅饼既可以在断电前放在烤面包机里加热,也可以在天黑时凉着吃——会是这样吗?或者也许他们只是数百万人的一顿大餐,不管即将到来的高潮还是健康不佳。尽管如此,大数据不会说谎,这已经成为沃尔玛一个容易操作的盈利技巧。

在分析应用和数据驱动决策方面,这家连锁巨头还做了什么?当购物者在他们的网站上搜索可能缺货的类似产品时,他们会参考历史数据和当前数据来建议商品替代品。他们使用数据来优化供应链路线,个性化 电子商务 体验,并改善实体店的结账流程,等等。他们显然已经掌握了分析数据的艺术。

西南

航空公司的各种运营活动通常依赖实时数据。广受欢迎的航空公司西南航空也不例外:在其他项目中,它利用目标客户数据来加深对客户会喜欢哪些新服务的理解。

如果你坐过西南航空公司的飞机,你会知道它的登机流程:根据办理登机手续的时间,让乘客排队,支付额外费用,或者持有常飞旅客身份。可以肯定地说,西南航空公司的登机过程很慢,尽管它可能比指定座位时要快。这对寄宿生来说也是一种压力,尤其是对最后一批寄宿生来说,他们甚至可能无法为自己的随身行李找到空位,而且很可能会被塞进中间的座位。

如果你曾经是这样的人,你会很高兴听到西南航空公司一直在研究如何让人们更快登机——就像它刚刚起步时能够做到的那样——而不是诉诸于预先分配座位,出于某种原因,这可能会占用更多的时间,而航空公司的时间表是不必要的。

该公司正在利用数据科学和实时数据观察来确定登机的最佳方式,何时可能出现登机问题,以及延误背后的原因。实时收集的数据还可以提供可操作的见解,说明可以做些什么来改善某些类型的登机情况。

用于搜索的实时分析

我们说到哪里了?哦,对了:在实时数据的帮助下,西南航空和沃尔玛这样的数据驱动型组织能够进行创新,做有效的事情,既改善客户体验,又增加利润。

此商业策略可用于得出结论的一个领域是在线搜索和发现。毕竟,在处理和正确解释人们的搜索词,然后将他们指向他们想要的内容的过程中,涉及到大量的数据。

例如, Algolia 是一家搜索提供商,每天提供数十亿次搜索查询的近实时分析。可以:

  • 使用我们的 API 在您的网站或应用程序中无缝实施搜索
  • 使用我们的 搜索分析 查看用户在做什么
  • 找出 电子商务搜索 导致转化的百分比
  • 使用数据驱动的决策来提高您的指标和盈利能力
  • 分析您的网站搜索数据 查看产品搜索频率的变化,从新数据中获得实时洞察,帮助您保持(或确保)客户忠诚度和竞争优势

你对为你的网站搜索决策者获得更多数据驱动的洞察力和明确了解你的用户意图的好处感兴趣吗?用一个 现场演示免费开始 来深化你的搜索优化吧!

最佳市场 UX 搜索实践,由行业领导者展示

原文:https://www.algolia.com/blog/ecommerce/best-marketplace-ux-practices-for-search/

在本帖中,我们将从世界上最受欢迎和最赚钱的市场中寻找 UX 最佳市场实践。您会注意到一个趋势:市场搜索引擎需要支持高级搜索和浏览场景,如动态分面、内容传送带、自动完成下拉列表和联合搜索。

如果您受到启发,不要忘记以一种跨 web、移动 web 和移动应用程序提供统一的全渠道体验的方式来实现这些实践。

亚马逊:内容传送带

亚马逊主页有一个广泛的内容展示,涵盖几十个类别。体育用品,流行的交易,节日装饰,最后一分钟的交易被叫出来。这是浏览百货商店的数字等价物,也是商品内容传送带的一个很好的例子。

Amazon content carousel

https://www . algolia . com/doc/guides/solutions/gallery/static-content-carousels/

Etsy:个性化市场 UX

从基于最近搜索和浏览活动的建议搜索,到个性化选择和最近查看的商品,Etsy 知道如何通过个性化留住和重新吸引购物者(当然也非常了解这位作家!)

Etsy search personalization

https://www . algolia . com/doc/guides/solutions/gallery/recent-search/

新蛋:错别字公差

购买电子产品通常需要输入精确的搜索查询,然而品牌名称的变化很容易被打错,尤其是手机用户。这就是错别字容忍度如此重要的原因。新蛋明白了:搜索“三星 Galexy”会得到与“三星 Galaxy”相同的结果。

色鬼:优化的中间搜索屏幕

作为到即将到来的搜索结果页面的过渡的屏幕是珍贵的不动产。当一个 Goat 用户搜索一个产品时,他们会快速浏览一下之前的搜索结果作为提醒,同时显示其他用户正在搜索的内容。这可以帮助一个缺乏灵感或漫不经心的购物者变成一个认真的买家。

Houzz:引人入胜的搜索栏

Houzz 知道用户可能不了解他们网站提供的所有购物和内容的可能性。他们没有提供一个空白的搜索栏,而是利用这个机会为购物者提供多种搜索和发现选项(照片、产品、优点……)——并随之转化。

vide dreaming:手机上的可搜索过滤器

您是否曾经不得不滚动一长页的筛选值来找到您要找的值? 因为过滤器的数量有时太多,就像这里的品牌一样,Videdressing 为用户提供了一个在这些过滤器中进行搜索的便利,并在给定的上下文中找到可用于过滤的品牌。

此外,Videdressing 使过滤视图非常直观,以提高可访问性和用户体验。

沃尔玛:定制面

沃尔玛的面是为特定的产品类别量身定制的。例如,搜索 t 恤会触发标准过滤器,如尺寸和颜色,但也会触发“袖长样式”或“类别”等方面。(虽然搜索结果中的照片裁剪可能会更好)。

ManoMano:联合搜索

除了提供相关的搜索结果(加粗最相关的搜索词的奖励!),ManoMano 巧妙地根据用户的个人喜好和处理信息的方式,为用户提供多种类型的内容,转化为多种转化路径。

Mano Mano federated search
https://www . algolia . com/doc/guides/solutions/gallery/federated-search/

对建立这样的高级体验感兴趣吗?下面是我们的指南如何构建高级市场搜索

电子商务个性化的最佳实践

原文:https://www.algolia.com/blog/customers/best-practices-for-ecommerce-personalization/

通过个性化直接面对每一位顾客是在这个艰难的市场中取胜的关键。这种客户忠诚度是一个成功的电子商务品牌与竞争对手的区别。换句话说,千篇一律的网络营销方式已经成为过去。公司需要通过从各种客户行为和互动中捕捉每一个信号,分析数据并实时应用于每个渠道,来适应他们的目标受众。

这篇文章展示了个性化电子商务的最佳实践。 学习那些创造了各种个性化购物体验的流行品牌的成功经验。了解个性化如何将他们的在线业务提升到客户忠诚度的新高度。

第 1 部分:个性化的最佳实践—搜索结果和类别页面

Algolia 提供的最具影响力的优势之一是为搜索和分类页面创造更加统一的个性化体验。将 Algolia 个性化应用到这两个页面,可以确保在整个用户旅程中获得更加一致和个性化的体验。

体育用品零售商的个性化搜索结果&Gymshark

image gymshark-perso-blurred

Gymshark 通过结合事件和方面值来创建用户资料,确保每位购物者都能看到最符合其独特偏好的产品。例如,Gymshark 的个性化策略包括用户点击出现在搜索结果中的产品、点击过滤方面和“添加到购物车”按钮等事件,以及其他类似事件。

个性化搜索结果基于匹配查询返回,然后基于用户对活动、颜色、特征和适合度的特定简档偏好提升一些项目。每个用户 ID 的个性化策略背后的逻辑听起来会是这样的:“你主要购买了紫色的女性产品,这些产品是为瑜伽制作的;下次你来的时候,让我们展示更多这样的产品。

您可以通过三个主要步骤实现个性化:

  1. 向 Algolia 发送用户数据(需要编码):
    • 计划跟踪哪些用户行为
    • 使用 Algolia 的 Insights API 向 Algolia 发送点击和转换事件以及用户令牌。用户令牌允许 Algolia 识别执行特定事件的用户
  2. 配置个性化策略:
    • 使用 Algolia 仪表盘配置每个事件和方面的加权重要性
    • 使用 Algolia 仪表盘模拟和测试您的个性化策略
  3. 在生产中启用个性化:
    • 为每个查询添加一个额外的参数以实现个性化

Image personalization-enabled

澄清一下,Gymshark 的成功指标:

  • 搜索转化率:从 Algolia 之前的 6.2%上升到平均 10%,并且还在攀升
  • 来自搜索的订单:从不到 10%的前 Algolia 增长到 2020 年黑色星期五的 30%以上
  • 来自搜索用户的收入同比增长 400%

奢侈品时尚市场个性化搜索结果页面:真实真实

image The Real Real

一刀切的个性化方法并不奏效。不同的商业目标需要不同的策略。因此,每个公司都需要分析他们的具体使用案例,并基于三个主要问题来配置个性化策略:

  1. 您应该包括哪些事件,这些事件相对于其他事件有多重要?
  2. 你应该包括哪些方面,它们相对于其他方面有多重要?
  3. 个性化对你的相关性有多大影响?

对于某些行业,特定方面或事件可能比其他方面或事件更重要。像 Real Real 这样拥有多个品牌和产品类型的奢侈品网站上的用户行为,可能与 Gymshark 这样的运动服装零售网站上的用户行为不太相似,后者提供更多由单一品牌生产的特定产品,产品类别数量明显较少。

因此,在现实生活中,他们选择了一种个性化策略,这种策略依赖于用户点击 faceting、产品视图、“添加到购物车”CTA 按钮以及定义为已完成订单的转换。个性化搜索结果基于匹配查询返回,然后基于用户的特定配置文件偏好提升一些项目,如设计师姓名、尺码、颜色、性别、金属类型和戒指尺寸。

眼镜零售商个性化分类页面:EyeBuyDirect

image eyebuydirect

EyeBuyDirect 网站上的购物者享受一致的个性化体验。例如,当用户浏览到“女性眼镜”类别页面时,搜索结果会根据每个用户的独特偏好(如镜架样式/形状或材料)进行放大。Algolia 个性化为所有行业提供信号,在本例中为镜架,非常适合眼镜行业使用案例。换句话说,可以个性化的信息种类是没有限制的,就像你在这篇文章中看到的其他公司一样。每次用户浏览网站时,他们都会看到根据他们的浏览行为、历史记录和用户资料定制的产品结果。

EyeBuyDirect 的成功指标:

  • 通过搜索、增加的浏览和个性化服务,收入增加了 4%
  • 根据产品推荐,转化率提高 1–1.5%

image conversion-eyebuydirect

A/B 测试零售商搜索结果和类别页面的个性化:Honest Brew

image ab-test-honest-brew

Honest Brew 运行 A/B 测试来评估其类别页面浏览和搜索结果页面的不同个性化策略。根据用户对价格、啤酒风格、数量等的独特偏好,Honest Brew 微调其个性化策略,以在低风险环境中通过实时流量提高点击率和客户转化率。

【T2

第二部分:附加个性化体验

保存的时尚市场搜索和通知:Mercari

image mobile-mercari

在 Mercari 的 marketplace 上,当用户在搜索中找不到商品时,他们可以选择保存搜索结果。因此,只要匹配搜索查询的项目被列出,Mercari 就会通知用户。

用 Firebase 保存了搜索警报

当有新的匹配商品时,自动通知顾客。保存的搜索非常适合自动化重复的搜索查询,并与不断变化的内容保持同步,例如,在具有房地产列表和在线市场的网站上。

个性化过滤器——时尚市场的用户偏好设置:Vide Dressing,Depop

image vide-dressing-mobile

在 Videdressing 的设计师时尚网站上,用户可以保存品牌、类别和尺寸的偏好,在继续浏览时实现个性化。

image depop-mobile

购买设计师时装的顾客可以在 Depop 的应用程序中保存他们喜欢的风格、品牌和尺寸,方便他们继续浏览时的个性化。

个性化过滤器——时尚市场的愿望清单:视频着装

image vide dressing

当用户在 Vidressing 的市场上找到他们想要的产品,但不准备购买时,他们可以将它们添加到愿望清单中。当用户继续浏览时,Videdressing 使用这个愿望列表数据来个性化用户体验。

结论

个性化是电子商务公司的强大工具,帮助零售商优化销售流程,最大化转化率和整体收入,同时提高客户满意度和品牌忠诚度。

联合搜索——它是什么,为什么使用它,最佳实践

原文:https://www.algolia.com/blog/product/best-practices-for-federated-search/

联合搜索本质上是跨多个站点、应用程序或数据源运行搜索查询,并以单列或多列布局显示结果。

通过一个联合搜索界面,一个流媒体平台可以显示来自不同数据源的歌曲、艺术家和播客的列表——只需一个查询。电子商务也可以通过在显示器的不同部分显示推荐和不同类别的产品而受益。

在一个网站环境中,你可以创建一个跨多个域或子域的实时搜索应用。这很简单,只需在要包含在中央索引中的站点列表中添加一个新的域或子域,然后创建一些附加的搜索规则。例如,如果您有一个“父”网站和几个“姐妹”网站,您可能希望父网站平等地显示来自所有网站的结果,但在姐妹网站上,它可能更喜欢来自该姐妹网站的结果。

对于企业搜索,它可能包括不同的信息源,如内部网、数据库和其他数据集。您可以集中后端数据,或者在不同的应用程序和数据集上执行相同的查询。

在所有情况下, 联合搜索 从单个查询开始,从多个数据源返回不同的结果,帮助您的用户找到他们需要的信息。

联邦搜索案例研究:NSW.gov.au

NSW.gov.au 是澳大利亚新南威尔士州的公众形象。像世界各地的其他政府机构一样,有一个顶级政府网站加上几十个其他机构网站,如财政部、卫生部、工业部等。

NSW.gov.au 大学的团队发现,访问者经常在姐妹机构网站 ServiceNSW 上搜索有关驾照、酒牌、搬家和其他主题的问题。

federated search for drivers license

驾照更新信息在 ServiceNSW。NSW.gov.au 提供跨两个网站的联合搜索,为网站访问者提供更好的用户体验。

为了满足访问者的需求,NSW.gov.au 混合了来自 ServiceNSW 的数据集(包括网页、PDF 和 DOCX 内容),并将结果与母网站的内容一起交付。

在 NSW.gov.au 上的网络搜索包括来自这两个网站的结果,但相关性评分和机器学习会自动改善结果,以支持某些关键词搜索。访问者在 NSW.gov.au 上输入“rego”(驾照注册的缩写),就会从 ServiceNSW 得到结果。

每个站点被独立地爬行,并且数据被合并到联合搜索索引中;不需要额外的连接器。在另一种情况下你可能需要使用我们的API和其他 开发者资源 来构建一个中央索引。

跨网站联合搜索的注意事项

在确定如何跨站点联合搜索数据时,需要考虑几个因素。这里只是几个。如果你想要更多的信息,看一看我们深入的 联邦搜索的实现

整理搜索结果

每个站点都有自己的目标。不同网站的内容和受众可能会有很大差异,因此确保为正确的查询提供正确的内容非常重要。

您可以配置 规则 以多种不同的方式在一个或多个站点上交付结果。例如,您可以按类别、按前端的过滤器,甚至按后端的索引过程和查询执行来组织。这些只是思考这个问题的几种方式。让我们简单地看一下它们中的每一个。

  • 类别 :每个网站都可以有自己的搜索同义词或推广。在这种情况下,您可能希望将系统配置为根据查询的来源在每个网站上不同的类别中进行搜索。
  • 过滤器&过滤器 :你可以在每个站点上使用不同的 过滤器或面 来缩小搜索结果的范围,只搜索那个站点或主题。换句话说,过滤器可以明确地按域过滤,或者,如果站点有非常不同的内容,过滤器可以按内容类型过滤。
  • 索引 :您的索引过程可以用一个相似的标签对网站 A 和 B 中的内容进行分类,这样每个记录在进入时都会被标记,但为网站 c 设置一个不同的标签。然后您可以根据标签建立搜索面规则。或者,也许你想偏向某人正在搜索的网站的结果。在这种情况下,您可以在查询时使用一些步骤来提升某些结果,从而提升该域的结果。此外,您还可以在管道本身进行过滤。
  • 多个查询 :可以在不同的数据源上并行执行同一个查询*,发送每个数据集的结果。*

*搜索索引可能是上述所有内容的混合。换句话说,在索引和查询时,联邦搜索解决方案有许多不同的选项来传递相关信息。从确定每个网站访问者的目标和结果开始,然后你就可以确定如何通过搜索来实现这些目标。

索引、模式和数据转换

也许联合站点搜索的最大挑战是索引和管理完全不同的模式和站点组织。

  • 不同的模式 :每个站点可以使用不同的模式,如 Dublin Core、Open Graph 或 Schema.org,它们具有不同的元数据字段以及日期和时间格式。
  • 域结构 :每个站点可能有非常不同的域结构和层次结构。搜索引擎可以使用域结构(例如/index、/products/、/services/、/services/details/,等等。)对结果进行分类,提高相关性。
  • 标记 :索引可受(1)h1、h2、h3 等如何影响。标签是结构化的,以及(2)标签中包括什么元数据(例如,元标签和属性)。

为了管理这些差异,您可以添加规则来在数据被索引时转换数据。例如,您可能希望以一致的格式存储记录和数据,如时间/日期。您还可以选择转换搜索索引的内容。一个网站可能称它为“冠状病毒”,另一个网站可能称它为“新冠肺炎”,所以您需要存储一个包含同义词的索引。这也可以通过更高级的 向量分析 来处理,将数据聚类为数字主题。

另一个考虑是内容的重复。不同来源的数据可能具有相同类型的内容,例如/about 或/company 页面,因此当某人搜索有关业务的信息时,他们可能会遇到这两种情况。您需要决定如何处理重复或非常相似的内容。

滤镜

搜索过滤器 帮助用户缩小搜索范围,找到他们想要的东西。使用联合搜索,您可以创建跨每个站点或特定于每个域的过滤器。

federated search results

一般来说,有三种不同类型的滤镜。这些并不相互排斥;如果您愿意,可以使用其中一个或全部三个。

  • 静态过滤器,允许最终用户在输入搜索查询后过滤内容。例如,您可以给访问者一种按主题或评级过滤结果的方法。
  • 动态过滤器(也称为方面),根据搜索结果集的值生成。例如,如果用户搜索“汽车”,你可以显示所有品牌——丰田、福特、沃尔沃等。—可用于该类别,这不同于搜索“船”或“摩托车”
  • 使用过滤表达式过滤结果。在这种情况下,最终用户将始终看到过滤后的结果。例如,您可以将结果限制在一个站点或站点的一部分。如果您销售衬衫、鞋子和珠宝,您可以从一个或多个部分中排除结果。换句话说,类别是过滤器的自然起点。

无论你选择哪种过滤器,你都要考虑它们如何出现在每个网站上。你可以在每个站点上使用相同的过滤器,或者根据上下文来提供过滤器。

分析学

关于分析的一个简短说明:如果你已经添加了跨不同来源的联合搜索,你如何知道它在工作?每个网站所有者都希望查看他们网站的搜索性能。应该监控点击率(CTR)、转换、热门查询和无效搜索或无结果等指标,以确保访问者找到他们需要的内容。

结论

联合搜索可以为最终用户提供更好的搜索体验,但它需要大量的规划,以确保结果符合每个网站的预期。值得指出的是,联合搜索并不意味着每个网站都需要使用相同的 CMS 或遵循完全相同的模式或元数据标准。只要搜索索引能够标准化,就很容易产生好的结果。*

网站和应用程序搜索可用性秘密

原文:https://www.algolia.com/blog/ux/best-practices-for-site-search-ui-design-patterns/

你的网站搜索用户界面(UI)是否易于使用,或者它是否是一项需要极大耐心的可用性工作?你的整体用户体验(UX)得到好评吗?

把你的搜索用户界面放在显微镜下,然后根据你独特的使用情况精简你的网站搜索用户流,这是你能做的最被低估但最有力的事情之一,以促进你的在线业务。

诚然,一些公司——从初创公司到老牌巨头——在网页开发和为目标受众应用 UI 设计技巧上投入了大量的精力和资源。有些人甚至创建和分析复杂的用户角色。但是,即使是最深思熟虑的搜索用户界面设计也可能会无意中让人陷入困境。由于糟糕的搜索模板设计思想、被误导的开发者决策以及过时的技术,某些问题会在网站搜索界面中突然出现。

搜索:不是“一劳永逸”

在动态的在线商务世界中,持续监控和动手调整你的搜索功能可能会很有见地;甚至可能是转型。

无论你是经营一家小型电子商务商店,管理一个大型商场,还是维护一个出版或企业网站,执行良好的网站搜索设计工作都是你最好的朋友。

例如,如果你的网站有大量的内容,与其强迫访问者浏览你的网页目录,你可以强有力地帮助他们直接找到相关的条目。当您的目标最终用户能够避开痛点并找到他们需要的东西时,战斗就成功了一半。

常见搜索 UI 问题

你如何确保良好的搜索体验,在回报用户的同时,有助于提高客户保持率和转化率?

这里有一些现实世界中交互设计的障碍——搜索信息架构的问题可以通过简化你的 UX 设计过程来解决。

错误设计流程的提示包括:

别人找不到你的搜索框(或放大镜)

不够大,或者不在你主页的显著位置,不在下级页面的同一位置一致显示。现在怎么办?

您搜索的外观/感觉与网站的其他部分不匹配

为什么?也许一个开发人员想通过在搜索按钮上添加铃铛和口哨来创造“好的 UX”,使视觉设计“令人兴奋”也许他们的想法是添加弹出动画和古怪的排版。然而,这些干扰正在干扰有效搜索用户旅程的完成。

搜索结果不容易被截留

你尽职尽责地向搜索者展示密集的文本块和冗长的描述。不幸的是,尽管你试图给他们提供细节,但人们不容易通过查看这些乱七八糟的东西来找出他们应该点击哪些相关的结果。他们需要一种快速定位的方法。

搜索者可以删除“没有结果”

如果他们的搜索词不太正确或输入不正确,他们可能得不到匹配的结果。它发生了。然而,你不必“终止”他们的搜索,让他们悬在虚空中。相反,你可以使用这个空间来提供他们可能喜欢的替代项目的快捷方式,其他人最近在你的网站上进行的搜索,或者促销。

他们没有显示关联内容

假设有一篇有趣的博客文章宣传他们刚刚搜索的产品,但是当他们在搜索栏中键入产品名称时,他们只能看到产品页面的相关信息。

联邦搜索 就解决了这个问题。它呈现多种类型的内容,如产品相关的评论、常见问题解答、产品使用指南、教程。您可以标记每种类型的搜索结果(例如,“产品”和“操作视频”)。联合搜索还允许您通过微调结果的相关性来满足每个用户的需求。

没有帮助 微缩

Microcopy 是一些文本,可以帮助网站用户导航搜索界面或有效地生成搜索结果。如果它在一个重要的搜索关头丢失了,你的搜索用户可能很难回到正轨。

您不提供建议搜索和自动完成

这些 两个响应式设计特征 通常出现在大多数现代搜索体验中,用户期望他们的帮助,例如,如果他们输入错别字。

您的搜索功能并非人人都能使用

在使用网站搜索和其他网站功能方面,人们有不同的能力水平。由于视力不好等障碍,他们中的一些人需要一些帮助。你希望你的 UX 设计能被所有的访问者容易地使用,你可以用已建立的 指南 来增强它。

为什么无故障搜索如此重要?

对于一个企业来说,所有这些场景都是不确定的,尤其是考虑到 43%的网站访问者会立即进入搜索栏。然后,这些专注于搜索的人转化的可能性是其他人的 2-3 倍。所以从他们决定搜索的那一刻起,你就不想让他们失望。

不要担心:你可以让你的搜索 UX 对你的信息搜索者来说天衣无缝,这意味着他们在这个过程中保持富有成效的参与。

超级站点搜索最佳实践

这里有一些我们最喜欢的行之有效的方法来创建用户满意的、优秀的搜索:

评估你的搜索栏

说到搜索,用户研究发现人们习惯于行业标准的布局,一切都按照他们期望的方式运行。例如,他们希望能够很容易地找到搜索图标或文本输入框。

召集你的设计团队利益相关者,看看你主页上的搜索栏,问这些问题:

美观吗?

一个好的搜索界面是一件美好的事情:它看起来越吸引人,就越有可能吸引网站上的人们来查看它。

搜索框是否放在显著位置?

传统智慧:让你的搜索栏或放大镜图标在你的主页上容易被看到,不管它是在页面的底部中心、顶部中心还是右上角(或右下角)效果最好。然后,为了保持一致性,把它放在所有页面的同一个位置。

醒目吗?

如果你的网站访问者被迫首先搜索你的搜索栏或放大镜图标来开始他们的搜索,你的用户界面需要一些调整。

你不必过分使用闪烁的红色矩形,但是你需要一个与你的站点整体外观和感觉相协调的输入框。此外,你需要一个能在小屏幕上显示的页面,这样你的移动搜索用户不用眯着眼睛就能快速访问。

对于一般的查询,文本输入空间是否足够长?

大多数搜索者不会输入超长的短语,但是如果他们碰巧想罗嗦,你也不想妨碍他们。

有用吗?

优化你的搜索用户界面并不是简单地勾选视觉元素复选框让它看起来更漂亮,然后快速移交给产品。就以用户为中心的设计原则而言,它也使 UI 元素 100%功能化——也就是说,简单明了,令人愉悦。例如,它可以快速提供相关的搜索结果。

优化人们的搜索结果如何出现

拿出你的 digita l 设计工具: 下面是一些修复搜索页项目外观的秘诀。

在网格和列表视图之间决定

根据 UX 的研究,对于一些网站,使用列表视图是有意义的,而对于其他网站,网格视图是显而易见的选择。

电子商务网站有丰富多彩、清晰的商品图片,通常使用网格视图来展示他们的产品,而那些有更多规格的商品(例如,计算机和计算机部件,学术工作)的网站则使用列表视图。您也可以简单地让用户选择他们想要的视图。

例如,Eyebuydirect 的电子商务网格视图是这样的:

增强可回收性

面对一大堆冗长的搜索结果,你的眼睛会变得呆滞无神吗?不需要 UX 的设计技巧或可用性测试就能发现人们需要轻松的搜索体验;他们只想确定他们想要的信息或与产品相关的选项。

为此,你可以:

  • 使标题和产品描述简洁
  • 在标题或项目名称下,包含内容的简短摘录或预览
  • 在项目和文本块之间添加足够的空白区域
  • 在搜索结果项中高亮显示输入的关键词
  • 对于你的移动用户:看看搜索结果如何出现在不同的 移动设备 上,比如最新的苹果 iPhones 等机型上有限的屏幕空间。直观地区分和标记不同类型的搜索结果内容可以帮助您的移动用户更好地浏览内容。您的图形设计应该与设备 限制 兼容。

将信息放在人们可以看到的地方

研究表明,为了高效地收集信息,人们阅读网页内容时会采用不同的模式。两个例子:

  • 在没有标题、副标题和项目符号的页面上,用户以 F 型模式浏览,重点放在页面的顶部和左侧
  • 分层饼状图中,它们关注正文前的标题和副标题

**解决问题的诀窍在于,你可以根据用户的阅读方式调整搜索结果的外观。通过找出访问者通常使用的阅读模式,你可以看到他们的目光被吸引到了页面的哪个位置。这些地方是关键细节的地方,如标题、片段和描述。

使用上下文搜索片段

乍一看,你的网站访问者可能会怀疑他们的搜索结果与他们的需求有多大的相关性。这就是 上下文搜索片段 可以发挥作用的地方:强调表明搜索结果如何匹配其查询的摘录。这很容易通过在搜索结果中的关键词上使用加粗字体来实现。

下面是 CDC 如何使用上下文片段:

在关键术语上使用粗体,加上不同类型文本的颜色编码,给读者提供了即时的上下文,使他们可以轻松地点击进入。

用缩微品引导搜索者

如果与搜索相关的内容含糊不清,添加定向文本、提示或标签来澄清。

搜索提示就是一个例子。以下是 Birchbox 使用 microcopy 的方式,建议可以激发访问者进入的流行搜索查询:

提供搜索过滤选项

像 microcopy 一样, 过滤器 可以用来将人们推向你知道会提供大量结果的搜索查询。过滤器还根据预定义的类别缩小用户搜索范围。

以下是 Rugs.com 如何过滤它众多的地板覆盖物

用刻面方便高级搜索

分面搜索 是另一种形式的过滤。面不同于过滤器,因为它们是动态的;它们可以根据查询的上下文而改变。

Yelp 是一个很好的例子,它在设计组合中有效地使用了分面搜索。无论你是在找餐馆、水管工还是机械师,都可以通过屏幕顶部的下拉菜单轻松缩小搜索范围;然后,您可以根据提供商与您的距离、营业时间和其他变量深入搜索结果页面。

提供建议搜索和自动完成

每一个网站搜索用户界面都可以通过提供相关的建议来帮助用户,让用户看到他们的搜索结果随着他们的输入而“进化”。并且 自动完成 (也称为自动建议)除了似乎试图读取您的想法之外,还通过注意感知的拼写错误来保持事情的进展。

以下是 Coursera 如何在你输入时生成搜索建议:

总是提供(某种类型的)结果

“哦不!我们找不到任何结果。”

谈到 UX/用户界面网页设计,你一定不希望你的网站访问者看到这样令人沮丧的消息;这类似于“你运气不好;走开,去另一个网站试试。”这一不幸的结论可能只是因为他们在查询中拼错了一个单词,或者他们使用了搜索引擎无法识别的同义词(例如,“慢跑者”而不是“汗水”)。

幸运的是,有几种的方式可以让你用建设性的想法取代一条没有出路的搜索结果信息。在你的用户界面设计过程中,这当然是值得做的,因为它可以让人们留在你的网站上,并最终提高你的转化率。

迪奥电子商务网站通过推荐利润丰厚的畅销书,将“没有结果”的不愉快转变为潜在的胜利

当然,你不必等待你的搜索者来礼貌地推销商品。甚至在访问者寻找搜索栏之前,你就可以像 Medium 所做的那样,向他们推荐有趣的热门内容

奖励你的搜索者,提升你的 KPI

通过仔细分析你的搜索栏、你的搜索结果的显示方式以及你的目标用户看到的信息,你可以创造出成功的用户界面设计,使你的网站或移动应用搜索收入达到新的里程碑。

想要一个搜索用户体验设计的合作伙伴,一个可以帮助你提供你的客户期望的所有行业标准 UI 设计模式和特性的合作伙伴?查看 安座 搜索 API。我们拥有业经验证的技能,可以让你的用户搜索体验变得不可思议。让我们今天就 开始 微调和优化你搜索 UX 的方方面面。**

基于搜索的应用程序的最佳实践

原文:https://www.algolia.com/blog/product/best-practices-search-based-applications/

基于搜索的应用程序(SBAs)利用强大的搜索引擎向用户提供相关的个性化结果——无论数据存储在哪里。

在许多公司和行业中,与特定任务或用户需求相关的信息可能存储在多个数据库中。许多网站没有一个搜索工具可以同时从这些地方获得搜索结果。这意味着用户必须搜索多个单独的子域名或网站来找到他们所需要的。然而,更有可能的是,用户在找到他们所需要的东西之前,很容易变得沮丧或者完全放弃。

SBAs 可以简化对特定任务的不同结构数据的多个来源的访问,允许用户以最小的努力快速访问信息。

基于搜索的应用的好处

使用 SBAs 的诸多好处包括:

  • 兼容各种数据结构。虽然一些传统的搜索选项可能仅限于搜索结构化数据的元数据,但是 SBA 能够搜索一系列数据类型的内容。

  • 微调相关性的能力。SBA 做的不仅仅是基本的关键字匹配,而是将最好的结果返回给用户。商家可以调整搜索参数,以优先考虑某些产品或内容类型,提高的文本相关性,或更好地满足网站搜索者的需求。

  • 交互界面。SBAs 为最终用户和企业提供了更好的视觉体验。突出显示和跨数据库搜索等功能允许用户在一个简洁的界面中查看所有相关信息。在业务方面,您可以使用仪表板和其他数据可视化来评估和微调搜索功能,帮助您创建内容来填补空白或重新排列排名因素的优先级,以提高搜索结果的相关性。

  • 自然语言处理(NLP)。 NLP 能力 可以支持高级搜索机制,如语音到文本(反之亦然),其中组织利用机器学习和语音识别使搜索更具对话性。

部署基于搜索的应用程序的提示

遵循某些最佳实践将帮助您从基于搜索的应用程序中获得最大收益:

识别业务需求

在实施之前,有必要明确小型企业管理局应该解决的具体业务需求。业务目标可能是:

  • 将在线转化率提高 10%
  • 改善在线商店的客户体验
  • 增加 20%的现场时间
  • 减少客服代表回答常见客户问题的时间

小型企业管理局可以帮助实现所有这些目标(甚至更多)。但是为了从你的基于搜索的应用程序中获得最高的投资回报率,设定具体的目标并衡量你的进展是很重要的。SBA 的强大搜索功能将产生你需要的数据来衡量你的进步,调整你的策略,或者决定整体的成功。在您建立了主要业务目标之后,花时间了解需要通过应用程序访问哪些类型的信息,以及这些信息位于何处。

考虑挑战

盘点你的小型企业管理局应该应对的挑战。一些挑战可能是:

  • 寻找特定信息内容的客户只能找到不相关的产品页面。
  • 搜索特定产品的客户只能找到一般的信息页面。
  • 太多客户在执行搜索后离开网站。
  • 客服代表花 25%的时间回答网站上提出的问题。
  • 需要 实时访问 大型且不断更新的索引中的信息的客户。

一旦你理解了你当前的搜索结构所面临的挑战,你就可以制定一个稳健的计划来应对这些挑战。将每个挑战与小型企业管理局提供的解决方案配对;例如,为了解决在整个网站上找到正确内容的挑战,确保您的 SBA 可以整合不同格式的数据并即时搜索它们。为了解决你的客户服务代表面临的挑战,改进你的 FAQ 页面,并确保它在相关搜索的顶部突出显示。

确定关键绩效指标

一旦 SBA 上线,可跟踪的绩效指标将帮助你迭代、调整和改进。

常见指标可能包括:

  • 搜索效用:使用搜索功能的网站访问者的百分比。
  • 搜索后的时间: 执行搜索后在站点上花费的时间。
  • 搜索转化率: 站点搜索者购买产品的比率。
  • 搜索产生的收入: 你网站每次搜索产生的收入。
  • 搜索放弃率/搜索退出: 客户在执行站点搜索后立即离开站点的比率。
  • 搜索优化率:在尝试失败后返回并更改搜索查询的客户百分比。
  • 转换速度: 客户将商品添加到购物车的速度。
  • 购物车放弃率: 顾客没有购买就离开满满一车的频率。
  • “无结果”查询的数量:生成零相关搜索结果的查询的数量。

您选择关注的 KPI 将取决于您定义的挑战和业务目标。例如,一家 电子商务商店 正在努力将网站搜索者转化为顾客。最高优先级应该是“无结果查询”、搜索退出率和搜索优化率。关注这些 KPI 将有助于提高网站搜索的相关性和整体体验。

另一方面,大学图书馆更关心的是帮助人们找到他们需要的东西,而不是增加收入。最高优先级应该是搜索效用、搜索退出率和搜索后时间。这些 KPI 将表明学生是否在使用搜索,以及搜索在帮助他们找到正确资源方面有多成功。

确定开发人员需求并建立角色

在实施 SBA 之前,你需要了解你的开发资源和内部专业知识。你需要组建一个开发团队来创建、实现和维护你的 SBA 吗?还是将开发工作外包给另一个小组?

从头开始构建 SBA 需要高水平的努力和开发投资——不仅要构建初始工具,还要随着时间的推移对其进行维护和故障排除。高层管理人员通常负责最终决定是自行构建解决方案,还是从专门的提供商那里购买搜索解决方案。在您开始任何一条路线之前,确保您知道谁拥有产品和流程的哪些部分,以确保顺利的开发体验。

投资 UI/UX

搜索工具的用户界面(UI)和用户体验(UX)是其成功的关键。SBA 的设计在后端应该是强大的,但在前端应该是直观和用户友好的。

提前勾勒出你希望搜索如何进行以及你希望它看起来如何,这很关键。例如一个 联邦搜索 接口,就是一个特别有效的后端搜索结构。它从多个索引中提取不同的内容类型,并且您可以控制搜索对最终用户的显示方式。通过突出显示、可视化和标记搜索结果,您可以在不牺牲速度的情况下提供最佳的客户体验。

其他重要的用户界面考虑包括信息在页面上的位置和方式。尝试不同的字体、颜色和视觉呈现的其他方面,以改善用户界面和整体搜索体验。

建设与购买你的搜索引擎

SBA 的好坏取决于它所依赖的搜索工具。你可以选择 自建或者购买第三方 搜索平台——每一个都有自己的好处和挑战。

当你建立自己的搜索工具时,你可以定制你搜索的所有方面。您可以根据您的具体挑战和需求构建 SBA,并动态地更改搜索引擎的元素。但是这需要高水平的技术知识,并且创建、实现和维护所涉及的硬件和软件需要大量的成本。这对于没有构建搜索引擎经验的开发团队来说是一个挑战。此外, 针对速度和相关性进行优化 并不是一项简单的任务。

在第三方搜索引擎或网站搜索解决方案上构建 SBA 时,有一条更短的途径来收回价值。然而,因为不是所有的搜索引擎都是一样的,所以仔细看看它们提供的选项和定制。有些提供了很大程度的灵活性;其他的都是死板的开箱即用的工具。此外,您可能会花相当多的时间研究供应商及其支持包。

开始使用您的 SBA

相关、直观、用户友好的 SBA 提供了出色的客户体验,从而增加了收入。观看 我们的演示 ,了解 Algolia 如何在全球范围内实现品牌的无障碍搜索。

利用人工智能优化用户转化的最佳方式

原文:https://www.algolia.com/blog/customers/best-ways-to-leverage-ai-to-optimize-a-user-conversion/

当购物者不转化时,也就是说,当他们不容易或不迅速地找到他们想要的东西时,零售商就会失去收入。对于跨国公司来说尤其如此,因为理解多种文化和语言背景的意图非常重要。 推动转化率的关键特征之一是相关性。

在一个精心规划的相关性策略之上,人工智能工具通过主动自动化这一过程来添加最后一笔,并立即提出商业见解,这些见解不会通过耗时的手动微调系统设置来浮出水面。人工智能工具可以生成同义词建议,对呈现给购物者的搜索结果进行重新排序,为聊天机器人提供支持,并为客户查询生成准确的答案。这些只是成功品牌利用人工智能工具将每个新的数字购物者和网站访问者转变为长期满意的客户的一些例子。

Algolia AI—个性化

一个这样的工具, 个性化 ,是在电子商务市场赢得客户忠诚度的关键。品牌需要通过捕捉各种客户行为和互动的每一个信号,分析数据,然后实时应用于每个渠道,以适应他们的目标受众。

个性化是电子商务公司工具箱中的一个强大工具。根据使用案例,它可以应用于搜索结果、类别页面或两者,确保客户始终获得与他们独特偏好相匹配的最相关的结果。一旦配置了个性化策略,就会对其进行 A/B 测试,以确保转化率和销售额都如预期的那样增长。除此之外,公司还可以更进一步,通过向购物者发送保存的搜索通知、捕获用户偏好商品的意愿列表,并让用户保存他们的购物偏好,如衣服尺寸、偏好的品牌、款式或颜色,来增强他们的客户体验。

个性化体育搜索结果&商品零售商:Gymshark

Gymshark 通过结合事件和方面值来创建用户资料,确保每位购物者都能看到最符合其独特偏好的产品。Gymshark 用于其个性化策略的事件包括用户点击出现在搜索结果中的产品,点击过滤方面和“添加到购物车”CTA 按钮,以及其他类似的事件。

个性化搜索结果基于匹配查询返回,然后基于用户对活动、颜色、特征和适合度的特定简档偏好提升一些项目。每个用户 ID 的个性化策略背后的逻辑听起来会是这样的:“你主要购买了紫色的女性产品,这些产品是为瑜伽制作的;下次你来的时候,让我们展示更多这样的产品。

要了解更多关于为您的网站配置和应用个性化策略的信息,请阅读我们关于电子商务个性化最佳实践的最新博客:

电子商务个性化的最佳实践

Algolia AI—运动的动态同义词建议&商品零售商:Gymshark

总部位于英国的体育零售商 Gymshark 使用 Algolia 的人工智能生成的同义词来让用户找到相关的结果,即使他们对相同的产品使用不同的单词。在激活动态同义词建议之前,搜索“运动裤”的美国客户不会得到任何查询结果。原因是在英国运动裤的通用术语是“慢跑者”。一旦同义词建议得以实施,Gymshark 购物者的搜索和发现能力就大大提高了。

阅读更多关于 Gymshark 的马赫之旅

[](<a%20href=)

Algolia AI—时尚零售商动态同义词建议:Bombas

在 Bombas 的网站上,由于 Algolia 的人工智能生成的同义词建议,用户即使在输入查询时使用不同的单词(例如,“婴儿”和“婴儿”,“压缩”和“糖尿病”),也可以获得相关的结果。

Algolia AI—动态同义词建议支持:PayPal

对于许多公司来说,客户支持通常不仅是一项非常耗时的任务,也是一项巨大的开支。顾客满意是任何零售商的目标,但是维持一个庞大的支持团队的成本有时过于沉重。此外,在线购物者习惯于独立搜索与支持相关的信息,并且显然更喜欢这样做,而不是拨打帮助中心的电话并等待下一个可用的代表。另一个因素是信息的准确性,这可能因代表的经验和领域知识而异。另一方面,我们不希望我们的客户为了找到相关的支持信息而广泛地浏览网站,在许多情况下,这些信息被隐藏在页面的底部。幸运的是,人工智能优化可以帮助电子商务和其他公司快速轻松地提供相关的支持信息,消除与维护和培训大量客户支持代表相关的成本,同时通过使网站访问者能够独立查找和访问他们需要的任何信息来改善用户体验。

例如,在 PayPal 的开发者支持页面上,由于 Algolia 的人工智能生成的同义词建议,用户即使在输入查询时使用不同的单词(如“密码”或“凭据”),也可以获得相关的结果。

Algolia AI—零售商搜索结果页面重新排名:Bombas

搜索结果的相关性经常随时间快速变化,尤其是对于零售电子商务行业。人工智能重新排名是 Algolia 的一个功能,它利用人工智能来发现用户行为的趋势。根据查询和他们点击或转换的结果的位置,它可以通过提升越来越受欢迎的结果来提高你的相关性。例如,如果一个特定的产品在你的网站上很流行,重新排名算法将确保它出现在搜索结果的顶部,而不是隐藏在底部。人工智能重新排序也可以降低异常结果的等级,这些异常结果有时会因为文本相关性边缘情况而出现。离群值是在特定查询的上下文中与用户实际不相关的结果。一个例子可能是搜索 iPhone 手机,但在搜索结果中看到 iPhone 案例,尽管文本相关,但这些产品不匹配用户的查询意图。

在这个例子中,当用户在 Bombas 的网站上搜索“徒步旅行”袜子时,搜索结果页面上显示的产品被动态地重新排名,以优化结果排名,从而获得更高的转化率。购买最多的“徒步旅行”袜子将被推到顶部,而购买最少的将被埋在底部。

Algolia AI—体育类重新排名&商品零售商:Gymshark

在 Gymshark 的网站上,被频繁点击的产品排名高于其他产品。在幕后,AI 动态优化排名以提高转化率。

成功指标:

  • 具有机器学习的商品销售(AI 重新排名)负责 2M 一年的额外销售

请注意,人工智能重新排序不会干扰之前配置的相关性设置。在引擎计算出结果的文本相关性并应用了您的自定义排名后,动态重新排名开始生效。如果您启用了个性化,重新排名不会生效,Algolia 有足够的数据来个性化搜索。如果没有足够的数据来个性化搜索——例如,对第一次使用的用户来说——那么重新排序就会重新开始。

这是应用关联策略的顺序:

  • 文本相关性(通过文本排名标准)
  • 业务相关性(通过自定义排名)
  • 个性化(如果您已启用,并且引擎有足够的信息为特定用户个性化结果)
  • 助推和掩埋类别(通过规则)
  • 人工智能重新排名
  • 推广和隐藏特定项目(通过规则)

零售商:JB Hi-Fi 人工智能在分类页面上的重新排名

除了在搜索结果页面上的重新排名之外,在类别页面上的 AI 重新排名增加了用户体验的一致性。无论用户在搜索栏中输入查询,还是在他们感兴趣的类别中浏览该公司的网站,显示的结果都是匹配的。对于拥有大量产品类别的大型零售商和电子商务网站来说,人工智能重新排名至关重要。手动调整每个类别的结果是不合理的,尤其是因为电子商务行业是一个竞争激烈的高节奏环境。一眨眼的功夫,你就可能将客户流失到一个在客户之旅上投入更多的竞争对手那里。

在上面的例子中,澳大利亚零售商 JB Hi-Fi 使用 Algolia 的人工智能根据用户搜索的内容对每个类别页面上的产品进行重新排序。如果一个特定的产品或一组产品比所选类别中的其他产品获得更多的浏览量或转化率,这些项目将被移动到列表的顶部。或者,当前在列表上占据较高位置但不满足浏览和转换期望的项目将被移至较低位置。

A/B 测试— Algolia AI 零售商重新排名:Plaisio 和 ePrice

Plaisio 通过 A/B 测试和 AI 重新排名对其营销工作进行了微调。Algolia 的人工智能会根据用户点击的内容自动重新排列结果。通过 A/B 测试,您可以探索不同的策略,并使用实时流量分析它们的有效性。

ePrice 通过 A/B 测试和动态重新排名对其营销工作进行了微调。Algolia 的人工智能会根据用户点击的内容自动重新排列结果。通过 A/B 测试,您可以探索不同的策略,并使用实时流量分析它们的有效性。

结论

人工智能优化是电子商务商店成功销售战略的高级步骤。结合精心设计的相关性和用户个性化计划,人工智能优化通过注入行业特定的业务逻辑和为每个用户量身定制购物体验来促进销售和客户转化。

更好的移动语音搜索工具:Android 和 iOS 语音覆盖

原文:https://www.algolia.com/blog/algolia/better-voice-search-tools-mobile-voiceoverlay-android-ios/

过去一年,向 Algolia 咨询语音搜索问题的公司数量从涓涓细流变成了滔滔洪流。我们的客户和潜在客户有一些常见的搜索相关问题——组织数据、配置相关性——他们想知道如何最好地处理语音输入。为此,今天 Algolia 宣布了用于 iOS 和 Android 应用程序的voice overlay,这是一个用户界面组件,供开发人员接受语音输入以进行搜索和其他目的——无论他们是否使用 Algolia。

语音正成为一种必需品,尤其是在手机上。你可能听说过到 2020 年50%的搜索将通过语音进行,并且已经有 71%的人宁愿使用语音搜索而不是键盘。用户会认为没有语音的移动应用不如有语音的有用。

然而,无论是为了搜索还是其他目的,在没有工具的情况下处理用户语音并不容易。应用程序需要处理权限的所有排列,倾听用户,在屏幕上显示文本,然后做一些事情。开发人员需要投入大量的工作将所有这些拼凑在一起。

VoiceOverlay 为开发人员提供了在移动应用程序中快速轻松地处理语音输入的工具。从我们的即时搜索库中获得灵感,VoiceOverlay 将这项任务的开发时间从几小时减少到几分钟。它处理整个流程,包括:

  • 请求用户权限
  • 收听音频
  • 记录语音输入
  • 从原生 iOS 和 Android 语音到文本检索文本

iOS Voice Overlay - Voice Search Tools for Mobile

所有这些都包含在一个漂亮的可定制的 UX 中,它适合任何应用程序,在不同平台之间具有统一的体验。此外,应用程序不需要使用 Algolia 来使用 VoiceOverlay 。我们希望所有应用程序都支持语音,这是我们为实现这一目标所做的贡献。

AndroidiOS 上查看 VoiceOverlay ,并向我们发送您的反馈。对构建强大、相关的语音搜索感兴趣吗?看看 Algolia 的语音搜索功能

通过内容发现 AI 在媒体平台上增加广告

原文:https://www.algolia.com/blog/ai/beyond-search-how-to-boost-advertising-and-improve-user-engagement-on-streaming-and-publishing-platforms-using-ai/

对于出版商和视频流媒体平台来说,一种常见的推广内容营销策略模式是在结果之间注入原生广告或赞助内容。为了吸引用户,推广的内容监管需要与现有内容融为一体,而不是让用户觉得他们在看广告。更重要的是,我们需要确保顶部转换推广和相关内容推荐总是显示在更高的位置。让它更容易被用户看到将会带来更高的参与度。这就是人工智能的用武之地。

利用人工智能促进内容发现

在这篇博客中,我们将为媒体和视频流媒体公司提供一个创造性的解决方案,利用人工智能和机器学习功能来优化内容发现过程,并最大限度地提高注册用户和访客的促销内容和广告收入。

我们建议使用 Algolia AI 功能来优化内容的显示位置,并进一步吸引用户。

  1. 在我们的 AI studio 中,我们提供了 动态重新排名 功能,该功能利用“对人群的洞察”来提高编辑内容到更高位置的转化率。
  2. 除此之外,您还可以利用我们的 个性化 功能来重新安排常规结果,并提升参与度最高的内容登录用户。

我们希望实现的战略目标是,通过实施 Algolia 的内容发现工具,最大限度地提高用户对每个搜索结果和分类页面上促销内容的参与度。

解决方案实施:整合站点内容内顶级表演广告

媒体公司在广告参与和收入优化方面的成功解决方案集中于在网站的每个搜索结果和分类页面上的常规编辑或视频内容之间战略性地整合高性能内容。

我们以上面的视频流媒体网站为例。

从用户界面/UX 的角度来看,每次用户搜索或浏览媒体网站时,呈现给他们的结果将包括以下元素:

  • 促销横幅。 搜索结果和分类页面顶部的动态页面横幅,展示与查询或分类页面类型最相关的广告
  • 常规内容。 用户相关搜索和浏览结果
  • 推广内容。

对于访客, 人工智能重新排序将始终在每个网站页面上激活。动态重新排名功能利用人工智能来发现用户在网站上的行为趋势,基于他们的搜索查询和被点击并导致转化的结果的位置。重新排名确保了流行和趋势广告将出现在搜索结果列表的顶部,而不是隐藏在底部,而离群结果、与用户不太相关的内容将被降级。

对于注册用户, 常规结果可以根据用户喜好进行个性化设置。否则,如果没有足够的高质量数据来有效地应用个性化,我们可以依靠自定义的排名指标,如流行度分数来显示趋势内容。

分步实施

我们建议在你的网站访问者浏览网站时,在每个搜索结果页面和类别页面激活人工智能重新排名和个性化。这样,网站用户的用户体验在任何时候都是统一和一致的。

步骤 1–执行数据索引。 创建 2 个独立的索引:一个索引用于推广内容,一个索引用于常规内容。

步骤 2–配置关联策略。 将业务指标数据,如内容流行度、客户偏好和行业细节应用到您的全球相关性战略中。将 自定义排名 添加到常规索引将有助于确定内容将以何种顺序呈现给网站的访客自定义排名应适用于常规内容和推广内容索引。

第三步——构建前端。 规划布局定位常规内容和推广内容。决定每种内容之间的最佳间隔。例如,在搜索结果页面布局中,每隔 4 个位置放置一个推广内容。

第四步——实现 Insights API 对常规和推广内容的 点击和转化事件 进行分析和跟踪。

    • 根据您的业务逻辑或行业特性,定义要发送和跟踪的事件。例如,您可能希望将转换事件定义为用户在特定时间段内参与视频/内容片段,或者用户阅读了三分之二的页面。
    • 当用户登录时,确保发送用户令牌。

第 5 步–在常规内容和推广内容索引上启用人工智能重新排序 。重新排序算法将根据从您的网站用户行为和与网站内容项目的互动中收集的分析结果,动态地改变结果的顺序。人工智能重新排名应该在搜索引擎结果页面和网站的类别页面上激活。

https://www.algolia.com/doc/guides/algolia-ai/re-ranking/

步骤 6–为登录用户定义人工智能重新排序和个性化之间的正确平衡

  • 确定一种策略,在切换到个性化订阅源之前,收集大量具有统计意义的事件。例如,在网站的前 5 分钟应用 AI 重新排名,然后切换到个性化。
  • 决定个性化的助推因素,将常规的热门结果与个性化结果融合在一起,优化发现。对于每个用户简档,将基于用户的独特偏好为提升因素分配亲和力分数。例如,如果你的目标观众中的特定用户更喜欢定期观看纪录片,但很少观看浪漫喜剧,则纪录片在该用户的简档中会比浪漫喜剧具有更高的亲和力得分。基于用户的偏好,每个提升因子都有一个相似性分数。

  • 在网站的前端启用个性化。建议在搜索结果和类别页面上激活个性化。

https://www . algolia . com/doc/guides/personalization/personalizing-results/

第 7 步–测试您的人工智能重新排序和个性化策略 ,作为最后一步进行 A/B 测试 并优化您的解决方案实施。

预期成功指标

媒体行业的一些 Algolia 客户使用了这种内容策略,目的是最大限度地提高网站上促销内容的参与度和收入,如广告、特色内容、编辑内容和其他促销项目。我们看到的结果包括:

  • 由于智能广告解决方案的实施,平均 7 天后广告收入增加
  • 提升内容点击量
  • 为注册用户和访客优化广告和其他促销内容相关性,从而提高整体转化率和广告收入

了解有关为媒体公司优化内容发现的更多信息:

如何优化你的流媒体服务的媒体发现,帮助观众找到有吸引力的标题

除了搜索框,数字购物如何通过 API 优先的方法变得更加智能

原文:https://www.algolia.com/blog/algolia/beyond-the-search-box-how-digital-shopping-got-smarter-with-an-api-first-approach/

正如互联网出现之前,街上的男人或女人“只有”商店和商场可去,推荐前引擎电子商务购物者“只有”搜索框……今天,我们有能力利用 API 驱动的机器智能进行更智能的搜索,以装满我们的购物车并温暖我们的心。

我们过去常去商店,但那些日子已经过去了。好吧,在现实中,我们中的许多人仍然会一直去商店、专卖店、超市和真实世界的户外市场。关键是,在线购物的兴起可以追溯到千禧年之前的时代,与疫情相关的全球事件并没有阻止点击量相对于零售量的增长。

后新冠肺炎时代的现实是,网上购物无处不在,即不仅在笔记本电脑、平板电脑、智能手机和其他基本上基于桌面的机器上,而且在大量其他不同的数字接触点上。从智能电视到汽车,再到机场售货亭,每一种设备都可以为我们提供数字购物体验,如果它愿意的话……而且可能很快就会实现。

未来数字购物中心的巨大规模向我们展示了几乎无限多种多样的购物渠道。这种巨大的选择范围实际上增加了选择的难度,至少对人类来说是这样。我们现在可以指望机器智能来帮助我们理解我们最有可能在何时、何地以及为什么购买什么。

推荐所需

我们(消费者)现在需要的是更好的推荐。

然而至关重要的是,我们需要将这些推荐传递到各种新兴的数字接触点,因此使用人工智能(AI)优化的应用程序编程接口(API)方法来允许推荐出现在我们作为消费者的任何地方是有意义的。

也许更重要的是,我们需要基于我们的行为和偏好的建议,这些建议在几毫秒内浮出水面……我们需要这些建议能够利用整个范围的产品或服务数据,这些数据包括从描述、可用性、价格等等到兼容性和可用性的方方面面。

IDC 数字商务研究经理乔丹·朱厄尔表示:“由于新冠肺炎,2020 年零售额创纪录增长,几乎每个组织都需要制定数字商务战略。在这个竞争异常激烈的市场中,商家必须为客户提供独特、个性化、无摩擦的商务体验,才能取得成功。”

朱厄尔同意 API 优先的技术体系是这些差异化体验的基础。

大车展开&平均订单值

早期的电子商务先驱会对任何实际完成产品或服务选择、填写所有必需的表格字段并随后成功执行支付的客户感到满意,而现代电子商务则要求更高、更严格。今天的电子商务供应商需要能够通过购物车扩展和在线商店中的客户满意度来最大化平均订单价值。

通过使用 Algolia Recommend,可以显著提高购物车和订单的重量。Algolia Recommend 是一项技术进步,通过在 时刻提出高度相关的建议,零售商可以更好地了解客户,从而赢得更多的信任和忠诚度。

在最近的一项调查中,42%的受访者表示,在网上购物时看到个性化内容(如推荐、优惠或其他客户的以往体验)是“非常重要”或“有点重要”的。在研究美国产品推荐的影响时,38%的受访者表示,如果他们收到此类推荐,他们会“更频繁地”或“更频繁地”在网上零售商处购买。

在一个使用案例的例子中,欧洲电信提供商 Orange Româ nia 使用 Algolia 推荐技术来留住和转化登陆脱销产品的购物者,这一行动通常可能会导致购物者放弃一个页面、整个网站甚至品牌。

一种 API 优先的方法

当然,谈论使用一个推荐引擎比从头开始开发一个、压力测试它、调试它、集成它并保持它的维护、管理和高性能要容易得多。这就是为什么 Algolia 推荐是通过一个 API 优先的方法,易于集成和易于使用。

任何组织中的现有系统和软件堆栈都可以提升到这里提供的优势,并且功能远远超过现成的打包解决方案,这使得几乎不可能开发差异化的客户体验或获得竞争优势。T34

Algolia Recommend 最初包括两个更受欢迎的机器学习模型,可以自动提供量身定制的推荐。“相关产品”推荐模型使零售商能够通过分析购物者互动的项目(例如,点击、加入购物车和/或购买)并在同一会话中推荐类似产品来增加转化率和订单。

“经常一起购买”推荐模式通过在产品页面或购物车页面上追加销售补充商品来增加平均订单价值,这是基于其他购物者在单次购物会话中与同一商品的互动方式。

超越搜索框

正如 Algolia 联合创始人兼首席技术官朱利安·莱莫因所说,这一切都是为了帮助客户“超越搜索框”,开始体验优化的在线购物体验,真正推动收入增长。

“Algolia 最近 公布了 其新的公司方向和愿景,并通过其数字商务战略帮助客户超越搜索框,”莱莫因说。“Algolia Recommend 的发布为零售商优化在线体验和增加收入提供了下一个构建模块。这些零售商已经通过 Algolia 的 API 平台上高达 1.7 万亿次的搜索,获得了 10 亿多美元的额外年收入。”

正如互联网出现之前,街上的男人或女人可能“只”有商店和商场可去,预推荐引擎电子商务购物者“只”有搜索框可依赖……今天,我们有能力通过 API 驱动的机器智能进行更智能的搜索,旨在装满我们的购物车并温暖我们的心。

第 1 部分:使用 Algolia 从 PostgreSQL 进行商业智能数据索引——用例及建议的解决方案—

原文:https://www.algolia.com/blog/engineering/bi-data-indexing-from-postgresql-to-algolia-1/

我们邀请 Starschema 的朋友写一个结合使用 Algolia 和 PostgreSQL 的例子。请欣赏软件开发人员 Mátyás Budavári 的这一两部分系列!

如果您想直接跳到第二部分,在第二部分中介绍了实现,点击这里


大家好,我是 Mátyás,Starschema 的软件开发人员。这篇文章是关于我们的一个产品的审计,以及我们如何利用 Algolia 的速度和分布式特性,让我们的版主在不访问底层 PostgreSQL 数据库的情况下搜索审计数据。

用例

我们的工具让企业合作伙伴的用户可以从不同的商业智能(BI)软件和其他资源中集中访问他们的所有报告。我们使用的最流行的 BI 工具是 TableauPowerBI 。BI 工具通过强大的交互式可视化来帮助交流、呈现和分析数据,甚至可以处理实时数据。管理多个数据源和控制面板通常是一种令人沮丧且耗时的体验,充斥着各种噪音,损害了获得洞察力的能力,并导致错误的决策。

我们开发了一项服务,通过让个人或团队能够管理定制的共享工作区并与之协作,来改进数据分析和演示流程。用户可以专注于分析数据和交流见解,而不必在应用程序之间来回切换和多次验证。这些报告的内容仍然由原始工具提供,我们在它们之上提供统一的体验。此外,我们的用户可以修改这些报告的可见名称,并添加额外的标签和其他元数据,使他们的团队更容易组织这些报告。

Indexing Business Intelligence Data

我们定期收集使用数据,这使我们能够根据用户的实际使用情况对应用程序进行微调。除了收集这些指标,我们还必须遵守安全要求。我们需要能够告诉谁可以在给定的时间访问特定的报告,以及在特定的时间范围内由谁在应用程序中进行了哪些更改。我们收集所谓的审计日志,以便能够提取这些信息。必须小心处理这些数据,只有拥有更高权限的人才能访问原始数据。

在最近的一个项目中,我们需要开发一个可选的扩展,将匿名化的审计日志信息提取到 PostgreSQL 数据库之外的一个外部位置,以便让内容经理团队快速访问这些数据。这些审计日志可能包含 JSON 元数据,很难用 PostgreSQL 设置高级搜索特性。最好将数据编入索引,这样可以加快查询速度。

我们需要什么

我们需要关于使用分布的数据,以呈现给 BI 报告的创建者。Tableau 和 PowerBI 都在它们的报告中提供了使用指标,但是我们希望以统一的方式显示使用信息。我们可以向他们展示如何通过我们的应用程序访问他们的内容的详细信息。

由于报告所有者经常想知道他们洞察力的高峰期,我们需要审计信息来查看谁通过我们的应用程序访问了哪些报告。

请注意,外部 BI 源以其特定的方式管理权限。因此,创建者需要在他们用来发布报告的工具中设置受众访问权限,我们同步这些信息,并且只有那些 BI 报告才会向给定用户显示他们可以访问的内容。

我们怎样才能实现它

我们主要在内部和受保护的网络中使用我们的应用程序。大多数时候,由于严格的政策,不可能连接专用的分析服务,所以我们将分析数据保存到我们的数据库中。然而,大多数时候,我们的分析团队无法访问数据库。我们不发送实际的用户数据和报告元数据。有时,我们可以发送匿名数据,并告诉他们在不同的介质中代表什么特定的标识符,如果它是相关的,并且我们被允许共享。

总之,我们需要一种方法来快速查询使用日志,而无需访问原始数据库。

我们决定使用 Algolia 作为搜索索引。我们不希望每次安装都托管、管理和维护我们的搜索索引服务,最好有一个管理集中的地方,我们可以在那里发送我们的数据。我们的焦点小组可以使用它根据发送到那里的数据编写他们需要的报告。

出于安全和对客户的尊重,这是一个选择加入的功能。

架构

我们应用程序的后端服务是用 Golang 编写的。我们将 BI 工具的连接信息和报告元数据以及使用信息存储在 PostgreSQL 数据库中。

我们的目标是找到尽可能接近数据库的解决方案。我们希望利用 PostgreSQL 提供的语言特性,而不需要任何扩展。虽然我们对运行与 Algolia 通信的小型微服务持开放态度,但我们不想过多修改我们的代码来支持这种数据收集。

要将我们的数据发送到 Algolia,我们需要在 PostgreSQL 之外编写某种代码。

我们希望将数据加载组件创建为一个单独的服务,其唯一目的是向索引发送数据。由于我们的用户和报告的隐私,我们不能暴露我们的数据库给上述外部审计师。我们只能给他们发送一组精选的信息。

拟定方案

Indexing Business Intelligence data

随着时间的推移,审计日志表会随着使用量的增加而变大。我们不想每次需要发送数据时都要查询整个日志表。拥有一个小的队列,处理数据负载会更好。每个日志行都是必要的,但是我们不能依赖这些小服务在任何时间点都可用。我们必须保存需要处理的行。

我们计划在 PostgreSQL 中创建一个新表,用于存储将要发送到 Algolia 的过滤数据。该表将充当后进先出队列,将新数据优先于旧数据。

在创建这个新的队列表时,我们可以将已经收集的数据发送到 Algolia。

我们的目标是将触发器指向源表,在每个 insert 语句中,PostgreSQL 过程将必要的字段复制到这个新表中。

我们计划编写一个新的服务,它定期读取新表,获取最后几项,并将它们发送给 Algolia。如果多个这样的迷你服务可以同时运行而不互相中断,并且独立地在队列上工作,那就更好了。

【T2

在本系列文章的下一部分中,我们将通过设置所需的触发器,播种一些随机测试数据,并最终设置生产者和消费者代码来处理从 PostgreSQL 到我们的 Algolia 索引的同步数据,从而将计划付诸实施。

第 2 部分:使用 Algolia 从 PostgreSQL 进行商业智能数据索引-实现和结论

原文:https://www.algolia.com/blog/engineering/bi-data-indexing-from-postgresql-to-algolia-2/

我们邀请 Starschema 的朋友写一个结合使用 Algolia 和 PostgreSQL 的例子。请欣赏软件开发人员 Mátyás Budavári 的这一两部分系列!

如果您想跳回到第一部分,其中涵盖了用例以及提议的解决方案,点击这里


在本帖中,我们将介绍搜索索引解决方案的一个简化实现。

为了让我们的用户从外部位置访问我们的审计数据,我们需要将它发送到他们可以访问的地方。因此,我们将详细介绍如何实现这一点。

为了模拟匿名化的数据,我们将使用随机生成的数字 ID-s,我们将重点关注结构,并从示例中省略 JSON 数据类型。

你可以在 GitHub 上查看的源代码。你可以用免费的 Algolia 账户试试。关于安装步骤,请查看 GitHub 库根目录下的自述文件

Indexing Business Intelligence Data

实施细节

让我们详细研究一下我们的解决方案。我们的演示遵循一个简单的模式。

我们使用单个生产者定期创建新的审计日志行,并使用多个数据消费者读取这些新行。

为了简单起见,我们为服务创建了一个最小的示例。

  • 生产者将随机活动放入数据库
  • 消费者读取队列并将数据上传到 Algolia

为了更容易阅读和抓住要点,我只使用了重要的外部库,并尽可能保持代码简单。

这个例子并没有反映我们实际的代码库,但是给了你一个如何以最小的开销实现它的想法。

T12T14入门

让我们来看看您需要做些什么,如存储库 README 中所示。

所有组件和依赖关系都在docker-compose.yml文件中描述。

  • 要按预期运行这个例子,您必须安装Docker
  • 您需要基于.env.example文件创建一个.env文件
  • 您需要在阿尔戈利亚注册,并在.env文件中设置您的凭证。
  • 注意 docker-compose 文件使用了环境变量。只有从与.env文件所在的文件夹相同的文件夹中启动,它才能正常工作

该示例可以从以下内容开始:

docker-compose up --build 

启动后,应该会发生以下情况。

  1. PostgreSQL 容器启动
  2. PostgreSQL 容器用模拟数据初始化数据库
  3. PostgreSQL 容器进入健康阶段后,一个生产者和两个消费者启动
  4. 应用程序等待并按照DELAY_PRODUCERDELAY_CONSUMER环境变量中的设置定期执行任务。

组件详细信息

让我们看一下每个组件以及它们如何相互作用。

PostgreSQL 数据库

我们运行 PostgreSQL 的官方 docker 映像

首次启动时:

  1. 创建一个数据库文件夹(或可选的卷),以便在两次运行之间保存数据库
  2. 运行docker-entry point-initdb . d中的 SQL-s 来初始化数据库。

初始化脚本

PostgreSQL docker 映像可以在第一次创建卷时将初始数据加载到数据库中。您可以在 PostgreSQL 映像的 DockerHub 页面的“*初始化脚本”*部分下的文档中找到更多关于它如何工作的一般信息。

init 脚本按字母顺序运行。第一组 sql 文件(001_init_audit_log_table.sql002_queue_table.sql)创建应用程序使用的表。

  1. 创建app模式。
  2. 创建app.audit_log事实表
  3. 创建app.queue_audit_log队列表

表准备好之后,003_queue_trigger.sql创建一个触发器来捕捉插入到app.audit_log表中的新数据,并将其复制到app.queue_audit_log队列中。

create or replace function audit_insert_trigger_fnc()
  returns trigger as $$
    begin
        insert into
            app.queue_audit_log (
             action
            ,user_id
            ,content_item_id
            ,create_date
            )
        values(
             new."action"
            ,new."user_id"
            ,new."content_item_id"
            ,new."create_date"
        );

        return new;
    end;
$$ language 'plpgsql';

create trigger audit_insert_trigger
  after insert on app.audit_log
  for each row
  execute procedure audit_insert_trigger_fnc(); 

当结构准备好并且触发器就位时,最后一个脚本(004_generate_mock_data.sql)将随机数据生成到事实表中。它的可配置部分被提取到变量中,因此我们可以看到它在不同数据量下的表现。随机数发生器有一个硬编码的 init 种子,所以它应该在多次重建中生成相同的数据。

-- set random seed for repeatable random data generation
SELECT setseed(0.8);
DO $$
    DECLARE
        -- configurable parameters for data generation
        nr_lines integer := 20;
        user_min integer := 10;
        user_max integer := 20;
        citm_min integer := 1500;
        citm_max integer := 2300;
        actn_min integer := 1;
        actn_max integer := 3;
    BEGIN
        with
            -- generate user_ids
            users as (
                select generate_series(user_min, user_max) as user_id
            )
            -- generate content_ids
           ,content as (
               select generate_series(citm_min, citm_max) as content_id
            )
            -- generate action_ids
           ,actions as (
               select generate_series(actn_min, actn_max) as action_id
            )
            -- get the cartesian product of the above in a random sort
           ,limited_data as (
               select
                 random() randomizer
                 ,*
               from users, content, actions
               order by randomizer
               limit nr_lines
            )
        insert
            into app.audit_log (
                action
                ,user_id
                ,content_item_id
            )
            select
                 action_id
                ,user_id
                ,content_id
            from limited_data
        ;
END $$
;

-- view data
-- select * from audit_log order by content_item_id, user_id, action; 

这个模拟数据生成脚本通过用setseed在代码开始处设置初始随机种子来使用受控的随机数据生成。我们为生成的每一行生成一个random()数,我们可以用它来避免添加相似的行。我们用每个值的可配置范围之间的generate_series来生成标识符。为了只选择给定数量的项目,我们用limit添加了结果集的上限。

为了更好地分离代码,不同的逻辑组件在它们自己的公共表表达式 aka 中定义。CTE 由with查询创建。在limited_data CTE 中,我们组合了不同数据类型的所有生成行,并在限制结果之前对它们进行洗牌。

PostgreSQL docker 官方映像的编写方式是,只有在数据库第一次启动时,数据库初始化脚本才会启动。如果您停止服务,然后重新启动它们,初始化将不会再次发生,但数据将会保留。

制片人

文件夹./producer中的代码代表我们的应用程序。在我们的场景中,我们不想修改这段代码,而是通过 PostgreSQL 利用 Algolia 的强大功能。

  • 启动时连接到数据库。
  • 定期在事实表中生成一个新的随机日志行。
  • 在这个应用程序的范围之外,插入触发器将把这个数据复制到队列中。

这是一个简单的应用程序。main功能是大部分动作发生的地方。db文件夹在db.go中包含一个 PostgreSQL 连接器,在sql.go中包含一个 insert 语句。

消费

./consumer文件夹下的消费者服务从数据库中读取最后插入的行,并将它们放入我们的 Algolia 索引中。

启动时连接到数据库,然后定期读取队列中的新数据,并在事务中执行以下操作:

  1. 读取最后的N行,然后将其标记为已访问
  2. 将选定的行上传到 Algolia
  3. 从队列中清除已访问的行

我们假设如果必要的话,多个消费者将可用于调整重负载。我们不能依赖这些消费者一直在运行的事实。由于这个限制,我们不能利用 PostgreSQL 的通知 / 监听模式。我们使用一个队列表来代替。

这个概念的核心在于下面的 SQL 查询:

with get_lines as (
  select
      id
    , action
    , user_id
    , content_item_id
    , create_date
    , _visited
  from app.queue_audit_log
  where _visited = false
  order by create_date desc
  limit $1
  for update skip locked -- add concurrent consumers
)
update
  app.queue_audit_log new
set _visited = true
from get_lines old
where old.id = new.id
returning
    new.id
  , new.action
  , new.user_id
  , new.content_item_id
  , new.create_date
; 

让我们把这个查询的操作分成几个独立的步骤。所有这些步骤都在由 go 代码启动的事务中的一条指令中同时发生。

为了让多个消费者访问我们的队列表,我们需要添加for update skip lockedfor update子句让引擎知道 select 子查询将用于更新它们。skip locked部分将忽略其他消费者可能已经锁定的线路。

锁定 SKIP 后,将跳过任何无法立即锁定的选定行。跳过锁定的行会提供不一致的数据视图,因此这不适合一般用途的工作,但可以用来避免多个使用者访问类似队列的表时发生锁争用。

  • order by create_date desc确保我们从队列中获得最新的可用行。
  • limit $1行确保我们只从队列中选择行的子集。
  • returning声明让我们获得每一行的数据。
  • 在更新语句中,我们通过where _visited = false仅从当前未访问的行中设置set _visited = true。这是一种安全措施。理论上,我们永远不会有_visited = true以外的交易。这可以通过删除交易中的这些行来进一步简化。

用法

有了 Algolia 中的数据,我们的分析团队可以编写自定义查询来搜索他们感兴趣的数据。

{
  "filters": "createDateTimestamp > 1655127131 AND userId=12 AND action=2"
} 

它搜索在1655127131(2022 年 6 月 13 日,星期一,下午 1:32:11)之后添加的带有ID:2 by user:12的所有动作。epochconverter 是一个在时间戳和日期之间转换的便捷工具。

未来,我们计划根据分析团队的需求,使用自定义选择器来扩展我们的 web 界面。Algolia 有一个简单的方法来连接搜索查询和现成的前端组件。

结论

这个简化的例子抓住了我们解决方案的精髓。我们能够实现接近 PostgreSQL 的目标,将数据消费者实现为独立的服务,并且不让任何日志行从我们的队列中溜走。

通过我们的实施,Algolia 帮助我们实现了我们的业务目标,让我们能够将我们的分析分发到数据库之外的外部位置,并显著改善了我们的洞察处理。


我们希望您喜欢这篇来自 Mátyás 的深度文章,如果您正在寻找更多类似的内容,我们在 Algolia 博客上有更多的主题!如果你是 Algolia 的新手,你可以通过注册一个免费等级账户来尝试一下。

黑色星期五:如何微调你的网站搜索以获取最大利润

原文:https://www.algolia.com/blog/ecommerce/black-friday-site-search/

网络星期一的黑色星期五,以及包括 11 月和 12 月在内的整个假期,是电子商务的关键销售日。有多关键?据 土坯 统计,2021 年假日季(11 月 1 日-12 月 31 日),消费者消费 2045 亿美元,同比增长 8.6%。

2022 年的黑色星期五也是一个绝佳的机会。但对于企业来说,达到你想要的目标可能仍然具有挑战性。鉴于这个季节的短暂,以及两天的网上购物活动会对销售数字产生如此严重的影响,出现问题可能会导致巨大的收入损失。

黑色星期五的混乱可能而且确实发生在各种规模的品牌身上。即使是看似孤立的大型零售商,在面临巨大流量时也会遭遇在线中断。据 数字商业 360 报道,2021 年,包括欧迪办公、沃尔玛在内的公司陷入困境。2020 年,是 Petsmart、惠普、Wayfair,还有很多其他公司。

就像其他任何一天一样,在今年的黑色星期五,你的网站可能会因为技术问题而面临风险,因为成千上万的购物者希望享受类似谷歌或亚马逊的体验。但是,与以往任何一天相比,未能满足用户期望的代价都可能是巨大的。

作为一个在线零售商,你如何在避开陷阱的同时充分利用黑色星期五和这个季节的剩余时间呢?以下是我们 2022 年关于在线搜索和发现功能的建议。

准备好你的电子商务系统

根据我们的 在线商务趋势 调查,在在线零售商中,65%的零售商在网站访问量激增时无法满足需求。

你准备好迎接成群激动的顾客光临你的网站了吗?你有没有把所有需要做的事情列一个清单,检查两遍?

现在就做好准备的一个原因是:你的竞争对手也在增加他们的假期消费,努力获取和留住顾客。所以,如果你没有为黑色星期五的混乱做好准备,他们会站在一旁试图接走你不满的顾客。

一个问题:网上购物的人(或者任何地方,看起来)都超级不耐烦。例如,以页面加载为例。一份 根据 零售商网站表现报告(2021) ,87%的网购者不会等待缓慢的网站加载。相反,在几秒钟的沮丧之后,他们会为了竞争对手的更友好的用户体验而放弃这个网站。这意味着网站网页的每一次延迟都可能会减少你的利润。

黑色星期五另一个能引起摩擦的元凶是支付系统问题。您知道搜索问题也会导致停机吗?

2020 年黑色星期五,Algolia 测量到与 2019 年事件相比,搜索流量增加了 66%。我们处理了超过 45 亿次搜索查询,峰值达到每分钟 720 万次请求,比 2019 年的最高峰值增长了 85%。

黑色星期五继续不负其疯狂销售日的美誉。因此,无论您是在处理自己的搜索基础设施,还是相信搜索提供商能做好,努力让您的系统为潜在的巨大负载增加做好准备都是值得的。

为你的(众多)移动购物者做好准备

根据 Adobe 的数据,2021 年假日季,手机用户占网上销售额的 43%,令人印象深刻。所以从登陆页面到支付,你的移动网站搜索体验不应该是事后的想法(或者彻头彻尾的灾难)。无论是在你的应用程序中还是在你的移动网站上,建立令人满意的、易于导航的移动体验意味着投入时间来测试每个小细节,比如你的移动电子商务搜索建议是如何显示的。在手机上,你不能像在台式电脑屏幕上那样简单地显示所有相关内容;你必须为小屏幕缩放它。

您如何为黑色星期五的移动购物者调整用户体验?

从了解他们通常如何浏览你的目录开始。然后利用这些信息,在小屏幕上创造出完美的简单体验。

例如,甚至在购物者开始点击他们的搜索请求之前,就有各种方式在手机屏幕上推荐热门搜索、类别和促销产品。对于人们可能喜欢先看后看的商品,比如鞋子或衣服,你可以用照片的形式展示搜索结果:

mobile search UX

让你的库存保持最新

节日期间的交易量和交易频率意味着您的产品数据库每天会有数百万次更新。您的系统需要通过一个大规模的、敏捷的系统来走在这些变化的前面。

想要通过指出库存有限来营造一种产品稀缺感?这当然很好,但你不会想展示那些不能在买家送礼时及时发货的产品。展示脱销商品还会浪费宝贵的屏幕空间,显示不太可能产生销售的商品。

无论您在哪里展示产品,无论是作为推荐,还是作为主页或搜索结果页面上的特色商品,都要记住这一点。

预见你的购物者的欲望

你提供的产品是你最大的资产之一,所以要确保它们满足客户的需求。一种方法是搜索数据分析。

以下是一些流行搜索形式的搜索引擎查询数据示例:

site search analytics

你可以使用搜索分析来发现你的购物者在假期前搜索最多的商品,最重要的是,他们正在搜索但 没有找到的商品。

然后,您可以利用您发现的见解最终确定您的产品目录和折扣,设置热门搜索结果的显示方式,并有可能改进您的广告和 SEO 策略。

提前开始

就在你为即将到来的几个月的假日购物季做准备时,你的购物者可能会通过比较价格、运输时间和其他因素来更早地搜索最划算的交易。人们无疑会在假期前访问你的网站。当他们回来时,确保他们开心,这样他们会在 11 月和 12 月回来。

利用自己的内容

你和你的购物者都会产生关于你销售的产品的有价值的内容,包括顾客评论、博客帖子、使用指南、常见问题解答和社交媒体推广帖子。这些内容会极大地影响你的购物者的购买决定,并使你成为一个权威的、声誉良好的在线卖家。将你的内容显示在你的产品页面旁边,也显示在你的搜索结果中,这样人们就可以很容易地注意到它。

site search product reviews

帮助购物者研究物品

确切知道自己想要什么产品的购物者可能会进行特定的搜索,以了解你是否出售这些产品或类似商品。你可以让人们保存他们的搜索结果,然后在商品有货时收到提醒,从而引导这些商品搜索者在你的网站上寻找报价。那么他们就会有回来的动机(或者你会有一个合理的理由向他们询问即将上市的商品)。

大(Fri)日

积极主动地推销商品

与实体店不同,你可以一键甚至自动重组你的店面。利用这种能力吧!

购物者寻找最好的交易,因此在搜索结果的排名中使用折扣率。通过将有限供应的产品排在第一位来制造一种稀缺的气氛。你有一个热门的报价,但仍想保持你的利润?首先为相关查询对该项目进行排名,然后在排名逻辑中添加您的折扣后利润。您可以调整的参数是无限的。重要的是根据对你的顾客(和你)重要的东西来配置搜索的排名逻辑。

预见到意想不到的

当今年的黑色星期五结束时,你可能已经错过了一些潮流,并发现了一些你希望能更好地推广的热销商品。或者你的视力受损了。不管你有什么困难,为未来的成功做出重要的调整还不算太晚。

想一想英国零售商Gymshark的灵感,其网站在几年前的一个黑色星期五因流量激增而崩溃。后来,该公司改进了其电子商务基础设施,现在它是一家领先的运动服装零售商,取得了破纪录的假日销售业绩。

大写

分析你站点的性能

通过网站搜索,你的购物者会告诉你他们想要什么,需要什么。利用宝贵的黑色星期五洞察力。人们在寻找什么是你没有提供的?他们的哪个搜索结果转换得最多?人们是如何浏览你的网店的?他们在寻找电视时,是否按特定品牌过滤了搜索结果?所有这类数据都可以帮助你改进你的产品和向顾客展示的方式。

把首次购物者变成回头客

在节日期间,就像一年中的其他时间一样,你可以通过提供无与伦比的优惠和加大广告来获得新的购物者。如果你的顾客喜欢整体体验,他们很有可能会回来。根据许多 行业研究 显示,在用户体验上每投入 1 美元,就会产生 2 到 100 美元的回报。因此,当事情平静下来时,反思一下哪些进展顺利,哪些失败了,并开始规划对用户体验的长期投资。

对于 2022 年的黑色星期五,要特别注意如何改进你的网站搜索功能。搜索体验已经远远超出了搜索框,包括了浏览和导航等高级搜索功能。关键的电子商务战略,如改善全渠道和增加个性化,正变得依赖于高级用户界面功能,如语音搜索和聊天机器人(了解 更多 )。 整体主题:寻找作品皈依者。

黑色星期五没有放之四海而皆准的解决方案,但是当重要的日子到来时,实施一些好的建议可以让你的网站走得更远。

想要一些个性化建议?请求免费 搜索审核 。我们将查看您的网站,并为您提供如何在这个黑色星期五改进在线商店的建议。

Algolia 博客

原文:https://www.algolia.com/blog/

产品

什么是组织知识,你怎样才能让合适的人获得这些知识?

你公司的组织知识怎么样?换句话说,如果员工要离开,他们会离开吗...

搜索和发现作者

Blogcast:使用 Alex Patterson coding catdev 搜索教育/媒体

原文:https://www.algolia.com/blog/engineering/blogcast-building-search-for-education-and-media-with-alex-patterson-from-codingcatdev/

Alex Patterson 是 CodingCatDev 的创始人兼首席执行官,这是一个在线学习平台,面向希望了解不同技术的新手和有经验的开发者。Alex 还制作播客和视频,采访和指导全球 50 多名工程师。他也是云架构师,构建无头架构。

我们在 Jamstack Conf 2021 上遇到了 Alex。他加入了我们的展位,并介绍自己是 Algolia 的长期用户。我们很想了解更多,所以第二天我联系了他,他同意和我坐在一起讨论他的项目和 Algolia 解决方案。我们开始我们的博客,讨论为什么他选择了三个独特的领域的职业生涯——教育、播客和工程。然后我们进入他的技术选择,他给了我们一个他的 Algolia 实现的代码眼视图。我们结束了对他的解决方案的采访,并提出了他可以改善整体搜索体验的几种方法。

告诉我们关于你自己和你的网上生意

我的主要背景是 web 开发,对前端开发有浓厚的兴趣。我还花了 10 多年时间作为 SAP ABAP 开发人员,专门研究 API 的 RFC。最近几年,很难远离云超伸缩性,所以我转向了解决方案架构师背景,专攻微服务。

我设计无头架构并构建企业应用程序。在我的网站上,我使用了许多用于数据存储、CMS、电子邮件、认证、搜索的无头服务——几乎所有的服务。我也建立自己的服务。Headless 允许我在不改变基于服务的中间层和后层的情况下改变底层技术(比如从 Gatsby 到 NextJS)。

你是怎么进入教育的?

我开始为一个非盈利组织编写代码,多年来我发现我想教授和回报社区。我也领导当地的开发小组。寻找合适的教育空间一直是一个挑战。这就是为什么我建立了我的网站,一个免费和基于订阅的在线学习平台。在某种程度上,我在弥补我在自己的科技教育中所缺失的东西。

我的教学工具是教程、完整课程和播客。播客是一个伟大的教育和培养工具。我和我的同事与专家交谈,深入研究各种各样的技术。我们还利用播客作为指导的机会。例如,我们采访了一位现在是 Google Dev 倡导者的油炸厨师,以及一位已经成为非常熟练的技术教育家的高中教师。

搜索在在线学习中起到什么作用?

对我来说,搜索可能是最重要的部分。人们来到我们的平台,希望学习一些具体的东西,所以他们去我们的搜索栏找到他们的技术。就这么简单:搜索对于我们的学生如何参与我们的内容至关重要。

我们提供各种各样的内容,需要一个好的搜索栏。搜索让我们的访问者接触到这种多样性,并帮助他们建立自己的学习计划。我们有:

  • 4 门完整课程,21 门教程
  • 50 个播客/视频广播
  • 38 博客

搜索向他们显示哪些 材料组合 他们可以用来继续他们的学业。这也有助于他们发现我们在每个播客末尾添加的 完美精选、

我开始 CodingCat。Dev 与 Angular,Hugo,然后是 Gatsby,现在是 Next.js。我真的发现职业需要转向 React 背景,而当时 Gatsby 没有一个很好的混合渲染要求(SSR,SSG,CSR…)的解决方案。我还听了谷歌空间内关于网络性能的一些精彩谈话,以及 chrome 团队如何直接与 Vercel 合作开发 Next.js,后者最近被正式命名为 Aurora。

我们使用 Algolia 已经 5 年了。在每一次技术变革中,Algolia 一直是我唯一的搜索引擎。我已经测试了竞争对手,但他们无法击败搜索的速度和启动运行的简单性。构建搜索引擎不需要编码,它是 100%即插即用的。

至于我们的无头服务,这里有一个完整的列表:

  • 燃烧基地
  • Sanity.io
  • 阿尔戈利亚
  • 云媒体
  • Youtube /主播
  • social bee . io–广播和社交
  • 插入工具的 jam stack
  • 发送蓝色邮件
  • 不和谐

给我们介绍一下你们的 Algolia 搜索 实现

我是因为火基才发现阿尔戈利亚的。我在 Firebase Cloud Firestore 上存储所有东西(在每个站点迭代中)。Firestore 没有很好的全文搜索解决方案。当时,Firebase 对此有一个解决方案,并建议使用 Algolia。

Algolia 非常适合我,因为我的网站需要大量的数据。Algolia 有一个惊人的 JavaScript 库用于客户端集成。我不想花费大量的时间来设置搜索,我发现文档和预构建的 React 组件非常适合我要完成的任务。我研究了弹性和类型感,仍然发现 Algolia 是最简单的解决方案。

给我们看代码

Firebase 具有云功能,允许在 Firestore 数据库中的数据更新时“触发”。然后我可以轻松地使用algoliasearch Node.js

export const onPostWriteSearch = functions.firestore
  .document('posts/{postId}')
  .onWrite((snap, context) => {
    console.log('Adding Data for', context.params.postId);
    const post = snap.after.data();

    if (!post) {
      console.log('post missing data');
      return;
    }

    if (post.type === 'lesson') {
      console.log('post type is lesson, skipping');
      return;
    }

    post.objectID = context.params.postId;

    // Write to the algolia index
    const index = client.initIndex(ALGOLIA_INDEX_NAME);
    return index.saveObject(cleanTimestamp(post));
  });

export const onPostDeleteSearch = functions.firestore
  .document('posts/{postId}')
  .onDelete((snap, context) => {
    // Write to the algolia index
    console.log('Deleting Data for', context.params.postId);
    const index = client.initIndex(ALGOLIA_INDEX_NAME);
    return index.deleteObject(context.params.postId);
  });

下一步

谢谢你,亚历克斯,聚在一起分享你的故事!

采访结束后,Alex 和我谈到了他的 Algolia 解决方案。类似于 Alex 对他的播客所做的,我们喜欢帮助我们的客人改进他们的搜索。随着他的业务增长,他渴望改进他的搜索功能,所以他很高兴看到他还可以用 Algolia 做些什么。以下是我提出的一些建议。它们包括给他的搜索结果增加更多种类(通过联合搜索),并开始增加更多个性化的结果和浏览功能。

关联

我们深入研究了他的数据和索引配置。我们添加了新的可搜索属性,并将他的排名从“日期排序”改为“相关性排序”。然后,我们添加了一个自定义的流行度排名,并创建了一个副本,允许用户切换到“按日期排序”。

自动完成/联合搜索

Alex 很惊讶地得知我们有一个前端插件,可以显示来自不同数据源的多个结果。这意味着当他的用户键入他们的查询时,他可以将他的教程、课程和播客显示为三个不同的结果集。我们的自动完成插件只需要各种索引的凭证和名称。他可以用自己的 CSS 来标记它,当然,他可以克隆这个库,并根据自己的需要进行定制。

全文搜索

我们讨论了 Algolia 如何对大型文本执行全文搜索,这需要不同的索引策略。策略是将文本分成更小的块,每个块一条记录。每个组块通常是一个段落。这极大地增强了文本内搜索。我给他发了一篇关于搜索大文本的文章,是我们 CTO 写的,还有这个教程。

索引更新

Alex 面临的一大挑战是在不影响发布日期的情况下继续动态构建他的索引。例如,现在当他有一个处于“草稿”状态的帖子,或者一个未来的“发布日期”时,他的代码不会执行更新来删除这些帖子。我们向他展示了删除或仅更新某些属性的DeleteObjectsPartialUpdates方法。解决方案的另一部分是管理 Firebase 事件和更新。

// Configure this to match an existing Algolia index name
  const algoliaIndex = algolia.initIndex(algoliaConfig.index);
  try {
    let result;
    if (req.body?.deleted) {
      // remove if doc removed
      result = await algoliaIndex.deleteObject(req.body?.deleted);
    } else if (req.body?.updated && !publish) {
      // remove if not published after update
      result = await algoliaIndex.deleteObject(req.body?.updated);
    } else if (publish) {
      // create when in publish state
      result = await algoliaIndex.saveObject(req.body);
    }
    console.log(result ? `Result: ${JSON.stringify(result)}` : 'Nothing Done.');
    res.status(200).end();
  } catch (error) {
    console.log(error);
    res.json({ message: 'Error check logs' });
    res.status(500).end();
  }

Algolia talk search app

又一个大赢家。由于 Alex 在 Youtube 上有很多视频和播客内容,我们建议他使用我们的 TalkSearch 工具,该工具可以抓取 YouTube 元数据及其转录或字幕,并建立一个用户可以搜索的 Algolia 索引。TalkSearch 允许他的访问者直接进入任何视频或播客的任何时刻。他对此真的很惊讶,想马上实施。除了 scraper,TalkSearch 还提供了一个前端解决方案,他可以根据自己的网站进行修改。

分析、洞察、建议和个性化

最后,Alex 立即看到了他如何利用分析和人工智能支持的推荐和个性化。Alex 可以使用分析来跟踪成功指标,改进他的内容,增加他的产品,并建立个性化的搜索/学习体验。Algolia 可以为学生建立一套建议,根据他们以前的考试成绩和教育选择,建议接下来的课程或相关课程。

使用快速、即时的库存更新构建 React 搜索应用程序

原文:https://www.algolia.com/blog/engineering/build-a-react-app-with-fast-indexing-and-instant-inventory-updates/

我和一个朋友最近集思广益,在 Covid 继续限制他们现场演出的时候,我们如何支持我们的当地乐队。我们想出了一个网站的主意,乐队可以在那里出售限量版海报和 t 恤。该网站旨在通过在社交媒体上推广新产品(也称为“drops ”)来创造一种社区感和紧迫感,这与时尚品牌和运动鞋界的成功做法类似。

我们选择 Algolia 作为我们的主要工具,因为它提供了前端库,可以轻松地为客户提供顶级搜索和发现体验的电子商务网站。我们决定为 React 利用 的搜索功能和模块性。这里有一个我们想要构建的草图:

挑战即时库存更新

这个项目的目标是在新产品发布时营造一种紧迫感。因此,技术挑战是向我们的用户显示最新的库存。从 Algolia 索引中搜索和检索信息的速度快如闪电,提供即时搜索结果。另一方面,在后端更新数据可能会花费更多的时间。然而,我们发现,如果我们在每次库存发生变化时都更新索引,就会降低搜索结果和一些前端组件的呈现时间。

我们将看看我们是如何使用和调整 InstantSearch 来为一个电子商务网站构建几乎是即时的搜索功能的。

使用 Algolia 小工具进行即时搜索

Algolia instant search提供了令人难以置信的快速搜索结果,它允许我们快速浏览设计,以产生所需的紧迫感。InstantSearch 中的自动完成功能增加了发现功能,因为用户可以看到他们可能没有考虑过的建议。

我想在 React 中建立网站,因为它为电子商务设计和跨平台兼容性提供了很好的选择。React 的 InstantSearch 是一个预先构建的前端 React 小部件 库,它可以让你快速开始一个站点布局。上面的组件图很好地映射了其中的一些小部件:

如果你没有 Algolia 索引,创建一个账户和 app 。我们创建了一个包含前三个小部件(SearchBox、RefinementList 和 Autocomplete)的<SearchBox>组件,以及一个用于 Hits 小部件的<Hits>组件,显示我们的产品列表。<ProductDetail>组件使用我们自己的数据和代码,因为它不是来自 Algolia 索引。

然而,我们在这个设计上有一个问题,那就是它要求我们不断地更新和检索 Algolia 索引中的数据。正如我们上面提到的,Algolia 索引针对检索进行了优化。他们的引擎优先搜索,快速索引紧随其后。我们不想让服务器充斥着索引更新,这可能会降低搜索速度、<Hits>的渲染速度,或者限制<SearchBox>的功能,所有这些都依赖于每次按键的超快速数据检索。我们想出了一个解决方案——将我们的库存数据更新从我们的搜索处理中分离出来,这样我们就可以在不触及我们的主索引的情况下更新库存。

我们回到我们的网站模型,发现我们可以通过定制即时搜索小部件来解决这个问题

为库存创建第二个 Algolia 指标

让我们同时拥有 as-you-type 即时搜索结果 即时库存的解决方案是拥有两个独立的 Algolia 索引。 如果你还没有 Algolia Index,创建一个账户和 app

其中一个指数是典型的产品指数。JSON 看起来是这样的:

[
 {
  "objectID": 42,
  "title": "Return to Paranormal",
  "band": “Out In The Cold”,
  "designer": “Jamie Deer”,
  "introduction_date": “2021-09-23T18:25:43.511Z”,
  "sizes": [“adults”, “kids”, “pets”],
  "_tags": ["Seattle", "aliens", “punk”]
 }
]

这只是简单的记录。最终,我们将在索引中包含更多信息,如乐队和设计师网站的链接、图片 URL 等。

第二个指标更简单:

[
 {
   “objectID”: 42,
   “remaining_editions”: 18
 }
]

现在我们可以更新较小的库存指数,而不会影响用于<Hits>的主要指数。

使用两个索引也需要为每个点击结果将 UI 分成两个独立的组件,但这是一个简单的调整:

我们将remaining_editions数字从<Hits>组件中移出,放入它自己单独的 自定义小部件 ,我们将其渲染为一个单独的组件,称为<Inventory>。两个索引和两个组件使用相同的objectID

需要注意的是,我们没有让<Inventory>成为<Hits>的子元素,因为我们需要将这两个组件的渲染分开。这就是为什么<SearchPage>组件持有<SearchBox><Hits><Inventory><ProductDetail>处于同一级别的原因。

使用 React 钩子保持一切可用

您可能已经注意到,我们依赖三个数据来源:

  1. Algolia 索引 (在 Algolia 的服务器上)–该索引提供填充<Hits><SearchBox>组件的数据。这里的数据摘自我们的后台数据库(3),当产品列表发生变化时,该数据库会定期更新。
  2. Algolia 库存索引 (在 Algolia 的服务器上)——该索引提供了显示在<Inventory>组件中的更新后的remaining_editions属性。remaining_editions属性来自我们的后台数据库(3)。
  3. 我们的后台数据库 (在我们的服务器上)–我们维护着一个详细的产品后台数据库,其中包括更长的产品描述和购买数据。我们从这个数据库中提取库存变化,并异步更新<ProductDetail>组件,除了remaining_editions、显示给 <Inventory>组件。

我们在这个应用程序中有两个目标:第一,提供“即时”库存数字,第二,保持随时输入即时搜索结果。以下是我们实现这两个目标的方法。

即时搜索从不减速

保持即时搜索完全可用是没有商量余地的。客户可以理解库存中几秒钟的延迟,但他们不会容忍缓慢或故障的搜索功能。我们是这样构建这部分的:

  • 我们使用 InstantSearch 的一个非常标准的实现,其中一个变化是需要我们为Hits连接一个 定制组件
  • 在我们的<SearchPage>组件中,我们使用了 React 状态挂钩,并为传递给<Hits>组件的setObjectIDs创建了一个 setter 方法。
  • 当点击渲染时,我们用一个处理程序方法捕获数组中的objectIDs,然后将它传递回<SearchPage>
  • 在管理 异步 API 调用方面,这是我们的第一要务,所以唯一的 Hits widget 是 等待 的是 InstantSearch API。我们可以用<Hits>中的useEffect()钩子来完成这个任务,但是 Algolia 在 InstantSearch 中提供了一个方法 来实现同样的目标:onSearchStateChange

这些步骤从<Hits>中获取我们需要的信息,而不会中断即时搜索功能的 UI 或数据流——我们只需在中间插入我们连接的组件,并使用内置方法来触发更新。

**代码为SearchBox.js 😗*

import { InstantSearch } from 'react-instantsearch-dom';
import SearchBox from './SearchBox.js';
import CustomHits from './Hits.js';
import Inventory from './Inventory.js';
import ProductDetail from './ProductDetail.js';

const searchClient = algoliasearch('YourApplicationID', 'YourSearchOnlyAPIKey');

function SearchPage() {
 const [objectIDs, setObjectIDs] = useState([]);
 const [selectedObject, setSelectedObject] = useState({
   objectID: null,
 });

 return (
   <React.Fragment>
     <InstantSearch
       indexName="product_index"
       searchClient={searchClient}
       searchState={{
         query: '',
       }}
       onSearchStateChange={searchState => {
         if (searchState) {
           setObjectIDs();
         }
       }}
     >
       <SearchBox />
       <CustomHits
         objectIDs={objectIDs}
         setObjectIDs={setObjectIDs}
         selectedObject={selectedObject}
         setSelectedObject={setSelectedObject}
       />
       <Inventory objectIDs={objectIDs} />
       <ProductDetail selectedObject={selectedObject} />
     </InstantSearch>
   </React.Fragment>
 );
}

export default SearchPage;

代码为Hits.js `:

import React from 'react';
import PropTypes from 'prop-types';
import { connectHits } from 'react-instantsearch-dom';

function Hits({ hits, objectIDs, setObjectIDs }) {
 const handleSearch = () => {
   hits.map(hit => objectIDs.push(hit.objectID));
   setObjectIDs(hits);
 };
 return (
   <ol>
     {handleSearch}
     {hits.map(hit => (
       <li key={hit.objectID}>{hit.name}</li>
     ))}
   </ol>
 );
}

Hits.propTypes = {
 hits: PropTypes.arrayOf(PropTypes.object),
 objectIDs: PropTypes.arrayOf(PropTypes.string),
 setObjectIDs: PropTypes.func,
};

const CustomHits = connectHits(Hits);
export default CustomHits;

【即时】库存更新接近实时

既然我们已经设置好捕获objectIDs,我们需要设置我们的库存更新。我们将在三种不同的情况下调用我们的库存指数:两个用于<Inventory>组件,一个用于<ProductDetail>组件。

为了显示最新的库存信息,我们需要两个数据点:<Hits>中当前结果的数组objectIDs,以及库存指数中的最新数字。objectIDs现在保存在<SearchPage>中,每次searchState改变时都会更新,所以将它们传递给<Inventory>很容易。为了从我们的库存索引中获取信息,我们使用另一个 内置的 Algolia 方法 : index.getObjects()。这让我们可以直接找到我们想要的对象,而不必创建另一个 InstantSearch 实例。

注意,从algoliasearch@4.0.0开始,getObject()getObjects()方法在lite构建中不可用,这是默认的导入——您只需要更新 import 语句。

一旦我们建立了初始连接,建立对库存索引的第二次调用就很简单了。我们在一个useEffect()钩子中添加了一个setInterval()函数,每两秒钟调用一次库存指数。这样,即使用户不更新他们的搜索词,库存数量也会继续快速刷新,确保实时库存。我们可能会调整生产中的时间间隔,但这对我们的目的来说已经足够快了。

**代码为Inventory.js 😗*

import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
import algoliasearch from 'algoliasearch';

const searchClient = algoliasearch('YourApplicationID', 'YourSearchOnlyAPIKey');

function Inventory({ objectIDs }) {
 const index = searchClient.initIndex('inventory_index');
 let results = index.getObjects(objectIDs);
 useEffect(() => {
   const timer = setInterval(() => {
     results = index.getObjects(objectIDs);
   }, 2000);
   return () => clearTimeout(timer);
 }, []);
 return (
   <ol>
     {results.map(result => (
       <li key={result.objectID}>Remaining: {result.remaining_editions}</li>
     ))}
   </ol>
 );
}

Inventory.propTypes = {
 objectIDs: PropTypes.arrayOf(PropTypes.string),
};

export default Inventory;

组件内部的代码也是如此。该组件将从我们的产品数据库(非 Algolia 数据源)获取大部分数据。对于库存编号,它会像上面一样调用inventory_index,只使用selectedObjectobjectID。采用这种设计,在<Hits>中产品结果旁边显示的库存编号和<ProductDetail>组件中的库存编号之间应该只有非常小的延迟,不超过两秒钟。这样,<ProductDetail>将总是显示更新的数据。

现在我们有了一个<SearchPage>,显示近乎即时的库存更新,同时仍然允许充分利用即时搜索结果。

我们设想这个项目是独立艺术家和音乐家将他们的社交媒体与电子商务平台联系起来的一种方式。作为音乐迷,在过去的几年里,我们已经错过了当地音乐界的社区意识和活力。我们的希望是,这个网站设计将感觉真实和令人兴奋,足以捕捉一些能量。

Algolia 的 快速实现的小部件 和适应性强的组件使其易于构建原型。你可能有其他“即时库存”有用的想法——也许是黑色星期五销售!我们希望了解您用 Algolia 构建了什么,以及它如何改变您的项目!

建立一个包含在线卖家的商店定位器

原文:https://www.algolia.com/blog/engineering/build-a-store-locator-that-includes-online-sellers/

假设您的任务是构建一个应用程序,帮助消费者找到提供特定服务的机构。其中一些机构是当地的实体店面,另一些则是服务于同一地区的纯在线机构。

这个问题最初是由 Alejo Arias 在 Algolia 论坛上提出的:

我的索引中有一系列提供者:

  • 一些是国家供应商(他们有一个national: true属性)
  • 有些是州范围内的提供商(他们有一个state属性和他们服务的州的列表,例如[“NY”, “FL”])
  • 有些是本地的(它们的_geoloc属性中有特定的 lat/lng)

我希望在我的搜索结果中包含与我的用户位置相近的本地提供商相匹配的任何内容,同时还提供(相同的结果)州和国家提供商

添加一个aroundLatLng滤镜会自动移除其他结果,无论我尝试什么样的面或滤镜。

我怎样才能实现这一点?
基本上我想有这样的东西:aroundLatLng: x,y OR state: NY OR national: true

那么,如何将实体商店的地理搜索结果与基于布尔或文本的查询结果结合起来呢?如何构建一个界面来统一显示它们呢?

地理数据和 Algolia 搜索

正如 Alejo 提到的,您可以通过在记录上添加一个特殊的_geoloc属性来使用 Algolia 进行地理搜索。您可以将一组或多组纬度/经度元组放入该属性,以指示链接到记录的地理位置。

然后,您使用 Algolia 客户端库来查询这些地理编码记录——过滤固定点周围的半径(aroundLatLong)或形状内的区域(insideBoundingBoxinsidePolygon)。文档详细介绍了这些方法之间的区别。你也可以通读这些文章带你构建一个纯地理的商店定位器。

但是,您不能从同一个查询中提取地理和非地理结果。如果您正在搜索邻近性,缺少_geoloc属性的记录将不会显示在结果集中。

那么,当并非所有记录都有地理坐标时,如何执行这种搜索呢?

单指标解

你可以通过地理搜索来做所有的事情。通过将_geoloc数据添加到州和国家记录中,你可以使用地理查询来搜索一切。例如,将全州范围的机构放置在每个州中心的坐标上。这是我添加到论坛帖子中的最初解决方案,但是这个解决方案有几个问题:

  1. Alejo 特别提到一些提供商跨越多个州
  2. 将提供商放在州的中心会给居住在州边界附近的消费者带来不准确的结果
  3. 国家供应商需要每个州的记录

多指标解决方案

或者,您可以构建一个多索引解决方案,其中一个索引用于包含地理数据的实体店面,另一个索引用于州和国家提供商。然后,您可以单独搜索这两个数据源,并混合结果集。这种方法要求每次搜索两次 Algolia 查询,但它将允许我们保证从两种类型的提供商那里得到结果。

准备您的指数

首先,你需要一个机构数据集。您可以使用一些资源从头构建一个。你可以从匿名地址数据开始,这个报告包含了美国大约 3000 个地址。然后,通过小脚本运行这些地址,添加虚构的代理名称,并随机将一些代理标记为“首选”。

def transform_records(addresses):
  address_records = []
  for address in addresses:
    record = {}
    record_geocode = {}
    # One in ten chance agency is preferred 
    record['preferred'] = 10 == random.randint(1,10)

    record['objectID'] = random_name.generate_name().title()
    if record['preferred']:
      record['name'] = f"{record['objectID']} Agency (Preferred)"
    else:
      record['name'] = f"{record['objectID']} Agency"
    record['address'] = address.get('address1')
    record['city'] = address.get('city')
    record['state'] = address.get('state')
    record['zip'] = address.get('postalCode')
    record_geocode['lat'] = address['coordinates']['lat']
    record_geocode['lng'] = address['coordinates']['lng']
    record['_geoloc'] = record_geocode
    address_records.append(record)
  return address_records

您可以使用另一个脚本为第二个索引生成州级和州级机构。两个数据集都驻留在这个 repo 中。您可以在现有的 Algolia 帐户下从这些数据集创建指数,或者注册一个免费帐户并建立一个新的agency_finder应用程序。

建筑前端

既然您已经填充了索引,那么是时候构建前端了。Algolia 在 InstantSearch 库中的geoSearch组件包括一个助手组件,用于初始化 Google Maps API,渲染地图,并将该地图绑定到 Algolia 索引中的地理位置查询。这是我之前用来构建一个新冠肺炎案例可视化器的同一个组件。但是,对于这个项目,您希望用户输入地址,并使用 Google Places API 为他们解析地理位置信息。事实证明,在 InstantSearch 中使用开箱即用的组件具有挑战性,因此您将从头开始构建自己的界面。

这篇博客文章为我们提供了一个在 React 中构建地址自动完成表单的可靠模型。您将使用它作为您的 AgencyFinderForm 组件的基础,以呈现地址自动完成输入字段以及只读字段来显示结果地址。纬度/经度存储在 state 中,但没有显示在表单上

您可以通过使用 React 组件周围的 Google 包装器来初始化google对象并添加位置 API,从而使博客中的代码现代化。

   renderForm = (status) => {
    switch (status) {
      case Status.SUCCESS:
        return ;
      default:
        return <h3>{status} ...</h3>;
      };
  }

  render() {
    return (
      <div>
        <h1>Find an Agency</h1>
        <p className='instructions'>🔍 Search for your address to find the closest agencies.</p>
        <div className='left-panel'>
          <Wrapper apiKey={process.env.REACT_APP_GOOGLE_API_KEY} render={this.renderForm} libraries={["places"]} />
        </div>
        <div className='right-panel'>
          <AgencyFinderResults hits={this.state.results} />
        </div>
      </div>
    )
  }
}

接下来,向基本表单添加一个clear按钮。

  handleClear() {
    this.setState(this.initialState);
    var input = document.getElementById('autocomplete');
    input.value = '';
    google.maps.event.removeListener(this.autocompleteListener);
    this.initAutocomplete();
  }

最后,您将使用以下代码从 Places API 清理处理address_components:

  handlePlaceSelect() {
    const addressObject = this.autocomplete.getPlace();
    const address = addressObject.address_components.reduce((seed, { short_name, types }) => {
      types.forEach(t => {
        seed[t] = short_name;
      });
      return seed;
    }, {});
    [this setState](this.setState)({
      streetAddress: `${address.street_number} ${address.route}`,
      city: address.locality ? address.locality : address.sublocality_level_1,
      state: address.administrative_area_level_1,
      zipCode: address.postal_code,
      geoCode: addressObject.geometry.location.lat() + ', ' + addressObject.geometry.location.lng(),
    });
  }

查询结果

当用户选择了一个位置,并且组件状态中存储了纬度、经度和地址信息之后,就可以查询索引了。您使用来自 Javascript API 客户端multipleQueries方法将两个查询批处理在一起并组合结果。这仍然算作两次查询,但它减少了到 API 的往返次数。

handleSubmit(event) {
    const queries = [{
      indexName: statesIndex,
      query: this.state.state,
      params: {
        hitsPerPage: 10
      }
    }, {
      indexName: geoIndex,
      query: '',
      params: {
        aroundLatLng: this.state.geoCode,
        facetFilters: [ this.state.preferred ? 'preferred:true' : '' ],
        hitsPerPage: 10,
      }
    }];

    this.searchClient.multipleQueries(queries).then(({ results }) => {
      let allHits = [];
      results.map((result) => {
        return allHits.push(...result.hits);
      });
      this.props.handleCallback(allHits);
    });
  }

首先,初始化两个查询。请注意multipleQueries方法如何允许我们混合地理和基于字符串的查询,甚至为您的“首选”机构添加一个
可选的facetFilter。然后将查询数组传递给客户机。响应包括来自每个
查询的单个结果,但是您可以将来自两个结果集的hits分解到一个数组中,并将它们传递给AgencyFinderResults组件。

把所有的东西放在一起

现在,您有了一个可靠的概念验证 React 组件,可以将地理和非地理结果分层到一个结果集中。此时,您可以通过添加 Google 地图来显示地理结果,从而改进示例。您还可以转回到单个索引,使用multipleQueries功能用不同的参数多次查询同一个索引。

完整的例子可以在这个 Github repo 中找到,或者你可以尝试一个现场演示

通过控制和可见性构建更好的搜索个性化

原文:https://www.algolia.com/blog/ux/build-better-search-personalization-with-control-and-visibility/

今天,每个人都同意个性化对消费者和企业的积极影响。从简单的基于人口统计的网站个性化到全面的基于行为的多渠道个性化,朝着更加个性化的体验迈出的每一步都是朝着好的方向迈出的一步。

omnichannel personalization

说了这么多,怎么做个性化?哪种策略对你的受众和你的企业来说是正确的?令人毛骨悚然的个性化和真正提升体验的个性化之间的界限是什么?

今年 7 月,我们宣布推出Algolia Summer’19功能,使各种规模的企业能够通过任何渠道提供快速、定制和个性化的体验。

今天,当我们推出个性化模拟器时,我们想加倍强调您的个性化策略的总体可见性和控制的重要性。

常见的个性化陷阱

个性化做错了比完全没有个性化更糟糕。糟糕的实现有可能抵消个性化带来的每一次提升。或者更糟,破坏体验,让你的用户和购物者远离你的品牌。以下是需要注意的主要陷阱。

  • 数据管理不当。我们拿数据来说。个性化体验的好坏取决于它所依赖的数据。但随着这些不可或缺的数据而来的,是企业利用这些数据推动个性化体验的巨大责任。数据收集应该是透明的,并基于消费者的选择。数据存储和处理应符合最高安全标准。数据应该用于非常具体、明确的目的。处理数据没有任何近似的余地:不仅可能很快违法,还会摧毁消费者对你公司的任何信任。75%的消费者表示,如果他们不相信一家公司会保护他们的数据,无论他们的产品有多好,他们都不会购买。

不幸的是,复杂性不止于此。

  • 考虑到错误的变量。可以考虑许多变量来驱动个性化策略,但是并不是所有的变量都是相关的。想象一下类似网飞的用例。个性化可以用来个性化呈现给用户的内容的参数之一是电影标题中的字数。这样做有意义并能增强体验吗?可能不会,不管你使用什么样的个性化技术。
  • 让你的个人化…有点太个人化了。更进一步,如果配置不当,个性化会变得令人毛骨悚然。在消费者的在线活动中,在某个品牌的属性之外,或者过于强烈的个性化会阻止这些消费者。 63%的受访者表示,他们将停止从那些“令人毛骨悚然”的营销方式走得太远的公司购买产品和服务。过于强烈的个性化不仅无助于体验,反而会限制体验。这将增加用户发现和享受你的产品范围的摩擦。

正如杰伊·贝尔(Jay Baer)所言,“[……]我们永远不能忘记,是我们的观众——而不是我们——决定了什么是令人满意的,什么是令人毛骨悚然的。他们决定什么是聪明,什么是愚蠢。他们决定什么是界内的,什么是界外的。”

可见性和控制是根本

如果您不了解其背后的逻辑,您将无法快速评估您的个性化行为,也无法优化它。当然,在将你的个性化推广到你所有的数字资产和流量之前,你可能会 A/B 测试一下个性化和非个性化体验。但是在几个商业周期中,你仍然会暴露一个潜在的坏体验给你的部分流量,并且失去那些用户,以及在迭代之前浪费这个时间。

将用户体验的核心要素交给一个黑盒有其不利之处,即使它工作得很好。你将无法知道为什么你的个性化策略表现良好,也无法将这些经验应用到你的其他经历中,或者整个业务中。因此,个性化逻辑的可见性至关重要。

当您可以根据您的学习采取行动,并定义这种个性化逻辑时,可见性会释放更多的价值。就像任何谈话一样,语境很重要。与盲目地应用为任何业务构建的个性化算法不同,对个性化逻辑的控制使您能够使其适应您的业务和受众。如果你知道访问产品页面不如“添加到购物车”重要,或者对品牌的兴趣比对颜色的兴趣更有意义,你应该能够将它应用到你的个性化中。

个性化在用户体验的每个方面都很关键,我们相信对于搜索和发现来说尤其如此。搜索和发现是消费者最明确表达其意图的地方。用不相关的、非个性化的内容来回答他们是不可取的。

介绍 Algolia 个性化模拟器:算法、洞察力和人类专业知识的故事

在 Algolia,我们认为我们的客户应该完全了解和控制他们为自己的业务和观众构建的搜索和发现体验。我们让客户能够将他们的知识、我们提供给他们的数据以及我们的算法结合起来,以实现最佳结果。正是基于这种心态,我们建立了自己的个性化。

Algolia 个性化模拟器是我们个性化引擎面向人的一面。

personalization simulator

控制:

  • 借助该工具,业务利益相关方可以根据获取的客户行为数据(如点击数据和购买数据)快速创建个性化规则,为客户量身定制搜索结果。他们可以定义要考虑哪些事件(如页面浏览量、购物车添加等。)以及它们在个性化策略中应该有多重要。
  • 同时,他们可以定义个性化逻辑中产品或内容的每个属性的相似性有多重要。因此,基于他们对业务和受众的了解,他们可以定义对品牌的喜爱是否比对颜色的喜爱更重要。

能见度:

  • personalization simulator 允许业务团队实时可视化他们的个性化策略的变化效果。他们可以很快看到他们的配置如何改变搜索结果并影响最终用户体验。使用模拟器,用户可以轻松地切换不同的用户配置文件,以确保他们的个性化策略是有意义的,并实际上增强了现实生活中用户的体验。

透明度:

  • 这种个性化方法的一个非常有价值的副作用是,它允许企业向用户公开 Algolia 计算的个性化配置文件。如上所述,消费者对他们的个人数据的要求越来越高,并对侵入式个性化失去兴趣。向他们展示为什么向他们展示特定的产品或内容是赢得他们信任的关键。

用例:大型奢侈品时尚卖场

让我们来看看这个新工具的真实使用案例。欧洲一家大型奢侈品时尚市场正在使用 Algolia 来增强他们的搜索和发现体验。

鉴于他们目录的广度(约 100 万件商品),有理由认为他们所有的购物者都不是在寻找同样的商品。因此,他们决定为顾客提供个性化的体验——对他们的观众、企业和产品目录都有意义的体验。

他们的业务是独特的,这就是为什么控制个性化逻辑的能力非常重要。例如,点击非常高端手袋的人可能只是想看一眼,而不是真的去买。因此,告诉 Algolia 添加到购物车或添加到愿望清单是一个比简单点击商品更重要的事件的能力是至关重要的。

此外,他们发现购物者倾向于购买同一品牌的商品,而颜色并不那么重要。这就是为什么他们决定优化个性化逻辑,优先向顾客展示与他们互动最多的品牌商品。一个针对对他们没有意义的标准进行优化的黑盒个性化工具是不会有成效的。

卓越的用户体验让用户在旅程的每一步都感到愉悦

个性化只是伟大体验蛋糕上的樱桃。我们为您的多渠道体验提供了更多提示和最佳实践。观看我们的Algolia 2019 年夏季网络研讨会点播,了解如何跨平台创造令人惊叹的个性化体验。

如果您喜欢个人游,我们很乐意为您联系搜索专家。如果你想和搜索专家谈谈。同时,我们希望听到你的个性化建议。给我们留下评论或推文。

构建、购买以及两者之间的一切:市场技术领导的 5 个关键问题

原文:https://www.algolia.com/blog/ecommerce/build-vs-buy-5-key-questions-for-marketplace-tech-leads/

在 API 经济中,外包或构建和维护软件工具的决策比以往任何时候都更加微妙。我们最近采访了来自顶级市场的两位技术领袖。鲍勃·惠特尼是 2013 年成立的点对点男装市场 Grailed 的工程总监。丹·戴维斯是拉丁美洲最大的家装/家居装饰市场 Madeira Madeira 的前首席技术官(现为顾问),该市场被称为“巴西集市”。

Bob 和 Dan 都是亲力亲为的技术领导者:组建团队、提供指导,当然还有做出技术堆栈决策。请继续阅读,了解他们在做出软件决策时考虑的因素、陷阱和机会。

制造还是购买:这是一个时间点的决定

丹回忆起他之前公司的一名新员工。那是在 2009 年,他们规模庞大,利润丰厚,所以这个人问的第一个问题是为什么他们不在 AWS 上。他们忘记了一个小事实?该公司 2001 年成立时,AWS 还不存在。那时候,建筑是唯一的选择。然而,最终,服务器不是他们的业务,这加强了他们从来就不容易做出的转换(也就是购买)的决定。丹的总体立场是:了解你的业务和你的核心领域,以及它如何随着时间的推移而变化。

鲍勃对此表示赞同:专注于你的核心竞争力是至关重要的。重要的是他们能多快地对竞争做出反应,并在市场上占据突出位置:在不同的时期,这可能意味着你的投资组合做出不同的决策。

问题要问,细微之处要考虑

1。是否增加了竞争优势?

由于市场竞争激烈,Bob 在做出每个堆栈决策时首先考虑的是它是否会增加竞争优势。

Bob 举了托管的例子:他不仅不希望他现有的团队花时间在服务器上做低级别的优化,而且为了进行构建,他需要找到足够多的具有适当级别的适当能力的人;他们的薪水和维持整个运营会变得非常昂贵。

“尽量不要被束缚住手脚,成为每一项技术能力的专家,尽管这可能很有吸引力。除非你是亚马逊,否则这不是建立成功企业的方法。”

–工程总监鲍勃·惠特尼

2。我的工程团队能做到吗?

对 Dan 来说,一个更好的问题是:我的工程团队应该这样做吗?

人才很难得到,专门人才更难。用现有团队搭建的可行性如何?你当然不想做了好几年,然后发现自己没做好。

对于 Madeira Madeira 来说,搜索是堆栈中极其重要的一部分。市场就是帮助用户找到合适的产品;轻松浏览和搜索数以百万计的产品至关重要。在搜索和浏览方面,Dan 的团队必须有能力优化客户体验。然而,他不希望他的团队花时间在优化搜索索引和规模上。

底线:很难按照当今客户要求的复杂程度来构建、部署和维护。

鲍勃这样提出这个问题:

“这是我们真的想投资的东西吗?还是有比我们做得更好的人在全职工作?”

鲍勃·惠特尼,格雷莱德工程总监

对 Dan 来说,决策的制定既取决于他的工程团队的快乐和热情,也取决于其他因素。工程思维通常是:“如果你要买东西,为什么要有我们”,这是可以理解的:最终,是他的团队将不得不支持任何产品。为此,如果您正在购买:

3。寻找合作伙伴,而不是供应商

你购买的供应商必须感觉像是你团队的延伸:当系统在凌晨 1 点停机时,他们需要像你自己的团队一样投入,以确保你获胜。丹的建议是:如果你正在购买软件,寻找合作伙伴,而不是供应商。

鲍勃补充道:当你决定购买时,小事情很重要。你能联系上 Slack 的支持团队吗?他们准备好多做一点来帮助你了吗?对于一个市场来说,保持在客户期望之上是至关重要的,这直接转化为能够全天候依赖任何软件及其团队。

4。你能在多大程度上控制体验?

无论您是构建还是购买,您的团队都希望能够自己进行相关的更改,而不需要花费几天时间。关键是拥有这种体验,并保持对重要事物的控制。如果您正在购买软件,您会想知道产品是如何构建和公开的。

对丹来说,黑盒产品是行不通的。他提出了马赫联盟哲学,因为它包含了正确的思维模式:拥有客户体验并不意味着你必须构建它的所有部分,但它确实意味着你需要能够很好地将它们缝合在一起。

Dan 希望完全控制用户体验,无论是现在还是将来,所以软件的选择取决于它的灵活性:它能满足当前的用例,而且还能发展吗?与他的数据紧密集成是关键。

为此,Bob 和 Dan 调出了好的文档和 API 优先的产品,他们可以将这些产品插入到他们的堆栈中并轻松地进行定制。

5。比较成本时,想想过去的一年

查看一个解决方案的年成本与在内部使用开源构建它的成本,几乎会让你普遍偏向于构建。然而,事情从来没有那么简单。丹说:“当你加上维护,加上你只是进入一个 V1,而不考虑 V2,V3 等因素,计算变得非常不同。”您的团队现在拥有一个产品而不是一个项目,总拥有成本是一个全新的等式。

鲍勃建议问问你自己,你是否会把你想做的事情做得非常非常好。这可能需要您进行几次迭代,并且根据您正在构建的内容,可能需要很长时间。这积累起来真的很快,你通常会投资一年才意识到这不是一个好主意。

不过,买家要小心了。回到他自己的团队接受他所做的选择的重要性,Dan 着眼于他们在产品之上构建、定制和创新使用产品的能力。你需要确定你也在购买产品的进化和影响进化的能力。

观看我们与 Bob 和 Dan 的聊天视频,了解更多技巧和建议,并学习如何构建市场搜索

使用 CSV 文件、MongoDB 或 GraphQL 建立新冠肺炎地理搜索索引

原文:https://www.algolia.com/blog/engineering/building-a-covid-19-geosearch-index-using-csv-files-mongodb-or-graphql/

我的孩子们最近回到了学校,这意味着新冠肺炎再次在我的脑海中鲜活起来。我认为建立一个新冠肺炎地理搜索网站来探索使用地图界面的病例计数可能会很有趣。第一步是选择数据源并构建索引。从结构良好的数据中创建托管索引对于 Algolia 如何快速准确地返回搜索结果至关重要。创建一个索引也可能是我们作为开发人员试图启动和运行搜索的第一个挑战。

我想为我的网站建立使用约翰·霍普斯金大学的聚集新冠肺炎数据集的索引。事实证明,我们有几种不同的方式来消费这个数据集。这为我们探索从不同类型的后端(包括平面文件、数据库和 API)获取数据的几种模式提供了机会。作为开发人员,我们通常不会选择从哪里获取数据。应用程序带有预先存在的数据源和定义的接口。我们甚至可能需要与多个数据源进行交互,以构建应用程序所需的搜索类型。

顺便说一下,Algolia 继续为非营利的新冠肺炎相关应用程序提供免费专业计划,如果你正在寻找建立(或已经建立)类似的东西。

入门

在 Algolia,我们将数据摄取称为三步索引流程:

  1. 从我们的数据源获取数据
  2. 转换提取的数据
  3. 将我们的记录发送到索引

在这篇博客的其余部分,我们将通过一些策略从 JHU 提供的每种可用数据格式中获取数据。接下来,你需要在现有的 Algolia 账户下创建一个索引,或者注册一个免费账户并安装一个应用程序。

你可以在新冠肺炎地理搜索演示报告的目录下找到我们下面讨论的所有摄取脚本。随意克隆它并测试完成的演示。您需要从example.env创建一个.env文件,并在运行脚本之前添加您的 Algolia 应用程序信息和 API 密钥。

从平面文件中提取数据

约翰·霍普斯金方便地将他们的全球和美国数据发布到至少每天更新的 GitHub 回购协议上。数据本身以 CSV 格式存储。这些文件包含地图前端所需的地理编码坐标。

例如,这是我的家乡俄亥俄州的记录:

`39049,Franklin,Ohio,US,2021-08-31 04:21:46,39.96995815,-83.01115755,139178,1531,,,"Franklin, Ohio, US",10569.763874248532,1.0863785943180675`

数据科学家发现在存储库中使用平面文件存储数据很有吸引力,因为它强调版本控制和跟踪随时间的变化。如果有更好的信息可用,他们可以更新历史记录,同时还可以捕捉到记录已经更改的事实。高阶数据库可能很难跟踪这种变化。我们将编写一个快速脚本,将原始 CSV 数据直接接收到我们的索引中。我们可以使用 Python pandas 库来做到这一点。

#!python3
import pandas

DATA_FILE = '../COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/08-30-2021.csv'

def main():
  df = pandas.read_csv(DATA_FILE)
  print(df)

if __name__ == "__main__":
    main()

他们用日期戳命名每个文件,这意味着我们最终需要一种方法来找到包含最新数据的文件名。目前,我们只是把摄入时间锁定在某一天。尽管文件本身有很多数据。我们想把它精简到我们搜索需要的信息。由于我们不能在摄取步骤中这样做,我们将把它保存到转换步骤中,然后继续下一个数据源。

从数据库中提取数据

MongoDB 的开发人员已经将 JHU 数据集导入到一个托管的 MongoDB 文档存储库。从数据库而不是原始文件消费有几个优点。首先,他们负责从 Github repo 接收 CSV 文件,并确保每小时更新一次数据。住在文档存储的下游意味着我们不必做整理平面文件和查找最新数据的工作。此外,MongoDB 为我们提供了一个受管理的端点和一个已知的接口,减少了开发人员的摩擦,因为我们不再需要处理平面文件的定制数据结构。

我们可以使用 pymongo 直接连接到他们的文档存储,并使用它的元数据来检索最新的记录。

#!python3
from pymongo import MongoClient

MDB_URL = "mongodb+srv://readonly:readonly@covid-19.hip2i.mongodb.net/covid19"

def main():
  client = MongoClient(MDB_URL)
  db = client.get_database("covid19")
  stats = db.get_collection("global_and_us")
  metadata = db.get_collection("metadata")

  # Get the last date loaded:
  meta = metadata.find_one()
  last_date = meta["last_date"]

  results = stats.find(
    {
      "date":last_date,
    }
    print(results)

if __name__ == "__main__":
    main()

构建搜索索引的一个关键部分是将数据精简到我们搜索数据所需的数量。因为我们使用数据库,所以不需要像平面文件那样接收整个文档。让我们将查询范围缩小到位置信息、地理编码坐标和确诊病例数。我们还可以跳过任何缺少位置数据的记录:

  results = stats.find(
    {
      "date":last_date,
      "loc":{"$exists": True, "$ne": [] }
    }, {
      "combined_name": 1, 
      "county": 1,
      "state": 1,
      "country": 1,
      "confirmed": 1,
      "loc": 1
    }

当我们以后转换数据记录时,这将使我们的工作更容易。

从 REST APIs 获取数据

MongoDB 还提供了一个 RESTful API来检索相同的数据,而不必连接到文档存储。API 的优势在于只需要一个安全的 HTTP 连接就可以使用。挑战来自于复杂的数据请求,这些请求需要对 API 设计有深入的了解,我们将在下面看到。

首先,让我们构建我们的 REST 请求:

#!python3
import json
import requests

METADATA_URL = 'https://webhooks.mongodb-stitch.com/api/client/v2.0/app/covid-19-qppza/service/REST-API/incoming_webhook/metadata'
REST_URL = 'https://webhooks.mongodb-stitch.com/api/client/v2.0/app/covid-19-qppza/service/REST-API/incoming_webhook/global_and_us'

def main():
  meta = requests.get(METADATA_URL)
  last_date = meta.json()['last_date']
  query = {
    'min_date': last_date,
    'max_date': last_date,
    'hide_fields': '_id, fips, country_code, country_iso2, country_iso3, population, deaths, confirmed_daily, deaths_daily, recovered, recovered_daily'
  }
  response = requests.get(REST_URL, params=query)
  print(response.json())

if __name__ == "__main__":
    main()

同样,我们使用元数据来确保我们只获取最新的数据。注意,REST API 公开了一个hide_fields参数,我们可以用它作为负过滤器来获取我们需要的字段。这并不像列出我们想要的字段那样简单,但是这样设计 API 可能是有原因的。对于 API,我们必须使用给定的接口。幸运的是,正如我们将在下一节看到的,这是开发人员一直在思考的问题。

从 GraphQL APIs 获取数据

我们探索的最后一个接口是经过认证的 GraphQL API。GraphQL 提供了与 REST API 相同的 HTTPS 可访问接口,但是增加了一个规范化查询语言,这样就不需要对单个 API 非常熟悉。我们再次使用元数据来查找最新数据的日期,并只检索我们需要的字段。但是,因为这个 API 是经过身份验证的,所以我们必须首先访问一个身份验证端点并获取一个短期访问令牌:

#!python3
import json
import requests

GRAPHQL_AUTH = "https://realm.mongodb.com/api/client/v2.0/app/covid-19-qppza/auth/providers/anon-user/login"
GRAPHQL_URL  = "https://realm.mongodb.com/api/client/v2.0/app/covid-19-qppza/graphql"

def main():
  response = requests.get(GRAPHQL_AUTH)
  access_token =  response.json()['access_token']

  headers = {}
  headers["Accept"] = "application/json"
  headers["Content-Type"] = "application/json"
  headers["Authorization"] = "Bearer {}".format(access_token)

  metadata = requests.post(GRAPHQL_URL, headers=headers, json={'query': 'query { metadatum{ last_date }}'})
  if metadata.status_code != 200:
    raise Exception(f"Query failed to run with a {response.status_code}.")
  last_date = metadata.json()['data']['metadatum']['last_date']

  query = '''query {
    global_and_us(query: { date: "''' + last_date + '''" }, limit:5000)
    { confirmed county state country combined_name loc { type coordinates }}
}'''

  response = requests.post(GRAPHQL_URL, headers=headers, json={'query': query})
  if response.status_code != 200:
    raise Exception(f"Query failed to run with a {response.status_code}.")
  print(response.json())

if __name__ == "__main__":
    main()

这个界面并没有给桌面带来多少新的东西。与 REST API 相比,它有一点是标准化的。当我们跨多个不同的后端进行查询,或者针对移动或低带宽用例对数据进行精简切片时,GraphQL 确实大放异彩。在搜索之后引入额外的数据可能很有趣,但是我们可以用其他开销更少的接口来实现。

选择我们的数据源

这些摄取方法各有利弊。直接使用平面文件可以让我们最接近数据,并包含一些下游数据源中没有的全球市政数据。然而,使用这些文件意味着需要额外的代码来判断哪个文件有最新的数据。我们还需要做我们自己的数据标准化。

通过 MongoDB 使用文件提供了一个简单的接口,并建立在平面文件的托管数据接收层之上,但是会牺牲一些全局数据的保真度。对于这个用例,REST 和 GraphQL APIs 并没有提供比我们从消费上游资源中得到的更多的东西。所有这三个(MongoDB 和两个 API 方法)都提供了查询接口来过滤记录,并只检索索引所需的属性。

当我们考虑随着时间的推移保持数据同步时,我们可能会发现 MongoDB 接口很有吸引力,因为我们可以使用元数据来确保我们总是获取最新的案例计数。尽管我喜欢通过消费原始 CSV 文件获得的额外数据,但我们必须建立一种方法来监控回购,以确保我们总是获得最新的数据。

转换我们的数据

选择数据源后,我们的下一个任务是为我们的索引构建数据。Algolia 索引必须是 JSON 格式,每个记录有一个唯一的objectID。将这些 ID 映射到数据源中的现有 ID 是有意义的。Algolia API 可以为我们创建这些 id,但是我们不建议这样做。除了这些要求之外,这里的目标是将我们的记录精简到最简单的形式,仍然在性能搜索和有用的结果之间提供正确的平衡。

我们正在创建新冠肺炎数据的地理表示,因此最起码,我们需要地理编码坐标和我们要显示的每条记录的确诊病例数。为了使数据更容易使用,我们应该包括位置信息,如显示在地图上的县或省,以及州和国家,以提高搜索的相关性。

下面是我们用于 CSV 平面文件摄取的转换代码,同样使用了pandas:

  covid_records = []
  for index, row in df.iterrows():
    # Skip locations w/o coordinates
    if pandas.isna(row['Lat']):
      print('Skipping {}: No geocode'.format(row['Combined_Key']))
    else:
      covid_record = {}
      covid_geocode = {}
      print(row['Combined_Key'])
      covid_record['`objectId`'] = row['Combined_Key']
      # Let's not use the combined key for US counties, instead let's use county and state  
      if pandas.isna(row['Admin2']):
        covid_record['location'] = row['Combined_Key']
      else:
        covid_record['location'] = row['Admin2'] + ', ' + row['Province_State']
      covid_record['country'] = row['Country_Region']
      covid_record['confirmed_cases'] = int(row['Confirmed'])
      covid_geocode['lat'] = row['Lat']
      covid_geocode['lng'] = row['Long_']
      covid_record['_geoloc'] = covid_geocode
      covid_records.append(covid_record)

摄取代码在所有摄取模式中保持相当一致。这是有意义的,因为它们都继承了作为根源文件的 CSV 文件的形状。下面是我们的 MongoDB 源代码的相同代码:

  covid_records = []
  for row in response.json():
    # Unassigned and Unknown records are alread scrubbed in this DB
    # Skip 'US' and 'Canada' since they have incomplete data
    # and locations w/o coordinates
    if row['combined_name'] != 'US' and row['combined_name'] != 'Canada' and 'loc' in row:
      covid_record = {}
      covid_geocode = {}
      print(row['combined_name'])
      covid_record['`objectId`'] = row['combined_name']
      # Let's not use the combined key for US counties, instead let's use county and state  
      if 'county' in row:
        covid_record['location'] = row['county'] + ', ' + row['state']
      else:
        covid_record['location'] = row['combined_name']
      covid_record['country'] = row['country']
      covid_record['confirmed_cases'] = row['confirmed']
      covid_geocode['lat'] = row['loc']['coordinates'][1]
      covid_geocode['lng'] = row['loc']['coordinates'][0]
      covid_record['_geoloc'] = covid_geocode
      covid_records.append(covid_record)
    else:
      print('Skipping {}: No geocode'.format(row['combined_name']))

在这两种情况下,我们都只剩下一个带有搜索和发现所需属性的规范化 Python 字典。

建筑节令

最后一步是将我们的规范化数据发送到 Algolia 搜索 API。此时,代码是使用 Python SDK 的样板文件:

  client = SearchClient.create(os.getenv('APP_ID'), os.getenv('API_KEY'))
  index = client.init_index(os.getenv('ALGOLIA_INDEX_NAME'))
  index.clear_objects()
  index.save_objects(covid_records)

这段代码清除所有现有记录,并使用最新数据重建索引。通过使用 Python 客户端与 Algolia API 进行交互,我们不必担心记录批处理和 API 重试之类的事情,从而减少了这里所需的代码量。它还确保零停机时间

大多数索引默认值对于这个用例来说都很好。我想做的唯一改变是将我们的可搜索属性限制为countrylocation,并根据案例数量对结果进行降序排列。高病例数倾向于映射到大型人口中心,这使得我们缩小地图时数据更有用。

以下是我的索引配置片段:

{
...
  "searchableAttributes": ["unordered(country)", "unordered(location)"],
  "ranking": ["typo", "geo", "words", "filters", "proximity", "attribute", "exact", "custom"],
  "customRanking": ["desc(confirmed_cases)"],
...
}

下一步步骤

在最初的数据接收之后,我们还需要决定如何随着底层数据的变化来更新我们的索引。根据我们启动更新和修改索引的方式,我们可以遵循许多模式。

重建我们的索引

因为我们的新冠肺炎数据集有固定数量的记录,所以每隔几个小时或一天几次清除和重建索引并不是特别繁重。我们可以使用预定的无服务器函数或在构建过程中嵌入我们的脚本,以固定的时间间隔来完成这项工作。如果我们想要更接近实时更新,我们可以在新冠肺炎回购协议上设置一个 GitHub 动作,每当我们合并一个新的 PR 时触发我们的索引重建。

生产数据的原子重建

对于较大的生产索引,我们希望避免索引重建时的停机时间或更新失败的可能性。出于这个原因,我们将使用替换所有对象方法来执行原子重新索引。这种方法不是就地重建索引,而是创建一个新的索引,并且只在保存所有记录后进行切换,从而减少了停机时间,并确保操作实际上是原子性的。

增量更新

有时,对单个记录甚至单个数据字段执行增量更新比重建整个索引更有意义。例如,如果我们在一段时间内跟踪确诊病例,我们将需要考虑历史数据的偶尔更新。没有必要为一个小的数据变化重建整个索引。使用 webhook 订阅或通过直接监控文件来监控更改更有意义。然后,随着数据的变化,我们可以批量增加或更新记录。在这种模式中,惟一的objectId对于在更新期间引用现有记录变得至关重要。

建筑前端

现在我们有了索引,我们可以专注于构建我们的前端。Algolia React InstantSearch 库中的地理搜索小部件让我们可以使用谷歌地图相当轻松地构建一个前端。您可以先睹为快回购中的,但是我们将把它留到以后再实现。

在我们的开源代码交换平台上查看相关解决方案。

用 Algolia 构建 GitHub 问题推荐机器人

原文:https://www.algolia.com/blog/engineering/building-a-github-issue-recommendation-bot-with-algolia/

GitHub 问题是静态内容。如果他们不必如此呢?

当我们(DevRels Chuck Meyer 和 Bryan Robinson)发现 Dev.to 正在举办一个 GitHub Actions 黑客马拉松时,我们知道我们需要尝试一下。

我们知道,我们希望找到一个有用的工具,将 Algolia 融入到行动中。对于承担什么样的项目有明显的想法。我们想通了索引内容、产品或降价的通常做法。它们都会对网站创建者有所帮助。但是,它们对开源维护者有帮助吗?大概?

我们如何改善他们的整体工作流程?

然后我们突然想到:如果我们能为常见问题提供推荐问题会怎么样?我们能减轻维护人员回答类似问题的负担吗?在大型存储库中,有多少问题作为“重复”关闭?Algolia 能为问题创建者提供一个相关的、有用的问题列表吗?

剧透:是的,完全正确!

工作流结构

当开发人员向存储库添加问题时,我们需要执行三个步骤。

首先,我们需要搜索相关问题的 Algolia 索引。然后,我们将这些结果捆绑到 Markdown 中,并将其传递给一个操作,以创建对初始问题的评论。最后,我们需要将该问题放入我们的索引中,以便将来进行搜索。

这些步骤中的每一步都需要一个动作。阿尔戈利亚特有的动作,我们需要从头开始创造。评论编写动作,我们决定使用令人惊叹的 Peter Evan 的创建或更新评论动作——事实证明,GitHub 在他们的许多关于动作的文档中都使用了这个动作。

让我们开始新的行动。

执行搜索查询

我们工作流程的第一步是向 Algolia 发送一个搜索查询。我们为此创建了一个自定义操作获取 Algolia 问题记录

要使用这个动作,我们需要向它发送四个必需的输入(和可选的第五个)。

  • app_id:您的 Algolia 账户中应用程序的 ID。这最好作为一个秘密存储在您的存储库中
  • api_key:对你的 Algolia 应用中的索引具有搜索权限的 API 键。这是最好的储存在一个秘密在您的储存库。
  • index_name:要搜索的 Algolia 索引的名称。为了保持一致性,我们推荐使用github.event.repository.name变量。
  • issue_title:用github.event.issue.title找到的煽动性问题的标题。
  • max_results:(可选)返回评论的结果数(默认为 3)

我们获取这些变量,并基于煽动性问题的标题执行similarQuery搜索。然后我们在 Markdown(GitHub 注释所需的格式)中创建一个注释体和一个条目列表。该输出被传递给 Peter Evans 的创建或更新评论操作

const { inspect } = require('util');
const core = require('@actions/core');
const algoliasearch = require('algoliasearch');

async function run() {
  try {
    const inputs = {
      appId: core.getInput('app_id'),
      apiKey: core.getInput('api_key'),
      indexName: core.getInput('index_name'),
      issueTitle: core.getInput('issue_title'),
      maxResults: core.getInput('max_results'),
    };
    core.info(`Inputs: ${inspect(inputs)}`);

    if (!inputs.appId && !inputs.apiKey && !inputs.indexName) {
      core.setFailed('Missing one or more of Algolia app id, API key, or index name.');
      return;
    }

    inputs.maxResults = inputs.maxResults || 3;

    const client = algoliasearch(inputs.appId, inputs.apiKey);
    const index = client.initIndex(inputs.indexName);

    index.search('', { 
        similarQuery: inputs.issueTitle,
        hitsPerPage: inputs.maxResults
      }).then(({hits}) => {
      core.info(`Searching for record`);
      core.info(`Hits: ${inspect(hits)}`);
      const message = `## Other issues similar to this one:\n${hits.map(hit => `* [${hit.title}](${hit.url})`).join('\n')}`
      const listItems = `${hits.map(hit => `* [${hit.title}](${hit.url})`).join('\n')}\n`
      core.info(message)
      core.info(listItems)
      core.setOutput('comment_body', message);
      core.setOutput('issues_list', listItems);
    })
      .catch(err => {
        core.setFailed(err.message);
      }
    );
  } catch (error) {
    core.debug(inspect(error));
    core.setFailed(error.message);
    if (error.message == 'Resource not accessible by integration') {
      core.error(`See this action's readme for details about this error`);
    }
  }
}

run();

将问题添加到您的 Algolia 索引中

对于我们工作流程的最后一步,我们将这个新问题添加到 Algolia 索引中,以供将来搜索。我们为此创建了另一个 GitHub 动作:创建或更新 Algolia 索引记录。这个动作自动地直接向索引添加/更新记录,而不是从 JSON 文件中写入/读取。这在我们处理关于回购的元数据(问题、拉请求、评论)而不是为应用程序本身构建索引的情况下是有意义的。

要使用这个动作,我们需要创建一个 Algolia API 键),它具有在我们的索引中添加/更新记录的权限。此外,我们需要获得许可,才能为回购创建新的指数。否则,我们必须提前创建它,并将索引名硬编码到我们的配置中。

除了新的 API 键,我们还需要一些其他输入来使用该操作:

  • 根据上面的操作,你应该已经把它作为一个秘密保存在你的存储库中了
  • api_key:这是允许将记录保存到索引的新密钥。这是最好的储存在一个秘密在您的储存库。
  • index_name:添加/更新此记录的 Algolia 索引的名称。为了保持一致性,我们推荐使用github.event.repository.name变量。
  • record:表示要添加到索引中的 JSON 记录的字符串。

如果 API 键有权限,该操作将为存储库创建一个索引。我们将添加问题标题和 URL(链接回来)作为record。在我们的工作流程中,这是一个多行字符串,但必须是有效的 JSON,动作才能工作(详情请参见准备数据)。

我们接受所有这些输入,并通过 Algolia API 执行一个saveObject调用。我们使用issue ID作为索引中的objectID。如果我们以后添加工作流来更新或删除事件,这使得将记录与此问题联系起来变得容易。

const { inspect } = require('util');
const core = require('@actions/core');
const algoliasearch = require('algoliasearch');

async function run() {
  try {
    const inputs = {
      appId: core.getInput('app_id'),
      apiKey: core.getInput('api_key'),
      indexName: core.getInput('index_name'),
      record: core.getInput('record'),
    };
    core.debug(`Inputs: ${inspect(inputs)}`);

    if (!inputs.appId && !inputs.apiKey && !inputs.indexName) {
      core.setFailed('Missing one or more of Algolia app id, API key, or index name.');
      return;
    }

    core.info(`Writing record to index ${inputs.indexName}`)
    const client = algoliasearch(inputs.appId, inputs.apiKey);
    const index = client.initIndex(inputs.indexName);

    index.saveObject(JSON.parse(inputs.record), {'autoGenerateObjectIDIfNotExist': true})
      .then(({ objectID }) => {
        core.setOutput('object_id', objectID);
        core.info(
          `Created record in index ${inputs.indexName} with objectID ${objectID}.`
        );
      })
      .catch((err) => {
        core.setFailed(`Failed to save object: ${err}`);
      });

  } catch (error) {
    core.debug(inspect(error));
    core.setFailed(error.message);
    if (error.message == 'Resource not accessible by integration') {
      core.error(`See this action's readme for details about this error`);
    }
  }
}

run();

接下来,我们将这两个新操作与现有的评论创建操作组合在一起,以构建我们的工作流。

完整的工作流程文件

为了完成这项工作,我们需要一个job和三个steps。每个步骤都将使用这些操作之一。

name: related-issues
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  issues:
    types: 
      - opened

jobs:
  get-related-issues:
    permissions: 
      # Gives the workflow write permissions only in issues
      issues: write
    runs-on: ubuntu-latest
    steps:
      # Performs a search in an Algolia Index based on Issue Title
      # The Index should have historical Issues
      # Returns two outputs:
      # issues_list: a markdown list of issues
      # comment_body: a generic comment body with the list of issues
      - id: search
        name: Search based on issue title
        uses: brob/algolia-issue-search@v1.0
        with: 
          # Requires an Algolia account with an App ID and write key
          app_id: ${{ secrets.ALGOLIA_APP_ID }}
          api_key: ${{ secrets.ALGOLIA_API_KEY }}
          index_name: ${{ github.event.repository.name }}
          issue_title: ${{ github.event.issue.title }}
      - name: Create or Update Comment
        uses: peter-evans/create-or-update-comment@v1.4.5
        with:
          # GITHUB_TOKEN or a repo scoped PAT.
          token: ${{ github.token }}
          # The number of the issue or pull request in which to create a comment.
          issue-number: ${{ github.event.issue.number }}
          # The comment body. Can use either issues_list or comment_body
          body: |
            # While you wait, here are related issues:
            ${{ steps.search.outputs.issues_list }}
            Thank you so much! We'll be with you shortly!
      # An Action to create a record in an Algolia Index
      # This is a generic Action and can be used outside of this workflow
      - name: Add Algolia Record
        id: ingest
        uses: chuckmeyer/add-algolia-record@v1
        with:
          app_id: ${{ secrets.ALGOLIA_APP_ID }}
          api_key: ${{ secrets.ALGOLIA_API_KEY }}
          index_name: ${{ github.event.repository.name }}
          # Record needs to be a string of JSON
          record: |
            {
              "title": "${{ github.event.issue.title }}", 
              "url": "${{ github.event.issue.html_url }}", 
              "labels": "${{ github.event.issue.labels }}",
              "objectID": "${{ github.event.issue.number }}"
            }

下一步

我们希望这对维护者有所帮助,但我们也希望它能启发其他人找到更好的方法来建议静态领域的内容,如 GitHub 问题。

如果您想体验完整的工作流程,可以在这个资源库中查看。在 GitHub marketplace 中,搜索和摄取操作都是可用的。

搜索和发现可以成为 GitHub 及其他自动化工作流程中有趣的一部分。在我们的开源代码交换平台上查看相关解决方案。

使用 Algolia、Mapbox 和 Twilio 在 React 中构建商店定位器-第 1 部分

原文:https://www.algolia.com/blog/engineering/building-a-store-locator-in-react-using-algolia-mapbox-and-twilio-part-1/

这是我们关于构建商店定位器的 3 部分实时编码系列的第一篇文章。请务必查看 构建商店定位器-第 2 部分构建商店定位器-第 3 部分

如今,电子商务购物者期望便利,希望现实世界和网络世界融合,允许他们通过任何渠道开展业务。这就是商店定位器的用途,这样用户就可以:

  • 在线搜索产品,然后在店内购买
  • 亲自浏览和比较产品,然后在线购买
  • 在网上购物并购买产品,然后亲自提货
  • 亲自退还之前购买的物品,而不是将它们寄回

尽管如此,我们发现太多的网站没有为用户提供一种优雅的方式来找到他们的“最近的商店”,无论是在线测试或购买,还是在线提货。

学习如何建立商店定位器

构建商店定位器可能看起来很复杂,因为它需要实施地理搜索、地址/兴趣点(POI)搜索,并在地图上显示结果。为了让每个人都尽可能容易地跟上,我们决定在三篇博客文章之后进行一系列的三次现场编码会议。在这些事件中,我们将使用:在 React 中创建一个响应式 商店定位器

  • 的地理搜索功能;
  • 地图框 用于显示地图并搜索位置和兴趣点
  • Twilio 用于在订单准备就绪后发送文本
  • 颖云 为主持

一切都被包装使用 React v17、React instant search,以及AutocompleteUI 库,在很短的时间内构建现代化的搜索和发现体验。

本指南分为三个部分

  • 第 1 部分:简介和数据索引
    • 简介
    • 创建必要的账户
    • 在 Algolia 中推送数据和索引
    • 脚手架工程
  • 第 2 部分:使用 Algolia 和 Mapbox 实现地理搜索
  • 第三部分:点击&收集逻辑实现使用 Twilio ( 注册七七届)

Preview of the finished application

为什么零售商应该关心提供一个具有 BOPIS 功能的商店定位器?

新型冠状病毒疫情疫情带来了许多挑战。随着大多数国家的宵禁和封锁,品牌和零售商不得不重新定义自己以及他们与客户互动的方式。

面临这些挑战的一个新兴趋势是 BOPIS,它是“在线购买,店内提货”的首字母缩写,也称为“点击收集”BOPIS 已经在苹果或宜家等网站上出现多年,已经成为消费者在线购买商品的重要方式,然后步行/骑自行车/开车到最近的商店取货。

用户在订购过程中选择最近的商店,以及他们想要提货、在线支付的时间,瞧!

以下是苹果和宜家的一些例子:

T3

https://res.cloudinary.com/hilnmyskv/image/upload/v1626874013/blogposts/store_locator_2021_apple.webm

https://res.cloudinary.com/hilnmyskv/image/upload/v1626874016/blogposts/store_locator_2021_ikea.mp4

https://res.cloudinary.com/hilnmyskv/image/upload/v1626874016/blogposts/store_locator_2021_ikea.webm

指南

在这篇博文中,我们将概述实时编码过程中的主要步骤。

https://www.youtube.com/embed/KRzrHu_XVVY

视频

1。创建必要的账户

我们将使用 Algolia、Mapbox 和 Twilio 作为服务提供商。第一步,我们只需要创建 Algolia 和 Clever-cloud(我们的云提供商)账户。在接下来的课程中,我们将创建其他帐户。

**A .颖云

聪明云是一个 IT 自动化平台。他们管理所有的操作方面,而你专注于编写和推进你的代码。它处理自动化任务,使您的应用程序永远不会停机:监控、备份、扩展、安全更新、蓝/绿部署、CI/CD 工具集成等等。

让我们在clever-cloud.com上创建我们的账户。

一旦我们填好个人信息,就可以开始了。我们点击 个人空间创建……一个全新的 app 。我们选择 Node.js 运行时,因为我们将用 React 和 Typescript 编写我们的应用程序。

然后,我们选择我们的数据中心,添加我们的 SSH 密钥(推送时需要,如果您还没有链接您的 GitHub 帐户),并让环境变量保持原样。我们不需要这个项目的插件,但正如你所见,他们支持大多数技术栈(Postgres,Mongo,Redis,Apache Pulsar,等等。

现在,我们可以创建一个 Algolia 账户了。

b . Algolia

Algolia 为动态体验提供 API 平台,使组织能够预测意图并交付结果。由于 Algolia 中的 API 优先方法,开发人员和业务团队可以显示相关内容,以满足即时结果的需求。Algolia 让您轻松构建和优化体验,从而增强在线互动,提高转化率,并丰富客户的终身价值。

现在,我们前往【Algolia.com】创建我们的自由账户,它允许高达。每月 10,000 次搜索请求。注册后,我们将创建应用程序并索引我们的数据:

C .其他服务

**记住,我们需要一个地图箱和一个 Twilio 账户。

您可以自己创建它们,或者等到我们需要时再创建。这取决于你。

2。在 Algolia 中推送数据和索引

现在我们已经设置了我们的 Algolia 帐户,我们将通过 索引我们希望在应用程序中显示的数据 来启动该项目。我们已经在我们的 GitHub 存储库中准备了这些数据(https://GitHub . com/algolia-samples/store-locator-with-algolia-map box-twilio/tree/master/dataset),其中包含一个巨大的 JSON 文件,包含所有斯潘塞和威廉的商店位置。

我们点击 Raw (在文件名的右边),将文档保存到我们的桌面。我们只需要做一次。

然后我们去我们的 Algolia 账号,去 索引>配置 在侧边栏:

我们点击 创建索引 并将其命名为livecoding-stores

创建完成后,屏幕右侧会出现一个侧边栏。我们单击上传记录,然后拖放从 回购中获得的 JSON。

创建索引很快——我们的 3000 家商店只需几秒钟就可以搜索到。 漂亮整洁!

索引我们的数据后,我们需要配置我们的索引来告诉引擎:

  • 您希望使哪些 属性可搜索 ,这样就不会在所有属性中进行搜索(默认行为)
  • 将哪些业务相关属性用于自定义排名
  • 添加哪些属性作为 刻面

在工具条上,我们点击 配置 ,然后点击按钮‘添加可搜索属性’:

我们将添加“城市”、“国家”和“姓名”作为可搜索属性。

然后我们向下滚动选择 过滤和刻面>刻面

在这里,我们将添加“国家”和“服务”作为属性,并将这些属性声明为方面,然后我们单击 查看并保存设置。

Algolia 旨在返回最相关的结果,将文本相关性与业务相关性相结合。对于文本部分,我们已经配置了可搜索的属性,还有更多的属性,但已经足够了。对于业务相关性,每个人都需要提供一个属性来最好地反映每个被索引的记录的受欢迎程度:在我们的例子中,我们有一个名为“受欢迎程度”的属性,我们知道“值越高,记录越受欢迎”。- >为了对其进行配置,我们使用了名为“CustomRanking”的设置。

为了检查一切是否正常,我们转到屏幕顶部,点击 浏览。 我们点击小放大镜,输入“法国”。

我们应该看到一些成果。 现在我们准备开始编码了!

注意 :我们刚刚设置了开始使用的最低要求,但是请随意访问 Algolia 文档 以了解更多关于配置索引和实现最佳相关性的最佳实践:

3。资助这个项目

“开发者可以用文本编辑器改变世界”
杰夫·劳森,Twilio 首席执行官

对于这个项目,我们决定使用 React with Typescript 和 Tailwind CSS 来构建我们的应用程序。你可能已经熟悉 React,但可能不太熟悉**。**

**

Tailwind 是一个现代的 UI 库,它提供了数百个 CSS 类,你可以在任何 UI 框架/库中使用。它帮助您构建一个复杂但连贯的 web UI,比 Bootstrap / jQuery 框架更灵活。

因此,我们打开一个终端,为我们的项目安装必要的基础。

然后我们安装 Tailwind CSS 及其所需的依赖项。生产中不需要顺风,所以将其作为开发依赖项添加就足够了。

由于我们不能用 create react app、 更改 PostCSS 配置,我们需要使用 CRACO 工具覆盖它的配置(Create React App Configuration Override)。在使用 yarn build 脚本生成包之后,我们还将添加包 serve 用于服务生产包(见下文)。

现在我们需要将 craco 命令添加到 package.json 文件中的“测试”、“构建”和“开发”脚本中。

接下来,我们需要为 CRACO 创建一个配置文件。我们在项目的根目录下创建一个名为craco . config . js的文件,并将下面的代码片段添加到这个文件中:

这允许我们使用 Tailwind CSS 和 autoprefixer 作为 PostCSS 插件。

现在我们需要配置顺风。运行这个命令:

这将创建一个tailwind . config . js文件。从这里,我们只需要编辑第 2 行“purge”命令:

purge: ['./src/**/*.{js,jsx,ts,tsx}', './public/index.html']

这是做什么的?

Tailwind CSS 在开发模式下包含了数百个 CSS 类,让设计你的风格变得快速简单。这使得开发包在设计上很大。在生产中,您希望从 CSS 中减少任何未使用的类,以尽可能减小大小。Tailwind CSS 检查所有与 purge 选项中的模式匹配的文件,并从生产版本中删除任何未使用的 CSS 类。

最后,我们打开 IDE,编辑index . CSS将这 3 行添加到文件的顶部。

然后我们提交并推送我们的代码。我们准备好下一次直播了!

我们见过什么

在第 1 部分中,我们有:

  • 了解我们将在这 3 次现场编码中共同构建的内容()。会话
  • 创造了聪明的-云和阿尔戈利亚的账户
  • 设置和配置我们的 Algolia 的索引
  • 用 Create React App、CRACO 和 TailwindCSS 搭建我们的项目

代码在 GitHub 的“live coding-part 1”分支中

下一步是什么

现在我们已经建立了项目,并使我们的商店数据集可以使用 Algolia 进行搜索,在下一节课中,我们将重点关注: 实施 Algolia 地理搜索,并使用 Mapbox GL 在地图上显示结果。阅读第二部******

使用 Algolia、Mapbox 和 Twilio 在 React 中构建商店定位器——第 2 部分

原文:https://www.algolia.com/blog/engineering/building-a-store-locator-in-react-using-algolia-mapbox-and-twilio-part-2/

这是我们关于构建商店定位器的 3 部分实时编码系列的第二篇文章。请务必查看 构建商店定位器-第 1 部分构建商店定位器-第 3 部分

如今,电子商务购物者期望便利,希望现实世界和网络世界融合,允许他们通过任何渠道开展业务。这就是商店定位器的用途,这样用户就可以:

  • 在线搜索产品,然后在店内购买
  • 亲自浏览和比较产品,然后在线购买
  • 在线购物和购买产品,然后亲自提货
  • 亲自退还之前购买的物品,而不是将它们寄回

尽管如此,我们观察到太多的网站没有为用户提供一种优雅的方式来找到他们的“最近的商店”,无论是在线测试或购买,还是在线购买。

构建商店定位器似乎很复杂,因为它需要实现地理搜索、地址/兴趣点(POI)搜索,并在地图上显示结果。为了让每个人都尽可能容易地跟上,我们决定在三篇博客文章之后进行一系列的三次现场编码会议。在这些事件中,我们决定在 React 中创建一个响应式商店定位器,使用:

  • Algolia 的地理搜索功能;
  • 地图框用于显示地图和搜索位置和兴趣点
  • Twilio 用于在订单准备就绪后发送文本
  • 颖云主持

使用 React v17、 React InstantSearchAutocomplete UI 库包装一切,在很短的时间内构建现代搜索和发现体验。

https://www.youtube.com/embed/jyntg6hkKMs

视频

注意:在第 1 部分中,我们创建了所有必需的帐户(Clever cloud 和 Algolia),我们索引了数据,并配置了 Algolia 索引。阅读第 1 部分

添加地理搜索功能

为了快速找到距离我们当前位置或给定地址输入最近的商店,我们将利用 Algolia 地理搜索功能,以及 React InstantSearch ,在列表视图和地图视图上显示找到的商店(使用 Mapbox GL)。

注:你可以在项目的 Github 资源库中找到第 1 部分末尾获得的代码。

Algolia 的即时搜索快速概述

React InstantSearch 是 React 的一个开源、生产就绪的 UI 库(也有 VanillaJS、Vue、Angular、Swift 和 Kotlin 版本),它允许您在前端应用程序中快速构建搜索界面。

它的目标是通过提供一个完整的搜索生态系统来帮助你尽可能顺利地实现令人敬畏的搜索体验。InstantSearch 通过提供称为“小部件”的前端 UI 组件解决了这一巨大目标的重要部分,您可以将这些组件组装到独特的搜索界面中,例如:

在我们的例子中,我们将利用一些现有的小部件,如infini hitsRefinementList ,我们将构建一个定制的小部件,以便在 Mapbox 支持的地图上显示结果。为此,我们将扩展默认的地理搜索小部件,它默认使用谷歌地图,但由于有了 connectGeoSearch 连接器,它可以被扩展。

注意:默认情况下,React InstantSearch 与服务器端渲染兼容,并具有完全路由能力

向我们的应用添加 React InstantSearch

要将 InstantSearch 添加到我们的应用程序中,让我们安装所需的包。

yarn add algoliasearch react-instantsearch-dom

为了类型脚本兼容性和 IDE 支持,我们还将添加 react-instantsearch 类型

yarn add -D @types/react-instantsearch

对于本指南的这一部分,这就是我们需要的全部内容。

我们先从 Algolia 的仪表盘上抓取一些信息。

在 Algolia 仪表盘上,点击平台图标(侧栏中的最后一个图标)并选择 API 密钥以复制您的仅搜索 API 密钥和应用 ID。

现在,让我们创建一个名为.local.env的文件。我们将把环境变量存储在这个文件中。这些变量将在构建时注入到我们的应用程序中,所以不要忘记在创建这个文件后重启本地开发服务器。

将以下内容添加到.local.env文件中:

REACT_APP_ALGOLIA_APP_ID=”myAppId”
REACT_APP_ALGOLIA_API_KEY=”xxxxx”
REACT_APP_ALGOLIA_INDEX_NAME=”myIndiceName”

注意:如果环境变量对你来说是新的,有很多非常好的资源,比如:我的朋友张秀坤 Twilio 的首席开发人员布道者——写的《在 Node.js 中使用环境变量》,可以帮助你快速了解这个主题。另一个很好的例子集中在在 Create React App 应用程序中添加自定义环境变量

创建 Algolia 客户端实例

现在我们已经安装了所需的包,让我们将 React InstantSearch 添加到我们的应用程序中。第一步是在我们文件的顶部导入 InstantSearch。

import {
  InstantSearch,
} from 'react-instantsearch-dom';

然后,我们可以将即时搜索组件添加到代码中:

InstantSearch init code

如您所见,它需要两个参数:

  • indexName 是您放入 Algolia 仪表盘的索引名称。
  • searchClient 是 AlgoliaSearch 的一个实例,Algolia Search API 的 JavaScript 客户端库,它将执行所有的请求。由于我们希望尽可能简单,我们将为这个实例添加一个单独的文件(此外,我们将在第三个视频中需要它,并且保持事物的分离在软件工程中总是一个好的实践)。

src/lib/algolia client . ts

import algoliaSearch from 'algoliasearch';

const indexName = process.env.REACT_APP_ALGOLIA_INDEX_NAME;
const searchClient = algoliaSearch( process.env.REACT_APP_ALGOLIA_APP_ID as string, process.env.REACT_APP_ALGOLIA_API_KEY as string );

export { indexName, searchClient };

现在我们有了我们的客户机,是时候在我们的 InstantSearch 实例中使用它了。

将我们的第一个小部件添加到即时搜索

InstantSearch init code

我们将使用小部件来显示 Algolia 返回的结果。

Hits组件只接受一个属性:hitComponent,一个带有作为参数的函数,它应该返回 JSX。这个 JSX 将在应用程序中呈现。

<Hits<Hit> hitComponent={
({ hit }) => (
      	<StoreComponent
           	key={hit.objectID}
                onClick={(hit) => handleClick(hit)}
                hit={hit}
                currentStore={currentStoreCoordinates}
            />
      )}/>

你可以返回任何你想要的 JSX,但是我们已经创建了自己的组件,它只不过是一个带有一点 CSS 的div

让我们更深入地了解一下它的道具:

  • 键属性用于帮助 React 识别它必须呈现的循环元素。,如果您对 React 不太熟悉,请查看关于列表和键的文档——React:
  • onClick 属性用于处理项目上的鼠标事件。;
  • 点击道具用于填充组件。
  • 最后, currentStore 属性用于让应用程序知道选择了哪个商店。通过比较两个 LngLat 坐标的比较位置,将 pin 更改为不同的颜色(在我们的例子中)会很有用。

src/lib/compare position . ts

export const comparePosition = (
  position1: [number, number],
  position2: [number, number] | null
): boolean => {
  return position2
    ? position1[0] === position2[0] && position1[1] === position2[1]
    : false;
};

现在我们已经创建了这个组件,我们应该会在我们的应用程序旁边看到一个漂亮的斯潘塞商店列表!

https://res.cloudinary.com/hilnmyskv/image/upload/v1626774743/blogposts/store_locator_2021_list_preview.mp4

https://res.cloudinary.com/hilnmyskv/image/upload/v1626774743/blogposts/store_locator_2021_list_preview.webm

但事实是:它并不真正可用。当然,它做到了我们要求的(按受欢迎程度排序,但由于我住在法国北部(靠近里尔和比利时——美味的巧克力和上好的啤酒),我绝对不关心亚特兰大的商店。

因此,让我们添加地理搜索功能,这样它就可以显示我周围最受欢迎的商店!

添加地理搜索

默认情况下,Algolia 提供了执行地理搜索的可能性,无需传递任何纬度/经度,但仍会返回最近的命中结果。怎么会?它依赖于你用来调用 Algolia API 的 IP 地址。注意:对于欧盟的人,从 2021 年 7 月起,IP 地址不被视为 PII(个人身份信息,法语中“Donnée à caractère personnelle”的 DCP ),因为它不精确定位用户,这意味着不需要警告用户您正在使用它来告诉 InstantSearch 我们想要使用“aroundLatLngViaIP ”,我们使用配置组件

InstantSearch ConfigureComponent注意:<配置/ >组件可以接受任何搜索参数。我们将在下一集看到更多。

现在,您会看到列表显示了您所在位置附近的商店。最简单的实验方法是通过 VPN。

|

与我的常规连接(🇫🇷)

|

用 VPN 连接到一个希腊服务器(🇬🇷)(太阳来了🎵)

|

现在我们有了附近商店的列表,让我们添加一个漂亮的细化列表来过滤服务类型。

Hits 小部件不同, RefinementList 组件只有一个属性,用于传递我们想要使用的方面属性的名称,这是我们在第 1 部分的中的 Algolia 仪表盘中配置的。

InstantSearch Refinement list config

细化列表的样式

Algolia 在一个单独的包中提供了一个默认主题。要使用它,您需要添加 instantsearch.css 样式表,但是在我们的示例中,我想使用***@ apply***指令与您一起探索一个定制的 Tailwindcss 主题,该指令允许您使用 TailwindCSS 的预定义类名来设计任何 CSS 选择器的样式,如下所示:

.ais-RefinementList ul {
  @apply flex font-normal text-sm flex-wrap gap-2 my-4;
}

.ais-RefinementList ul li {
  @apply rounded bg-purple-200 px-2 py-1;
}

.ais-RefinementList ul input {
  display: none;
}

.ais-RefinementList-labelText {
  @apply font-medium text-purple-900;
}

.ais-RefinementList-count {
  @apply font-black text-white p-1 px-1.5 bg-purple-400 rounded-full;
}

.ais-RefinementList-item--selected {
  @apply border-2 border-purple-800;
}

.aa-Panel mark {
  color: #5468ff;
  background: none;
}

一旦添加了这些样式,细化列表小部件应该大致如下所示:

https://res.cloudinary.com/hilnmyskv/image/upload/v1626861899/blogposts/store_locator_2021_refinementlist.mp4

https://res.cloudinary.com/hilnmyskv/image/upload/v1626861899/blogposts/store_locator_2021_refinementlist.webm

使用地图框在地图上显示商店

如果你已经完成了,这个应用程序在这个阶段应该是这样的:

一个页眉,一个侧边的列表,和空白的空间。现在是时候用一张漂亮的地图来填满这个空间了!

选择合适的地图提供商

有几十个地图提供商,其中一些非常有名:

  • 谷歌地图,
  • 苹果计划(从去年开始有一个网络框架)
  • 地图框(我们将使用的那个)
  • (由诺基亚和戴姆勒领导的财团——梅赛德斯-奔驰、斯玛特、克莱斯勒……)
  • JawgMaps
  • 和传单(开源)

默认情况下,Algolia 的 React InstantSearch 库内置了一个用于谷歌地图的 wid get。不过,为了向您展示如何集成任何其他地图提供商,我们将使用Mapbox.com构建我们新的地理搜索小部件,因为它们提供强大的 React 和 TypeScript 支持以及全球地图覆盖。

在我们的环境中,Mapbox 有一个巨大的领域优势:一个我们将在本系列的第三集中使用的非常完善的 API,加上他们使用开源堆栈的事实:

  • 渲染引擎的传单. js
  • OpenStreetMap (OSM)获取数据
  • 用于设计的卡通

所以从 Mapbox 切换到另一个提供商应该不会很痛苦。

在创建了你的地图箱账户后,你应该会看到类似的东西。复制您的Default Public Token,并将其复制到您的 .local.env 文件中:

REACT_APP_MAPBOX_TOKEN=pk.your_token_here

现在,让我们通过在终端中键入来安装 Mapbox 包装器

yarn add react-mapbox-gl mapbox-gl

接下来,我们在组件下创建一个 MapComponent 目录,并添加一个 MapComponent.tsx 文件。

导入所需的包,并搭建类组件:

import React, { Component } from 'react';
import ReactMapboxGl, { ZoomControl, Marker } from 'react-mapbox-gl';
import { Map } from 'mapbox-gl';

interface IMapState {
  lat: number;
  lng: number;
  zoom: number;
}

interface IMapProps {}

// Required to init the map
const ReactMap = ReactMapboxGl({
  accessToken: process.env.REACT_APP_MAPBOX_TOKEN as string,
});

class MapComponent extends Component<IMapProps, IMapState> {
  map: any;

  state = {
    lat: 30.5,
    lng: 50.5,
    zoom: 9,
  };

  render() {
    return (
      <div className={'h-full w-full relative'}>
        <div className={'h-full w-full'}>
          <ReactMap
            ref={(e) => {
              this.map = e.state.map;
            }}
            {/* This is the style, we’ll use the light one but you can try street-v10 */}
            style="mapbox://styles/mapbox/light-v10"
            containerStyle={{
              height: '100%',
              width: '100%',
              position: 'relative',
              display: 'block',
           }}
          >
            <>
           	//This adds a little +/- control to zoom in / out
      <ZoomControl position={'bottom-right'} />
            </>
          </ReactMap>
        </div>
      </div>
    );
  }
}

export default MapComponent;

由于 react-mapbox-gl,我们刚刚添加了一个全尺寸地图。

通过在 App.tsx 中注入您新创建的组件,您应该会看到类似这样的内容,所以现在是添加标记的时候了!

呃…不!那就太简单了。要做到这一点,您需要将它添加到您的 craco.config.js 文件中,该文件是我们上周创建的,用于处理 PostCSS 插件。

styles:{
//...postCSS stuff here
},
babel: {
    loaderOptions: {
      ignore: ['./node_modules/mapbox-gl/dist/mapbox-gl.js'],
    },
  },

npm 上的 mapbox-gl 库已经被传输,所以我们需要告诉 babel(我们的传输程序)到而不是trans file map box-GL . js .

现在我们显示地图,我们需要添加它的“动态”行为。

使用 connectGeoSearch 创建自定义小部件

现在是时候将地图连接到 React InstantSearch 实例了。为此,我们将利用 connectGeoSearch,这是 React InstantSearch 中公开的一个高阶组件。

让我们导入所需的插件:

import { connectGeoSearch } from 'react-instantsearch-dom';

import type { GeoSearchProvided } from 'react-instantsearch-core';

第一个导入库本身,第二个导入 TypeScript 和 IntelliSense 所需的类型。

首先,我们将稍微更新一下我们的 MapComponent 类声明:

class MapComponent extends Component<**GeoSearchProvided & IMapProps**, IMapState>

我们将稍微改变导出组件的方式:

export default connectGeoSearch(MapComponent)

在这之后,我们的地图渲染不会有任何变化但是如果我们打开 React DevTools 并搜索我们的地图组件,就会有一些变化…

我们看到我们的 MapComponent 现在有一个包含所有 Algolia 索引记录的属性。现在,我们可以专注于在地图上显示那些标记。

让我们在状态接口中添加一个标记数组marker: [],在填充每个商店的坐标之前,我们将其初始化为一个空数组..

为了在从 Algolia 接收到新的 JSON 响应时更新显示的标记,我们将使用 React 的生命周期方法 componentWillReceiveProps ,其中我们将添加与向地图添加标记相关的逻辑。

componentWillReceiveProps(nextProps){
// Let’s grab hits from nextProps and let’s compare if the two are not empty and differents from those already in props. 	 
    const { hits } = nextProps;
    if (hits.length && hits !== this.props.hits) {

	// If so let’s grab coordinates from the hit and store them into an temp array
      const markers: [number, number][] = hits.map(
        ({ _geoloc }: { _geoloc: { lat: number; lng: number } }) => {
          return [_geoloc.lng, _geoloc.lat];
        }
      );

// Finally let’s store this in our component state, and update the map accordingly (by centering it to the first marker) We’ll check this method in a minute, you can comment it for now.
      this.setState({ markers }, () => {
        //this.centerMapOnCoordinates(this.state.markers[0]);
      });
    }
}

为了在地图上显示标记,让我们在 MapComponent 目录中创建一个组件。这一个有 1 个属性—is selected——如果商店被选中就改变标记。这是一个非常简单的组件,所以我将在这里包括它。

import React from "react";
import { ReactComponent as MarkerPin } from '../../marker.svg';
import { ReactComponent as MarkerPinSelected } from '../../marker-selected.svg';

const StoreMarker: React.FC<{isSelected: boolean}> = ({isSelected}) => {
  return isSelected ? <MarkerPinSelected className={'shadow-lg cursor-pointer'}/> : <MarkerPin className={'shadow-lg cursor-pointer'}/>;
}

export default StoreMarker

现在,让我们通过将组件包装在 MapboxGL 组件中,为组件增加一层额外的复杂性。它将负责向地图添加标记。它只需要一个道具(对于我们的例子来说,但还有一堆可用的):坐标:

…
import {Marker} from "react-mapbox-gl";

const StoreMarker: React.FC<{isSelected: boolean, coordinates: [number, number]}> = ({isSelected, coordinates}) => {
  return <Marker coordinates={coordinates}>
    {isSelected ? <MarkerPinSelected className={'shadow-lg cursor-pointer'}/> : <MarkerPin className={'shadow-lg cursor-pointer'}/>}
  </Marker>
}

现在,在 MapComponent 中,让我们“映射”我们的标记以在地图上显示它们!

MapComponent/MapComponent.tsx
<>
  {this.state.markers.map((position) => {
  return (
<StoreMarker isSelected={false} coordinates={position}/>
);
  })}
 <ZoomControl position={'bottom-right'} />
</>

我们现在应该有标记渲染在我们的地图上。

现在是时候“提炼”这个,并在给定的标记上将地图居中。但是在仔细观察 centerMapOnCoordinates 之前,让我们添加另一个生命周期方法来避免无关的渲染。在这里,我们只是检查两个命中数组是否不同,并在相反的情况下阻止渲染。

shouldComponentUpdate(nextProps: Readonly<GeoSearchProvided>): boolean {
    return nextProps.hits !== this.props.hits;
}

接下来我们来看 centerMapOnCoordinates 。这可能是本周部分中最复杂的代码。

注意:如果您想了解关于不同步骤的更多信息,请不要犹豫观看本文顶部的 livecoding。

所以让我们分开来看:

如果调用是由地图上的用户动作触发的,我们使用 isUserInterraction 状态布尔来避免进入地图。

如果不是,我们暂时将其设置为 true,并将地图集中在第一个标记上(根据我们的配置,这是视口中具有最高人气属性的商店)。

然后,我们调用钩子提供的 refine 方法,该方法允许我们基于地图边界请求 Algolia 的数据:这里是东北和西南(右上和左下)。

centerMapOnCoordinates(coordinates: [number, number]) {
    if (!this.state.isUserInteraction) {
      const { refine } = this.props;
      this.setState({ isUserInteraction: true }, () => {
        this.map.state.map.flyTo({
          essential: false,
          center: [coordinates[0], coordinates[1]],
          zoom: 7,
        });

        refine({
          northEast: this.map.state.map.getBounds().getNorthEast(),
          southWest: this.map.state.map.getBounds().getSouthWest(),
        });
      });
    }
  }

添加“随着地图移动而刷新”选项。

当我们移动地图时,这个地图组件中需要的最后一个方法将用于细化地图标记!这是一个不言自明的方法。我们已经使用了之前在它的主体中调用的所有方法。

onMapInteraction(map: Map) {
    if (this.state.userInteractionEnabled) {
      const { refine } = this.props;

      refine({
        northEast: map.getBounds().getNorthEast(),
        southWest: map.getBounds().getSouthWest(),
      });
    }
  }

这里唯一的新参数是 userInteractionEnabled 布尔值,它根据我们接下来要添加的复选框而变化!

为了处理这个问题,并使我们的代码尽可能清晰,让我们在 MapComponent/目录中创建一个新的组件。我们将再次称它为 SearchAsMoving 以保持我们的组件简单和愚蠢(KISS 方法论)。这是一个简单的 div,带有一个文本和一个input type=”checkbox”

interface ISearchAsMoving {
  checked: boolean,
  onChange: (checked: boolean) => void
}

const SearchAsMoving: React.FC<ISearchAsMoving> = ({checked, onChange}) => {
  return (
    <div>
      <input
        defaultChecked={checked}
        type={'checkbox'}
        onChange={(e) =>
          onChange(e.target.checked)
        }
      />
      Search when I move the map
    </div>
  )
}

export default SearchAsMoving

我们向这个方法传递两个属性,默认的检查状态(checked)和当我们改变复选框的状态时我们想要触发的方法。

我们现在可以将它添加到我们的地图中,在组件下,我们会很好的!

<SearchAsMoving 
    checked={this.state.userInteractionEnabled}   onChange={(userInteractionEnabled) => this.setState({userInteractionEnabled})}/>

完成后,让我们将 onMapInteraction 添加到地图中,让我们结束吧!

<ReactMap
            ref={(e) => { this.map = e?.state.map; }}
            style={...}
            containerStyle={{...}}
            onMoveEnd={this.onMapInteraction}
>...

https://res.cloudinary.com/hilnmyskv/image/upload/v1626774992/blogposts/store_locator_2021_map_preview.mp4

https://res.cloudinary.com/hilnmyskv/image/upload/v1626774992/blogposts/store_locator_2021_map_preview.webm

让我们总结一下吧!

基于上周的工作:

  • 我们首先使用包装器将数据添加到边列表中
  • 我们已经用组件改进了这个列表,并且我们传递了‘aroundLatLngViaIP’以便得到我们周围的结果。
  • 我们已经使用 Mapbox 创建了一个地图
  • 我们已经使用 connectGeoSearch() HOC 将其连接到 React InstantSearch 实例。
  • 最后,我们添加了一个搜索,因为我移动地图复选框,以改善我们的 UX。

我们将在第 3 部分看到

  • 如何添加允许搜索位置的自动完成功能
  • 如何使用 Twilio 在商店有产品时发送文本消息

注:今天会话的代码在 Github 库中。*

使用 Algolia、Mapbox 和 Twilio 在 React 中构建商店定位器——第 3 部分

原文:https://www.algolia.com/blog/engineering/building-a-store-locator-in-react-using-algolia-mapbox-and-twilio-part-3/

本文完成了构建商店定位器的 3 部分系列。请务必查看 构建商店定位器-第 1 部分构建商店定位器-第 2 部分

如今,电子商务购物者期望便利,希望现实世界和网络世界融合,允许他们通过任何渠道开展业务。这就是商店定位器的用途,这样用户就可以:

  • 在线搜索产品,然后在店内购买
  • 亲自浏览和比较产品,然后在线购买
  • 在网上购物并购买产品,然后亲自提货
  • 亲自退还之前购买的物品,而不是将它们寄回

尽管如此,我们发现太多的网站没有为用户提供一种优雅的方式来找到他们的“最近的商店”,无论是测试、线下购买还是在线购买。

构建商店定位器似乎很复杂,因为它需要实施地理搜索、地址/兴趣点(POI)搜索,并在地图上显示结果。为了让每个人尽可能容易地理解,我们将在 React 中创建一个商店定位器,分三次现场编码会议,并附有三篇博文,使用:

到目前为止我们所看到的

在第 1 部分 中,我们创建了所有必需的帐户,搭建了 React 项目,并在 Algolia 索引中用我们的商店索引数据集,然后通过配置其文本和业务相关性来结束。

在第 2 部分 中,我们在应用程序中添加了地理搜索功能,使用 Algolia,React InstantSearch 和 Mapbox,在连接到 Algolia 的 InstantSearch 的地图上显示结果,这要归功于connectGeoSearch高阶组件。我们还增加了“移动地图时搜索”选项,类似于你在 Airbnb 或 GetAround 上可以找到的选项。

今日关注

https://www.youtube.com/embed/rKFMPYDwOn4

视频

为了完成这个系列,我们要做以下事情:

  • 使用Algolia AutocompleteMapbox 地理编码 API ,添加一个自动完成下拉菜单,允许用户查找城市周围最近的商店,同时查找商店本身
  • 添加短信提醒功能,通知用户产品是否可以提货,类似于宜家在线购买、店内提货(BOPIS)功能

代码可以在项目的 Github 库中找到:

添加自动完成功能

自动完成体验

在任何网站或应用程序中,自动完成都是用户旅程中至关重要的一部分,因为它能有效地引导用户。您的用户不必知道他们要查找的确切术语——他们可以键入几个字母,自动完成菜单会显示可用的搜索选项,随时可供选择。

它可能在电子商务平台、搜索引擎或地图上,在那里你不再需要知道完整的地址。

https://res.cloudinary.com/hilnmyskv/image/upload/v1632761602/blogposts/store_locator_2021_autocomplete-is-everywhere.mp4

https://res.cloudinary.com/hilnmyskv/image/upload/v1632761602/blogposts/store_locator_2021_autocomplete-is-everywhere.webm

什么是 Algolia 自动完成?

Algolia Autocomplete是一个免费开源的 JavaScript 库。我们最近对它进行了彻底的重构,以交付最佳的开发人员体验,重点是用自动完成 UX 模式创建流畅的搜索体验。

通过设计,它提供了一种在多个来源中进行搜索的简单方法,这些来源可以是 Algolia 索引或外部 API。构建联合搜索体验从未如此简单。

今天,我们将为自动完成插件创建并添加两个源代码,这样你就可以在自己的代码库中重用它们:

  • 第一个数据源的目标是 Algolia 索引中的商店,因此用户可以根据商店的名称或城市来搜索商店
  • 第二个来源以 Mapbox 地理编码 API 为目标,因此用户可以在世界各地搜索任何可用的城市或兴趣点

在我们的项目中,我们使用自动完成来搜索位置和商店。如上所述,它可以以许多其他方式使用,例如,通过Algolia DocSearch项目增强文档网站上的搜索体验,您可以在 TailwindCSSReact 、或 Twilio 等网站上找到该项目。

安装 AutocompleteJS

我们先安装需要的包:

$ yarn add @algolia/autocomplete-js @algolia/autocomplete-theme-classic

让我们也安装一下@algolia/autocomplete-plugin-query-suggestions,因为我们一会儿就要用到它。

现在,让我们创建一个<Autocomplete/>组件。

在这里,我们不会深入细节,但是你可以在文档中找到关于这个组件的所有信息。

这里你唯一应该注意的是展开操作符……**props**,它将允许我们在组件初始化上展开更多的道具。

组件/自动完成/Autocomplete.tsx

import React, { createElement, Fragment, useEffect, useRef } from 'react';
import { autocomplete, AutocompleteOptions } from '@algolia/autocomplete-js';
import { render } from 'react-dom';

type Optional<TObject, TKeys extends keyof TObject> = Partial<
  Pick<TObject, TKeys>
  > &
  Omit<TObject, TKeys>;

function Autocomplete = any>(
  props: Optional<
    AutocompleteOptions,
    'container' | 'renderer' | 'render'
  >
  ) {
  const containerRef = useRef(null);

  useEffect(() => {
      if (!containerRef.current) {
        return undefined;
      }

    const search = autocomplete({
          container: containerRef.current!,
          renderer: { createElement, Fragment },
          render({ children }, root) {
            //@ts-ignore
            render(children, root);
          },
          ...props,
        });

    return () => {
          search.destroy();
        };
      }, []);

  return <div className={'w-full'} ref={containerRef} />;
}

export default Autocomplete;

现在,让我们把它作为一个孩子添加到我们的Header组件中。

首先,让我们更新我们的header组件,让它处理子组件。

Components/Header/Header . tsx

const Header: React.FC = ({ children }) => {
return (
  <header className={“...''}>
    <Logo className={'w-auto h-16'} />
    <div className={'sm:w-full md:w-1/2'}>{children}</div>
  </header>
  );
};

然后,让我们将刚刚创建的<Autocomplete/>组件添加到我们的**App.tsx file**中的这个头部

组件/App/App.tsx

…
<div className="App flex flex-col w-screen h-screen mx-auto bg-gray-50">
  <Header>
    {<Autocomplete
      initialState={{
        query: searchState.query,
      }}
      placeholder={'Enter address, zip code or store name'}
      openOnFocus={true}
      onStateChange={onSubmit}
      onSubmit={onSubmit}
      onReset={onReset}
      plugins={plugins}
    />}
  </Header>

  <div
    className={
      'sm:flex md:hidden w-full uppercase text-xl font-sans font-bold text-bold gap-4'
    }
  >
…

自动完成组件接受这些属性:

  • 搜索输入的placeholder文本
  • 如果搜索字段被聚焦,openOnFocus={true}将打开内容面板。
  • 每当 autocomplete 中的内容发生变化时,就会触发onStateChange={onSubmit}
  • 当您按下“enter”键或选择一个结果时,会触发onSubmit={onSubmit}
  • 点击输入中的 x 按钮时会触发onReset={onReset}

这些方法负责更新状态:

// Handle search results updates
const onSubmit = useCallback(({ state }) => {
  setSearchState((searchState) => ({
    ...searchState,
    query: state.query,
  }));
  }, []);

// Click on the little cross on autocomplete field
const onReset = useCallback(() => {
  setSearchState((searchState) => ({
    ...searchState,
    query: '',
  }));
}, []);

Theuse callbackhook返回一个 内存化的 版本的回调,只有当其中一个依赖关系发生变化时,该版本才会发生变化。这有助于防止不必要的渲染。

添加 createquerysuggestionplugin

现在我们已经设置好了场景,是时候用数据填充自动完成组件了。您可以使用插件从许多来源获取数据:比如您自己的数据库、第三方 API 和 Algolia。Algolia 为一些数据源提供了 官方插件 ,例如,一个 Algolia 索引。

对于我们的应用程序,我们将创建两个插件:

  • createSuggestionsPlugin
  • mapboxGeocodingPlugin

我们在 src/ 下新建一个文件夹,命名为 AutocompletePlugins

我们将创建一个名为createSuggestionsPlugin的函数,它将是 Algolia 在@algolia/autocomplete-plugin-query-suggestions包中提供的createQuerySuggestionsPlugin的包装器。这样,我们可以扩展和丰富默认插件的行为,以便在我们的 Algolia 商店索引中进行搜索。

const createSuggestionsPlugin = (
  searchClient: SearchClient,
  indexName: string,
  onSelectHandler: (query: string) => void,
  onClick: (item: any) => void,
  HitComponent: React.ComponentType
  ) => {
  return createQuerySuggestionsPlugin({
    searchClient,
    indexName,
    transformSource({ source }) {
      return {
        ...source,
        sourceId: 'AlgoliaStores',
        onSelect(params) {
          onSelectHandler(params.item.query);
        },
        templates: {
          item({ item, components }: { item: any; components: any }) {
            return <HitComponent item={item} onClick={onClick} components={components} />;
          },
        },
      };
    },
  });
  };

export { createSuggestionsPlugin };

我们的函数取:

  • 一个 AlgoliaSearch 客户端(我们在博客文章 2 中创建的)
  • 一个索引名(相同)
  • 一个 HitComponent ,它与我们在第 2 部分中用来渲染侧边栏中每个点击的组件是同一个组件
  • 一个 onClick 处理程序,用来映射当用户点击HitComponent时哪个函数被调用
  • 、、负责更新搜索输入的状态。

搜索客户端和索引名称在方法初始化中调用,其他的在插件的 transformSource 函数中使用,该函数负责在从我们的远程源(这里是 Algolia API)检索到数据后转换数据。

现在,让我们将这个插件添加到我们的Autocomplete实例中,并检查一切是否如预期的那样工作。

// Memoize plugins to then leverage useCallback hooks
const plugins = useMemo(() => {
  const querySuggestionPlugin = createSuggestionsPlugin(
    searchClient,
    indexName as string,
    (query) => {
      setSearchState((searchState) => ({
        ...searchState,
        query: query,
      }));
    },
    (item) => console.log(item),
    SuggestionComponent
  );

  return [querySuggestionPlugin];
}, []);

如果我们刷新浏览器,当我们在搜索输入中键入时,我们应该会看到商店名称,这意味着我们的插件功能齐全!

创建我们自己的插件,用地图框添加兴趣点搜索

除了通过名称或城市名称搜索来找到特定的商店,用户还应该能够搜索给定的位置,然后找到该位置周围的所有商店。

最好的方法是地理编码服务。这里,我们将使用地图框位置 API 。来自最终用户的每个新搜索都会触发对此 API 的新请求,返回位置名称及其纬度和经度信息。一旦用户选择了一个结果,我们可以使用 lat/long 属性来触发针对 Algolia API 的地理搜索,并检索该位置周围的商店。

要创建你的自定义插件,你需要 实现一个给定的接口 ..

在我们的例子中,为了减少对 Mapbox API 的 API 调用次数,我们使用了一种去抖动策略:

  • 避免在每次击键时都发送 API 调用,但只在经过一段时间间隔后才发送,在我们的例子中是 300 毫秒。
  • 基于一个。首先,它将超时设置为作为参数传递的值。如果在超时结束前再次调用该函数,那么它将清除该函数,并以相同的持续时间再次设置它。

让我们构建 Mapbox API 请求

在创建插件之前,我们想创建一段负责调用 Mapbox API 的代码。

const mapboxURL = `https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(
    query
  )}.json`;
  const requestParams = {
    ...options,
    types: options.types,
    country: options.country,
    access_token: process.env.REACT_APP_MAPBOX_TOKEN,
  };

  const endpoint = [
    mapboxURL,
    qs.stringify(requestParams, { arrayFormat: 'comma' }),
  ].join('?');

注意:您可以在 Mapbox docs 中找到请求的所有可用参数。

将结果作为源插件传递给 Autocomplete

现在,我们需要将这个函数连接到我们的自动完成功能。这个想法是将结果传递给由Autocomplete等待的响应,并将其封装在一个函数中以便重用。

const createMapboxGeocodingPlugin = (
  options: IMapboxRequestParameters,
  HitComponent: React.ComponentType < { item: IMapboxFeature; onClick: (item: IMapboxFeature) => void;
  } > ,
  onClick: (result: IMapboxFeature) => void
) => {
  return {
    getSources({
      query
    }: {
      query: string
    }) {
      const mapboxURL = `https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(
        query
      )}.json`;
      const requestParams = {
        ...options,
        types: options.types,
        country: options.country,
        access_token: process.env.REACT_APP_MAPBOX_TOKEN,
      };

      const endpoint = [
        mapboxURL,
        qs.stringify(requestParams, {
          arrayFormat: 'comma'
        }),
      ].join('?');

      return debouncedFetch(endpoint)
        .then((response: any) => response.json())
        .then((data: IMapboxGeocodingResponse) => {
          return [{
            sourceId: 'mapboxPlugin',
            getItems() {
              return data.features;
            },
            templates: {
              header() {
                return 'Mapbox Places results'
              },
              item({
                item
              }: {
                item: IMapboxFeature
              }) {
                return ( &
                  lt; HitComponent item = {
                    item
                  }
                  onClick = {
                    (item: IMapboxFeature) => onClick(item)
                  }
                  />
                );
              },
              noResults() {
                return 'No results.';
              },
            },
          }, ];
        });
    },
  };
};

这段代码将新插件添加到我们的Autocomplete实例中。

和以前一样,我们现在想将插件添加到我们的 Autocomplete 实例中。

const plugins = useMemo(() => {
  const mapboxGeocodingPlugin = createMapboxGeocodingPlugin({
      fuzzyMatch: true,
      autocomplete: true,
      types: ['country', 'place', 'poi'],
      country: ['FR', 'BE', 'GB', 'DE', 'CH', 'IT', 'ES'],
      access_token: process.env.REACT_APP_MAPBOX_TOKEN!,
    },
    MapboxAddressComponent,
    (item) => {
      setCurrentStoreCoordinates([item.geometry.coordinates[0], item.geometry.coordinates[1]])
    }
  );

  const querySuggestionPlugin = createSuggestionsPlugin(
    searchClient,
    indexName as string,
    (query) => {
      setSearchState((searchState) => ({
        ...searchState,
        query: query,
      }));
    },
    (item) => setCurrentStoreCoordinates([item._geoloc.lng, item._geoloc.lat]),
    SuggestionComponent
  );

  return [mapboxGeocodingPlugin, querySuggestionPlugin];
}, []);

注意:在我们的实现中,我们将结果限制在几个国家和几类地方,所以 MapBox API 返回最相关的结果。您可以根据需要调整这些变量。

types: ['country', 'place', 'poi'],
country: ['FR', 'BE', 'GB', 'DE', 'CH', 'IT', 'ES'],

一旦完成,我们现在可以检查我们的应用程序,看看地图框结果是否已经添加到我们的自动完成。让我们在搜索栏中键入“Marsel ”,看看我们是否能找到位于马赛-普罗旺斯机场外的商店…

Store Locator - Autocomplete preview

而且它似乎正在工作!万岁!

将点击的信息传递给我们的即时搜索实例

既然用户可以在 Autocomplete 下拉列表中选择一个结果,我们希望将信息传递给 InstantSearch 实例,这样我们就可以:

  • 显示所选商店位置及其详细信息
  • 使用所选位置的纬度和经度运行 Algolia 地理搜索,检索并显示离该位置最近的商店

因为我们将使用地理位置坐标,这个方法对两个插件都有效。

创建存储当前坐标的位置

为了在自动完成中存储所选的地点/商店,让我们创建一个状态变量来存储这些数据,我们称之为currentStoreCoordinates

const [currentStoreCoordinates, setCurrentStoreCoordinates] = useState< [number, number] | null >(null);

创建处理程序

接下来,让我们创建一个方法,它根据我们单击的元素更新这个存储。从createSuggestionsPlugin返回的条目将有一个带有 latlng 键的_geoloc对象,它们本身来自存储在 Algolia 索引中的记录。

createMapboxGeocodingPlugin返回的项目将有一个几何对象,带有一个 坐标 数组。

首先,让我们创建一个方法来处理对建议的点击:

const handleClickOnSuggestion = (hit: Hit) => {
  const { lat, lng } = hit._geoloc;
  const coordinates: [number, number] = [lng, lat];
  setCurrentStoreCoordinates(coordinates);
  setCurrentStoreName(hit.name)
  setIsOpen(true)
};

将它作为onClick处理程序添加到querySuggestionPlugin实例中。

现在,让我们更新地图框插件的onClick处理程序:

(item) => setCurrentStoreCoordinates([item.geometry.coordinates[0], item.geometry.coordinates[1]])

将纬度和经度传递给即时搜索和我们的组件

在第 2 部分,我们配置了我们的<InstantSearch/>包装器:

<Configure aroundLatLngViaIP={true} />

现在,我们将利用aroundLatLng属性来触发基于纬度和经度参数的地理搜索。

&lft;Configure
    aroundLatLngViaIP={!currentStoreCoordinates?.length}
    aroundLatLng={!!currentStoreCoordinates?.length ? '' : currentStoreCoordinates?.join(',')} />

这一次,我们将 aroundLatLngViaIP 设置为真或假,这取决于 currentStoreCoordinates 的状态。如果currentStoreCoordinates为空,我们将 aroundLatLngViaIP 设置为 true 并基于用户的 IP 地址执行地理搜索,否则我们将坐标作为字符串传递给 aroundLatLng 以使用这些坐标执行地理搜索!仅此而已!

现在,让我们将 currentStore={currentStoreCoordinates} 添加到我们的StoreComponent中,并添加到地图中以突出显示所选的商店。

至此,我们已经完成了自动完成部分!我们现在有一个全功能的商店定位器,它允许用户找到商店:

  • 他们当前的位置附近,由于他们的 IP 地址和从页面加载
  • 基于当前的viewport,每次地图移动或放大或缩小时都会更新
  • 通过自动完成功能使用关键字搜索,根据商店名称或城市名称搜索商店
  • 通过自动完成功能使用关键字搜索,搜索一个地点名称并查找附近的所有商店

添加 Twilio 短信体验

什么是 Twilio?

Twilio 是领先的 CPaaS(通信平台即服务)公司,由 Jeff Lawson 于 2008 年在旧金山创立。像 Deliveroo、优步、亚马逊 GetAround 这样的公司都是客户,所以你很可能在不知情的情况下使用了 Twilio 的服务。

他们为许多通信渠道提供服务,从短信、语音通话和推送通知,一直到完全可配置的企业呼叫中心。他们还通过收购 SendGrid 和 Segment 扩展到电子邮件和客户分析领域。

在这个项目中,我们将使用 SMS,原因有三:

  • BOPIS 功能(在线购买,店内提货)通过短信接收店铺位置
  • 缺货通知,因此只要产品有货,您就会收到一条短信
  • 营销通知

创建您的帐户

让我们创建自己的账户,并获取账户 SID 和认证令牌。

Twilio.com homepage

Twilio.com点击报名。输入创建免费 Twilio 帐户所需的信息。

一旦你登录,你将登陆“控制台”,在那里你会找到两条关键信息:你的 Twilio 账户 SID 和 Auth Token。

Twilio Dashboard - Account info

我们将使用他们的无服务器功能( 功能 ),而不是我们自己的后端。如果有一天你需要从你的服务器发送 API 请求到 Twilio,你知道在哪里可以找到它!

获得您的第一个电话号码并创建您的第一个短信请求

要发送短信(尤其是在美国和加拿大),您需要购买一个专用电话号码,对于其他国家,您可以在 Twilio 网站上查看 Twilio 的监管指南

如果您想在法国发送手机短信,可以跳过这一步,因为购买一个法国电话号码很麻烦。这不是 Twilio 的错,而是 ARCEP ( )规则的后果。 你可以去“创建你的第一个短信服务”。对于法国,我们将使用阿尔法发送器。,它将您的品牌标识为发送者—这是法国法律的要求。

Twilio SMS preview

如需购买电话号码,请前往左侧栏,进入 电话号码>管理>购买电话号码

Twilio Dashboard - Sidebar

接下来,选择您想要购买电话号码的国家,然后点击购买。

Twilio Dashboard - Buy Number

确认后,您现在自豪地拥有了一个新的电话号码!

创建您的第一个信息服务

设置新的电话号码(如果您在法国,则为 Alpha 发送者)后,在搜索栏中输入“信息服务”,然后输入“信息服务”(您可以体验另一种自动完成功能)。

Twilio Dashboard - Dropdown selection

  • 从建议列表中选择 创建消息服务
  • 将您的新消息服务命名为,例如, 存储定位器 并选择 通知我的用户 。
  • 接下来,点击 添加发件人 ,然后点击 阿尔法发件人 ,输入您的企业名称。
  • 如果您购买了电话号码,您可以从列表中选择您的电话号码。

最后,您的消息服务应该类似于下面的截图

Twilio Dashboard - sender pool

现在,进入 属性 ,复制你的消息服务 SID。

Twilio Dashboard - Messaging service settings

创建发送短信的功能

使用消息 SID,导航到功能(您可以搜索它或在 浏览产品 >开发人员工具>功能 ) 下找到它)。

Twilio Dashboard - explore products

再次创建一个服务,给它命名,点击 下一个 。浏览器中将打开一个 IDE。

点击 +添加 > 新建功能 创建一个新功能,命名为“下单”。将的可见性设置为“public ”,因为我们需要在 Twilio 之外调用它。

现在,转到 依赖项 并添加 date-fns 包来处理日期。

Twilio Misc - dependency label

在模块字段中,键入 date-fns ,然后单击添加。

现在,让我们添加负责发送消息的代码:

// Let's require date-fns functions, we'll use them to manipulate dates.
const parse = require('date-fns/parse');
const format = require('date-fns/format');
exports.handler = async function(context, event, callback) {

  // Let's fix CORS, this is required because we are calling this function from outside the twil.io domain
  const response = new Twilio.Response();
  response.appendHeader('Access-Control-Allow-Origin', 'https://localhost:3000'); // Change this by you domain
  response.appendHeader('Access-Control-Allow-Methods', 'GET, OPTIONS, PUT, POST, DELETE');
  response.appendHeader('Access-Control-Allow-Headers', 'Content-Type');

  // Now we're grabbing data from the request payload
  const {
    store,
    customer,
    time,
    phoneNumber
  } = event;

  // We're using format to display a nice date in the SMS
  const formattedDate = format(parse(time, 'dd-MM-yyyy::HH:mm', new Date()), "eee, d LLLL yyyy 'at' kk:mm");

  // Let's write the message
  const message = `Hey ${customer}. Your order will be ready to pick-up at ${store} on ${formattedDate}. Thanks for beeing a Spencer & William Customer`;

  // Time to hit the send button !
  const client = context.getTwilioClient();
  await client.messages.create({
    body: message,
    messagingServiceSid: 'MG9378a33499ec5b0201374e6e8b0adb67',
    to: phoneNumber
  })

  // Don't forget the callback otherwise you'd raise an error as the function will keep running
  return callback(null, response)

};

仅此而已!点击 保存****部署所有 ,大概需要 2 分钟左右,你的函数名旁边会出现一个绿色的复选标记。现在可以从外部使用我们的 Twilio 凭证调用 Twilio API 来使用这个函数。

注意:y 你可以使用一个 API explorer 来测试它,比如 Postman 或者 Paw.cloud(在 macOS 上)

Twilio Dashboard - Deploy function

从你的代码中调用下单函数

您将在组件/ 目录中找到表单组件。当您从列表或地图上选择商店时,它会出现在屏幕上。

它有三个字段:客户名称、提货日期和电话号码。现在,我们需要在单击“Place Order”按钮时执行请求。

我们将使用 axios 来执行请求,但您也可以使用自己喜欢的库。

yarn add axios

让我们填充 sendRequest() 方法:

async sendRequest() {

  const {
    customer,
    time,
    phoneNumber,
    phoneCountry
  } = this.state
  const {
    store
  } = this.props

  this.setState({
    isLoading: true
  });
  await axios.post(process.env.REACT_APP_TWILIO_FUNCTION_URL as string, {
    store,
    customer,
    time,
    phoneNumber: parsePhoneNumber(phoneNumber, phoneCountry).number
  });
  this.setState({
    isLoading: false
  });
}

仅此而已,你的应用程序现在将向你的客户发送短信。这是我们为这个应用程序编写的最后几行代码,现在是时候将它部署到智能云上了!

在智能云上部署您的应用

最后一步,我们将把商店定位器部署到 智能云 托管平台,这样你就可以向你的朋友和同事展示你新开发的应用。

转到您的智能云仪表盘,点击 +创建 / 一个应用

CleverCloud Dashboard - overview

选择 **创建新应用 😗*

CleverCloud Dashboard - create new app

选择应用类型: 节点 。点击 继续下一步

CleverCloud - add node dialog

为您的应用命名,并选择您的数据中心。

CleverCloud Dashboard - Pick server location

最后,选择 配置提供者 。这将替换我们的 .local.env 文件,并在构建时在我们的应用程序中注入变量。然后点击 下一个 并给你的配置提供者起一个名字。

CleverCloud Dashboard - Add Add-on

在下一个屏幕上,点击 专家 并复制/粘贴您的.local.env文件。

将这两行添加到环境变量中,以使用 yarn 并在安装完依赖项后构建项目:

CleverCloud Dashboard - Env variable setup

CC_POST_BUILD_HOOK="yarn build"
NODE_BUILD_TOOL="yarn"

CleverCloud Dashboard - Env variable setup edit

点击绿色按钮两次,点击左侧菜单中的节点机。按照屏幕上方的步骤,将 Clever 的 git URL 添加到您的项目中,并推送它!使用 “域名”下的网址,3 到 4 分钟后就可以使用了。

CleverCloud Dashboard - App infos

包装

总结一下我们本周的成就:

  • 我们增加了一个自动完成下拉菜单,补充了现有的应用程序体验,允许用户按名称或位置名称搜索商店,这样他们就可以找到该位置附近最近的商店。
  • 我们增加了 Twilio 支持,可以向客户发送短信。
  • 我们已经在智能云上部署了我们的应用。🎊

这就是我们关于使用 Algolia、Mapbox 和 Twilio 构建商店定位器的系列报道。但是你还可以添加更多的功能:

  • 利用商店定位器提供 BOPIS 特色
  • 使用 Twilio SendGrid 发送电子邮件而不是短信
  • 使用 Twilio 段跟踪和更新点击次数最多的商店
  • 使用 Stripe APIs 添加支付选项

我希望你喜欢这个系列!套用一位我非常钦佩的首席执行官兼开发人员的话:我迫不及待地想看看你会开发什么。

为所有人建立一个开源索引

原文:https://www.algolia.com/blog/engineering/building-an-open-source-index-for-all/

在阿尔戈利亚,我们本质上是一群业余爱好者。我们不仅仅是为财富 500 强建造,我们也是为修补者建造。这就是为什么我们在 DocSearch 这样的工具上投入了如此多的精力——我们喜欢任何在像 Astro家庭助手SASS 这样的工具背后有回报、开源软件思维的人,就像 ReactTwilioDiscord 一样。

我们一直在酝酿一个想法,特别是关于回馈发现驱动的开发人员,他们从 Algolia 开始就一直在试验:开放索引。互联网上已经存在许多开放数据集,但它们的质量并不为人所知。即使是高质量的也不总是我们需要的形式,而且没有什么激励让制作者来帮助我们,因为他们通常不会因为维护他们的数据集而得到报酬。这似乎是我们在 Algolia 要解决的完美问题,所以我们中的一些人一直在努力设计我们的第一个开放式指数。让我们在本文中浏览一下这个过程;它是相当概念性的,所以对于那些自己艰难地完成偶尔复杂的索引创建过程的人来说,它仍然是一个有用的指南。

不过,在我们开始之前,我们需要谈一谈可组合性。

可组合性——小事情的大词

可组合性是一个系统的各个部分在独立和不同组合中有用程度的主观度量。

以一首歌为例,制作人不仅要考虑歌手是否唱得好,吉他是否走调,或者鼓手是否合拍,还要考虑这些曲目配合得如何。在歌曲的不同点,这些曲目的不同组合将同时播放,因此它们需要独立工作,并在不同的环境中工作。我们的指数也是如此。

当您为公司创建一个应用程序时,不太可能只有一个应用程序一次性使用给定记录的所有数据—大型应用程序通常会为不同的页面和视图请求数十种不同的数据组合。但对于我们的索引来说,这种影响更加突出:我们不知道哪些数据将被谁使用,所以我们需要确保所有这些数据都是高质量的,彼此独立,但也可以很容易地组合成高质量的超级结构,就像音乐制作人希望每张唱片独立工作,同时也能在任何配置下整齐地融入整个轨道一样。

让我们试着做一个食谱,特别是厨师约翰在 Allrecipes 上提供的这道看起来很美味的希腊柠檬鸡肉和土豆食谱。让我们看看是否可以从 Allrecipes 的食谱模型开始,然后将其改进为更加具体和可组合的。就目前的情况来看,配方模型似乎具有这样的结构:

  • title(字符串)
  • description(字符串)
  • times(物体阵列)
    • name(一对预定义选项的字符串)
    • number(数字)
    • unit(一对预定义选项的字符串)
  • ingredients(对象数组)
    • amount(数字)
    • unit(一对预定义选项的字符串)
    • ingredient_name(字符串)
    • is_header(布尔型)
  • directions(对象数组)
    • step_content(字符串)
    • is_header(布尔型)
  • notes(对象数组)
    • title(字符串)
    • note(字符串)
  • servings(数字)
  • yield(字符串)
  • public(布尔型)
  • media(字符串数组,验证为 URL)
  • author(字符串)

这已经是相当全面了!他们可以用它做很多事情,比如计算完成一份食谱需要的总时间,营养信息,以及不同份量的配料量。不过,我们可能会提出一些建议:

  1. Allrecipes 使用配料行在列表中的配料之间创建一种标题。我们选择的食谱没有使用这个功能(它看起来不像许多人做的,但是你可以设想这样一种情况,你在指导读者如何先制作两个独立的项目,然后再将它们组合起来(像馅饼或芝士蛋糕的外皮和馅料)。这绝对是一个有用的特性,更多的食谱作者应该利用它,但是没有在食谱的结构中将其形式化,而是选择使用配料行作为“标题”,只是在视觉上而不是从根本上区分配料组,这感觉有点奇怪。我可能会建议创建一个名为ingredient_groups的高级数组,其中至少包含一个带有title(即标题文本)的对象和一个名为ingredients的数组。只有当需要描述多个组时,才会显示该标题,并且该内部数组将包含该标题下特定部分的所有成分。然后我们可以去掉那个讨厌的is_header布尔值,否则他们需要将部分标题渲染得与其他成分不同。同样的变化也适用于说明书,说明书同样使用标题线来划分章节。
  2. 说到配料,Allrecipes 实际上并不要求提交者将配料分成数量、单位和项目名称——他们只是要求你输入一个简单的字符串,就像这样:Recipes ingredients input form example我怀疑他们在内部将它存储为三部分,因为他们用数字和单位进行数学计算(你可以让它将 4 份食谱转换为 3 份,这通常需要改变单位)。所以这已经是可组合的了,但是我们可以做得更好。如果我们分别要求所有这三个组件,我们可以用它做一些有趣的事情。例如,我们可以有一个可接受成分的列表(如果他们的成分在我们的数据库中不存在,用户可以添加),让用户选择成分,而不是以字符串的形式输入。在生产环境中,我们的数据库中会有这些成分,这里只通过 UUID 引用。每种配料都将在它们自己的数据库记录中存储几个表单选项——例如,我将“黄油”称为一种配料,而“冷冻的”、“软化的”、“融化的”、“切片的”和“切块的”作为一种“黄油”配料的可选表单。配料也可以有其偏好的单位类别(面粉应该总是按重量或干体积来测量,但决不能按长度来测量),这可以可选地是定制的(像“黄油棒”)或者甚至是空的(你不需要一个特殊的“土豆”单位)。然后,这个特定配方中的配料表单将存储在我们的配方索引中的配料对象中,旁边是一个与这个特定配料的可用单位相匹配的单位字符串和一个经过验证的配料数值。我们可能会在将来完全发布这个系统(如果你在数据库或 CMS 公司,你知道在哪里可以找到我们),但是现在,我们只是将这些信息放在一个 JSON 对象中,这个对象表示索引中食谱中使用的所有配料。现在对我们来说,这将是更多的手工工作,但是每个使用索引的人都不必担心启动他们自己的数据库实例。

这是我们新的recipes指数形状:

  • title(字符串)
  • description(字符串)
  • times(对象数组)
    • name(一对预定义选项的字符串)
    • number(数字)
    • unit(一对预定义选项的字符串)
  • ingredient_groups(对象数组)
    • title(字符串)
    • ingredients(对象数组)
      • ingredient (UUID,匹配ingredients JSON 中的一种成分)
      • forms(字符串数组,匹配成分的forms)
      • amount(数量)
      • unit(字符串,匹配该成分的unit_categories之一)
  • direction_groups(对象数组)
    • title(字符串)
    • directions(字符串数组)
  • notes(对象数组)
    • title(字符串)
    • note(字符串)
  • servings(数字)
  • yield(字符串)
  • public(布尔型)
  • media(字符串数组,验证为 URL)
  • author(字符串)

然后是我们的新成分 JSON ,其中每个记录都与这个形状匹配:

  • uuid (UUID)
  • name(字符串)
  • plural_name(字符串)
  • unit_categories(字符串数组)
  • custom_unit(字符串数组,除非unit_category包含“自定义”,否则不存在)
  • forms(字符串数组)

单元列表是一个足够合理的对象,也可以作为 JSON 保存在内存中,所以这里有一个小的实用 JavaScript 程序来跟踪这些单元并在它们之间轻松转换,它是由我的同事 Jaden 编写的。

这是我们要上传到 Algolia 的食谱 JSON。为了获得最佳结果,你通常会希望只存储你将在 Algolia 中搜索的内容,然后将其余内容存储在一个快速数据库中,如 Fauna ,但是因为这是一个测试数据集,我们将所有内容都进行了搜索,这就是为什么 JSON 对于一个食谱来说如此之大。如果你想把你的个人食谱添加到这个数据集中,我们很乐意把它们包括进来!只需在这里为每个食谱填写谷歌表单,我们会筛选并手动添加最好的。

您一直在等待的部分:由于这个索引是开放的并且在不断增长,所以在加载生产就绪数据之前,对您来说试验 Algolia 和测试您自己的集成将是非常有用的!如果你想试一试,以下是凭证:

*只读公钥:*ea 2f 27 cfed 9 ddeed 93 f 7532424 a 64480

申请 ID: OKF83BFQS4

*索引名称:*食谱

我们很高兴看到你用什么来填充这个数据集(同样, Google 表单在这里可用)!我们将利用我们团队中数百名 Algolia 开发者的配方来改进它。如果你对数据集本身做了一些有趣的事情,一定要在 Twitter 上给我们喊一声!

为客户和员工构建企业搜索

原文:https://www.algolia.com/blog/product/building-enterprise-search-and-discovery-for-your-customers-and-employees/

新冠肺炎加速了全球数字化转型。一切都转移到了网上,从礼品购物到杂货店购物,再到流媒体消费。客户期望轻松、顺畅、个性化的数字体验。简而言之,企业搜索。

对于消费者来说,这种转变不仅仅发生在网上:员工正在寻找内部网和知识管理工具来找到他们需要的信息,以便在世界各地远程工作和协作时保持高效。再次:企业搜索。

我们为外部公共用户(客户)和内部用户(员工和业务团队)构建企业搜索产品。高效的搜索引擎能让您的客户和员工更快地访问您最重要的信息。它引发了更多的消费、参与和协作,同时极大地提高了效率。

搜索是一个无名英雄,一个强大的应用程序,它统一了您的数据和元数据,使它们更容易被发现、消化和操作。数据可以是任何格式—产品、视频、电子表格、文档、文章、博客、客户信息、内部网财务报告—或许多其他市场或工作相关类型的内容。好的搜索技术可以与现有的内部和第三方工具和数据集集成。

什么是企业搜索?本文回答了这个问题,然后提供了如何优化您的企业搜索软件功能的路线图,从捕获分析到获得业务洞察力,以及构建与您的后台系统集成的强大内部搜索体验。

构建企业搜索解决方案的路线图

企业通常遵循基于需求的搜索策略。他们首先升级在线搜索,以提高客户参与度和转化率。只有这样,领先的企业才能重组并开发一个强大的基于搜索的框架,与他们的后台系统、数据和工作流集成,使业务团队能够以最佳方式运作。

让我们概述一下 Algolia 提供的 3 步路线图。您可以:

  1. 利用我们的员工和产品提供的专业知识和灵活性,构建成功的在线搜索功能。我们的软件完全可定制,以满足任何行业和独特的业务需求。
  2. 将内部搜索与多用途索引框架和基于云的托管服务相集成,旨在支持后台系统、不同的数据源、员工任务、业务工作流和生产力工具。
  3. 收集分析以跟踪使用情况,然后将这些信息输入数据库,用于报告和人工智能驱动的商业见解、建议、个性化信息以及对所有搜索平台的 A/B 测试。

创建企业搜索的三大需求和九大行动

1。需要有竞争力的、丰富的在线企业搜索体验

Algolia 的所有客户都需要出色的在线搜索。他们需要实现更好的数字客户体验,从而提高参与度和转化率。他们需要在资源较少的情况下快速启动并运行。他们需要搜索专业知识来构建在线体验,从而提高投资回报率。

  • 世界领先的商业体重管理项目 WW (Weight Watchers) 允许其成员追踪他们在什么时候吃了什么。快速准确地跟踪饮食习惯是其成员成功的核心。然而,该组织的用户生成数据量迅速从几十万个数据点增长到几亿个数据点。尽管信息量如此巨大, Algolia 的 WW 搜索平台的运行速度比 WW 之前的搜索解决方案快 100 倍,90%的搜索查询在不到 14 毫秒的时间内被返回。此外,Algolia 会在 WW 会员实时搜索时刷新搜索结果。
  • 此外,Algolia 支持的不仅仅是 WW 的数字搜索体验。WW 使用我们的技术为其 Recipe Explorer 和 CRM 搜索提供支持,并不断研究利用 Algolia 产品支持其创新的新方法。

行动 1:在网上建立有竞争力的搜索

首先决定你的搜索界面应该在哪里,应该是什么样子。它是出现在你主页上的第一个项目吗?隐藏在二级页面上的补充工具?此外,考虑一下你希望搜索结果如何显示:标题和链接可能没问题,但你的用户可能会想要更多,这取决于你所在的行业,例如,图片、简短摘要或价格。

如果你的业务团队在构建网络搜索工具方面没有很多经验,你可以和我们合作。我们提供了一个快速响应的企业搜索引擎,具有高级功能,如推荐、个性化,以及许多管理您的内容和微调您的相关性的方法,无论是手动还是使用人工智能的自动方式。您还将获得开箱即用、完全可定制的前端 UI 工具和库,帮助您构建丰富的搜索和发现体验,与您的业务用例及品牌无缝集成。

行动 2:通过分析和 A/B 测试向客户学习

随着时间的推移,我们的分析引擎会提高搜索的相关性和可用性。分析可以帮助你追踪人们在寻找什么,他们点击和转化了什么,以及哪些搜索是最有效的。

您还可以利用分析来推动内容创作和扩大产品种类。搜索分析告诉你你的用户想要什么样的产品和内容。使用这些数据来帮助您创建已经拥有潜在受众的新内容和产品。

行动 3:不断迭代以改进您的企业搜索功能

对不断变化的市场和客户需求做出反应。这是什么意思?在快速交付第一版网站搜索解决方案以解决最紧迫的问题后,通过提高相关性进行迭代和优化,添加人工智能自动化的相关性工具,如动态重新排序和动态同义词建议,并使用更高级的功能升级您的前端 UI,如销售个性化分面自动完成。这些都是用户期待的领先企业搜索体验的属性。

2。对灵活高效的内部企业搜索的需求

一个企业的数据通常是大量的和无组织的。信息丢失或不为人知。系统已经过时,难以适应。员工生产力、协作和沟通都不理想。任务和工作流效率低下。

  • 领先的时装零售商迪奥开始使用 Algolia 作为其电子商务网站。然后,其管理层决定使用 Algolia 来管理其店内应用程序。他们创建了一个应用程序,使用连接器与 Algolia 的 API 集成。商店员工现在可以根据购物者的偏好(例如,面料、颜色、类型)搜索商品。他们可以看到特定商店有什么商品,也可以很容易地从附近的商店发货,避免顾客失望。
  • 《纽约时报》和其他新闻和金融服务利用 Algolia 的 API改变了他们的编辑管理流程以跟上快速发展的新闻周期。Algolia 使编辑能够搜索、选择和发布最热门的新闻文章。Algolia 最终将被用来发现这些趋势,并自动提出建议。

行动 1:授权给你的员工

您希望从工程师到业务经理的每个人都能够构建、配置和轻松支持运行您组织的在线服务和内部流程。您希望提高工作流效率和员工生产率,并使用一个现代化的、适应性强的 API 和搜索引擎框架来连接人员、软件和数据,从而管理内部内容。

行动 2:用内部搜索工具统一数据,并将正确的内容呈现给正确的用户

提供系统范围的搜索和索引用户体验,统一您的后端堆栈,揭示系统之间的关键数据和信息关系。您可以通过索引来自多个来源的数据或内容并将其发送到我们的托管服务来做到这一点。信息可以是任何结构化和非结构化的数据格式。我们的搜索引擎为搜索目的构建它。此外,您可以通过在一个多方面的“联合搜索”界面中组合不同的数据源来联合您的搜索。

动作 3:将企业搜索功能与您现有的应用程序集成

将定制的搜索连接器和功能与您现有的第三方应用程序集成,如 Salesforce、SAP、Confluence、Google Docs、SharePoint、吉拉和其他内容管理系统(CMS)、企业资源规划(ERP)工具、客户应用程序、存储库、爬虫、微软、亚马逊网络服务(AWS)、社交媒体和业务平台。

3。企业搜索对有组织、有洞察力的知识管理的需求

企业往往拥有大量的信息,但也有太多的数据需要合理管理。没有简单的方法来整理和查看不同数据点或内容片段之间的关系。很难知道什么是重要的,什么是值得发现的。相关内容未得到充分利用。

  • Pentair 是一家 B2B 组织,是国际水资源和水处理行业的重要参与者。实施 Algolia 后,他们立即发现客户在线参与度大幅增长。为了衡量这一点,他们将 Algolia 的分析与他们的 Adobe 电子商务平台集成在一起,创建了一个从前到后的分析数据馈送,表明搜索后产品浏览量增加了 500%。随着分析的到位,他们也开始利用个性化,将其受众分为住宅和商业等类别。最后,分析使他们能够执行 A/B 测试,并受益于 Algolia 的人工智能优化相关性。

行动 1:捕捉分析,并提供人工智能和人工智能模型

捕捉使用分析,为强大的人工智能提供机器学习数据集和模型,以便个性化、预测、推荐和持续改进 A/B 测试的结果。

行动 2:构建有洞察力和灵活的搜索报告

创建深度相关的搜索和报告界面,专业地可视化您的分析和人工智能驱动的业务见解和搜索应用程序。

动作 3:外包你的 AI 和 ML 企业搜索能力

不用建立内部机器学习搜索团队——这非常复杂,可能需要数年时间并消耗大量资源——你可以通过 Algolia 的 insights 引擎获得现成的人工智能和人工智能能力。

对于企业搜索来说:旅途与目的地至关重要

企业搜索始于为您的客户创造强大的搜索和发现体验。但是一个托管搜索 API 超越了这种在线体验:它可以改变运行你的业务的内部流程和系统。

这里有一种方式来看待它:每个搜索用户界面都有能力显示一组或多组结果。如果处理得当,这是一项伟大的成就。但是,如果你更进一步,开始将所有的搜索界面组合在一个统一的界面中,你就可以创建一个整合的(联合的)搜索体验。这将您的所有数据和可用项目统一在一个屋檐下。您最终会得到一组可组合的搜索引擎 API,在这些 API 中,您的数据可以在世界上的任何地方托管和访问,从而为您的所有客户和员工提供服务。

旅程:开箱即用

  • 用于构建简单或复杂应用程序的可组合 API 和前端工具。完全可配置和定制,适用于任何使用案例或行业。
  • 成本更低、资源更少、对专业技术需求更少的快速上线解决方案。
  • 现收现付:企业搜索不一定意味着高成本。您只需为您使用的资源付费。

目的地:你能建造什么

  • 快速和相关的在线搜索,以满足任何行业和独特的业务需求。因此,您可以获得更多的客户参与和更多的转化。
  • 内部搜索构建在多用途托管索引框架之上。您可以利用这一点,通过简化对相关信息的访问来提高效率。
  • 一个分析数据库,提供人工智能驱动的在线搜索功能和各种商业见解。

构建身临其境的购物体验:通过 Adobe Experience Manager 和任何商务平台使用 Algolia 搜索

原文:https://www.algolia.com/blog/ecommerce/building-immersive-shopping-experiences-with-algolia-aem-commerce/

将 Algolia 添加到 AEM 商务体验中,使零售商能够充分利用他们的内容,丰富购买体验,并在向购物者展示产品时更加个性化,从而为他们的在线商店带来更高的转化率和收入。

在这篇博客中,我们将讨论为什么搜索和发现对购物体验如此重要,以及如何以最快的速度实现这一点。

打造沉浸式购物体验

最好的在线零售商努力创造身临其境的购物体验使用内容和丰富的资产来补充他们试图销售的产品。我们所说的身临其境是什么意思?

  • 漂亮的登陆页面
  • 引导顾客在购买过程中导航
  • 向顾客介绍产品的信息
  • 具有动态方面的联合随键入搜索结果
  • 个性化推荐
  • 动态横幅&情境化促销
  • 通过对话获得更多关于购物者意向的信息

许多领先的零售商选择使用像 Adobe Experience Manager 这样的 CMS 作为前端来创建这些身临其境的体验。通过 AEM,零售商可以构建网站,管理他们的全球网站,并引入资产来丰富商业体验。

布雷维尔是一个很好的在线零售商的例子,它将内容和产品结合起来,创造了身临其境的体验。作为体验的一部分,他们对搜索和发现进行了深思熟虑,甚至通过互动问答创造了引导销售体验,帮助购物者更好地了解他们的偏好,并发现他们最有可能喜欢的布雷维尔产品。

访问他们的引导体验 这里 亲自去看看,说不定还能找到你的完美咖啡机☕️或榨汁机🍎!

Breville’s eCommerce site

Breville quiz to find the perfect juicer

Algolia、Adobe Experience Manager 和 CIF

搜索和发现是创建沉浸式电子商务体验的关键部分 ,这就是 Algolia 和 Adobe 合作在 Adobe Experience Manager 上提供搜索的原因。Algolia 的搜索引擎允许零售商在他们的网站上提供闪电般的快速搜索。出版商获得了工具,可以根据相关性、业务指标和机器学习模型的洞察力来控制内容&产品。通过 Algolia A/B 测试,他们可以进行实验并衡量改进,以了解更好的搜索能力如何影响他们的底线。最终,Algolia 将科学与艺术相结合,帮助在 AEM 上创造更多引人入胜的体验。

Adobe Experience Manager 提供了一个商业集成框架,称为 商业集成框架 (CIF) 以加速 AEM 上店面的开发。通过安装和配置 CIF,作者可以轻松地将产品和类别数据从 Adobe Commerce 或任何第三方电子商务平台引入 AEM,并构建核心的前端商店体验。Algolia 更进一步,提供了一种在零售商的电子商务数据和 AEM 的丰富内容中构建搜索和发现体验的方式。

Algolia 提供跨商业和内容联盟的 AEM 组件,包括:

  • 带自动完成功能的全局搜索
  • 联合搜索&使用即时搜索浏览
  • 内容推荐
  • 产品推荐(可利用 CIF 引用产品 id)
  • 类别页面(可以利用 CIF 引用类别 id)

AEM’s WKND demo with Algolia search

如何入门

强大的搜索和发现改变了游戏规则,零售商希望尽快启动并运行它,这样他们就可以开始试验、迭代和衡量结果。在这里,我们分享在 Adobe Experience Manager 中将搜索添加到电子商务体验中的 4 个步骤——以最快的方式实现价值。

1。索引网站上应该可以发现的所有产品和内容

零售商可能会选择一些不同的来源,包括 PIM、电子商务引擎、他们的常见问题服务平台以及他们管理内容的 CMS。Algolia 提供了许多 API 客户端来索引和保持信息与这些系统的同步。对于少数热门平台如Adobe CommerceAdobe Experience Managersales force Commerce CloudCommerce toolsShopify我们

2。使用元数据、业务排名标准和 AI 配置搜索和发现

**配置逻辑发生在 Algolia 仪表板中的 智能地对类别页面、搜索结果进行排名,并提供正确的推荐 。许多用户会在仪表板中运行实验和 A/B 测试,以查看哪些杠杆可以带来最高的转化率。最终,这里的目标是匹配购物者的意图,并通过更好的搜索和发现来增加收入。

在这里,零售商可以管理如下内容:

  • 相关性调谐
  • 自定义排名
  • 动态重新排名
  • 个性化
  • 商品销售
  • 查询规则
  • 同义词
  • A/B 测试
  • 分析学
  • 还有更多……

例如,零售商可以添加一个横幅,每当购物者搜索“销售”一词时就会出现。他们会在 Algolia 创建一个“如果这个,那么那个”规则,并绘制一个横幅。该横幅可以在 Adobe Experience Manager 中创建为片段,并使用发布 URL 进行引用。

Algolia query rule

Banner powered by Algolia query rule

3。将 Algolia 添加到前端

在 Adobe Experience Manager 中构建 UI 可以使用两种方法:(1)使用在 Javascript、React、Vue 等中可用的 Algolia 的 UI 库 ,或者(2)使用 Algolia 的 AEM UI 组件加速器 。要创建联合搜索,只需将每个索引添加到 Algolia 组件中,使用 Algolia 中定义的索引名称。在全球搜索栏中,零售商可以为产品添加一个索引,为文章添加另一个索引,从而创建丰富的商务+内容体验。

对于使用商务集成框架的用户,我们提供 Algolia CIF 组件选项,可轻松连接到 Adobe Commerce endpoint(或另一个商务引擎),并根据通过 CIF 定义的类别 id 和产品 id 动态生成类别页面和产品详细信息页面。然后,这些分类页面可以使用 Algolia 中设置的逻辑和人工智能显示所有产品。

AEM author dialogue for Algolia category page

产品详情页面可包含由 Algolia 提供的推荐。与产品详细信息页面一样,这些页面将根据购物者正在查看的产品动态呈现推荐。这些推荐可以从产品索引中提取,甚至可以作为相关内容从另一个索引中共享。

Algolia component for recommended products on PDP

Recommended ‘Related Products’ configuration

4。跟踪分析和机器学习的结果

我们的事件可以通过 AEM 组件进行跟踪。通过组件,选择“跟踪 Algolia 事件”框,将出现第二个选项卡来配置“点击”或“转换”事件。另一种选择是通过类似Adobe Launch的标签管理器发送 Algolia 事件。跟踪结果将使 Algolia 引擎变得更加智能,了解如何为给定用户个性化结果,提供产品推荐,并根据人群动态地重新排列项目。

Click and conversion events tracking through the Recommend AEM component

这些部分将搜索连接到您的商务平台和内容管理系统,并创建丰富的购物体验,引导购物者,展示最相关的商品,并最终推动更多的转化。

想了解更多或了解如何尝试 Algolia?

请致电adobe-algolia-solutions@algolia.com联系我们,获取我们的 AEM 加速器以及如何开始将 Algolia 构建到您的 AEM 解决方案和商务集成框架中的指导!我们很高兴与您讨论最佳实践、权衡,并了解什么最适合您!

查看我们“Adobe x Algolia 集成”系列的其余部分,包括我们的最后一部分:Adobe Experience Manager 上的 Algolia Powered 搜索组件 。**

大规模构建实时分析 API

原文:https://www.algolia.com/blog/engineering/building-real-time-analytics-apis/

我们最近重新设计了我们的分析 API,以便为我们的客户提供每天数十亿次搜索查询的近实时分析。我们是这样做的。

我们的分析系统从一开始就是红色的

我们的第一个分析系统是从一个小项目开始的。它由一批批压缩日志文件组成,这些文件从我们所有的搜索服务器发送到一个中央存储服务,然后被推送到一个 Elasticsearch 集群,我们从那里提供分析查询。

自然,这个系统有其局限性。首先,我们需要为新的点击分析功能铺平道路,我们希望利用一个更加关系化的模型。在 Elasticsearch 中,文档是独立的,这样做太麻烦了。

其次,由于要跨许多节点处理数百亿条记录,管理这样的集群变成了一项全职工作。

我们的搜索分析为我们的客户提供了关于他们的搜索如何被使用的见解。这些见解很容易变大。从搜索数量或独立用户数量等概述,到诸如“用户最感兴趣的类别是什么?”等可操作的业务洞察,不一而足或者“哪些查询没有返回结果?”。所有这些都可以在特定的时间范围内完成,在某些情况下,时间范围可能非常大。

以下是我们在从头开始重建我们的分析时所做的技术选择的解释,以及我们使用的一些设计原则的概述。

选择用于分析的数据存储

我们需要满足的最高要求是:

  • 每天处理数十亿个事件的接收、存储和删除。
  • 对于大多数查询,无论请求的时间范围如何,都可以在几秒钟内返回结果。
  • 与我们一起扩展。我们的规模每年都在翻倍,因此所选的解决方案应该能够轻松地跟上这种增长。理想的情况是增加更多的机器。

我们首先评估了像红移大查询点击之家这样的强国。虽然它们对于数据仓库来说肯定是很好的选择,但是我们发现它们对于实时分析工作流来说还不够好。

在我们的例子中,重点是执行亚秒级分析查询,而不是长时间运行的分析。

然而,在非常大的数据集上实现亚秒级的聚合性能对于红移来说是极其昂贵的,对于 BigQuery 来说是不可能的。

此外,我们发现 BigQuery 的另一个问题是定价取决于使用情况,而不是存储。因此,我们不认为支持公共 API 是一个安全的选择。

对于 ClickHouse,我们很想尝试一下,但最终发现托管、维护和微调它需要大量额外的工程开销。

最后,我们的搜索将我们带到了 Citus Data 及其针对 PostgreSQL 的 Citus 扩展,这使得通过跨多个节点分布表和查询来无缝扩展 Postgres 成为可能。

Citus Data 还提供了几个扩展非常适合实时分析,如 HLL (HyperLogLog)和 TopN 。前者是一种快速近似非重复计数的算法,后者的作用类似于一个堆,它允许在 JSONB 字段中按照频率对顶部的项目进行排序。

如果我们选择这个解决方案,我们可以将客户的数据分布在许多节点上,利用搭配,并预先计算指标。额外的好处是,我们仍然可以从运行最新 Postgres 实例的关系数据库中获益。

An example of data distribution in Citus

做出数据存储决策后,下面是我们分析解决方案的其余部分在实践中的工作方式。

创造近乎实时的分析

然而,实现亚秒级分析查询并不是现成的。我们通过跨分片分布数据和使用汇总方法来实现这一点。

为此,我们必须执行以下步骤:

  • 将原始事件纳入系统。
  • 定期将事件汇总到专用汇总表中。
  • 查询汇总表并以毫秒为单位获得结果。

摄取

我们利用 Postgres COPY 命令将批处理事件插入 Citus。正如我们将在下面看到的,我们从不直接查询原始数据,所以这些表可以保持非常简单的模式。

由于没有大量的索引需要更新,插入操作的性能相当可观。Citus 宣称每秒钟可以接收 700 万行数据(也就是每天 600 亿行!)和我们自己的基准测试显示了类似的趋势。

我们按客户分发我们的数据。单个客户的数据存储在同一个碎片上,因此我们可以利用搭配优势。以单个客户应用为目标的请求将只需要以单个 Postgres 实例为目标。

汇总

我们不提供来自原始事件的指标。在某些情况下,如果您希望获得亚秒级的响应时间,即使是单个客户的数据集也会变得太大而无法即时处理。

根据经验法则,使用 PostgreSQL,每个内核每秒可以聚合 100 万行。

我们改用卷式桌子。汇总表保存给定时间范围内预先计算的指标。

正如我们在简介中看到的,我们经常需要返回 tops 和 distinct count。由于上面提到的 TOPN 和 HLL 扩展,这变得很容易。

下面是一个简化的汇总函数,涵盖了几个用例:

此函数将在给定时间范围内收到的所有查询聚合到 5 分钟的桶中,并计算它们的计数,即用户的唯一数量(使用 HLL),并保留排名靠前的查询及其各自的计数(使用 TOPN)。

该功能将在所有节点上同时执行。

对于我们的分析解决方案,我们有几个级别的汇总。我们每 5 分钟汇总一次事件,并进一步按天汇总。我们这样做有几个原因:

  • 这意味着 API 返回的指标会频繁更新。大约每隔 5 分钟,数据就会刷新一次,因此客户不必等待很长时间,他们的查询就会反映在控制面板中。
  • 为了进一步压缩我们的数据集,我们保留了每日总量。这意味着在某些时候粒度会降低到一天的级别,但这对我们来说是可以接受的。我们甚至可以考虑在某个时间点之后按月滚动我们的数据集,这将允许我们以更粗的粒度为代价继续提供接近无限的保留。反之亦然,增加中间每小时汇总也是将来的一个选项。
  • 因为我们预计算 top,所以我们不能一整天都向它们追加查询。这样做会产生非常不正确的顶部。相反,我们在一天中建立了许多顶部,我们通过 EOD 将它们合并在一起。我们仍然在做 top 中的 top,但是考虑到它们的细粒度和我们一次合并它们的事实,最终,我们只看到了与更详尽(和计算更密集)的方法相比的最小差异。

Example of rollup creation from the raw data

这种方法的结果是,一旦数据被卷起,我们就可以删除它。我们不需要在 Citus 中保存太字节的原始事件来提供指标,并且由于 Citus 能够跨节点并行删除,删除数据变得很容易。

分析查询

API 的目标是汇总表,而不是原始表。如果我们比较原始表和汇总表中的行数,我们会看到平均压缩率从 50,000 到 150 不等(当然,这取决于为聚合选择的维度)。

这就是这种方法如此有效的原因。因为最终我们的指标是每天预先计算的,所以我们很容易理解为什么我们在几乎任何时间范围内都能在毫秒内得到结果:查询时扫描的数据量是微不足道的。

例如,要获得一个给定客户在过去一周的查询计数,快速的索引扫描是获取位于相同实例上的 7 行,后跟一个 sum。

为了获得上个月的前 1000 个搜索,我们获取 30 行,去掉前几个条目,并进一步将它们聚合成最终的前 1000 个。

下面是几个简化的示例查询来演示:

要获取查询计数,请执行以下操作:

因为我们的指标在合并到每日汇总之前首先存在于 5 分钟汇总表中,所以我们查询这两个表并在查询时联合它们的结果。

为了获得不同的用户计数,我们利用了 HLL 类型,它可以计算几个 HLL 字段的交集。

SELECT hll_cardinality(sum(user_count))::bigint FROM ... WHERE ...

最后但同样重要的是,下面是获取前 10 个查询的方式:

SELECT (topn(topn_union_agg(top_queries), 10)).* FROM ... WHERE ...

我们所有的分析查询都遵循这种模式,在查询时只执行最少的聚合逻辑。

大局

让我们后退一步,看看整个系统:

Our whole architecture for analytics processing

在实际将查询插入 Citus 之前,我们首先将击键聚合到查询中。我们的大多数客户都实现了即时搜索。使用 InstantSearch,您可以在键入时获得结果。这是一个很好的用户体验,它会为给定的搜索生成许多 API 请求。例如,搜索“Algolia”可能会产生多达 7 个查询(A、Al、Alg…等)。说到分析,我们只想提供关于完整查询的见解(有人搜索过 Algolia 一次),而不是中间的击键。

为了确保这一点,我们有一个管道来处理我们的日志,将击键序列聚合到搜索中,然后直接推送到 Citus。

我们使用 Go 作为我们选择的语言来重建这个管道。我们在 Algolia 一直有一个微服务方法,在过去的一年里,我们开始在 Go 中构建我们的大多数服务(除了我们的搜索引擎),到目前为止,在性能和生产率方面都非常满意。

为了完成这幅图,我们依靠 GKE 上的 Kubernetes 进行编排,依靠 Google Pub/Sub 进行跨服务的通信。

结论

由于 Citus 和基于汇总的方法,我们的分析每天处理数千个客户的数十亿次搜索,这个数字还在快速增长。到目前为止,我们对该系统的性能和可伸缩性非常满意,并期待着在它的基础上构建更多的产品。

了解我们如何将 AWS 上的 Citus 迁移到 Azure 上的 Citus而不影响我们的用户或代码库。

为电子商务和媒体建立推荐,有或没有 AI

原文:https://www.algolia.com/blog/ai/building-recommendations-for-ecommerce-media-with-without-ai/

随着电子商务和数字媒体的普及,大多数在线公司用于推荐的工具并没有发生实质性的变化——直到最近。大约从最早的数字市场开始,早期的推荐工具就基于启发式过滤器,将商品分成不同的类别,并跟踪用户购物车或观察列表中的同现情况。

虽然基于过滤的推荐(如下所述)实现起来很简单,并且不一定依赖于复杂的算法,但它们有其局限性。基于机器学习的现代解决方案 提供了重大改进

亚马逊处于人工智能推荐系统的最前沿——推荐占其销售额的 35%。他们的算法被小心翼翼地保护着,训练有素——而且很昂贵,但有可能以少得多的投资获得很好的结果。Netlify 和 Spotify 也是如此。

推荐引擎可以围绕 多种车型 。根据你的产品和目标消费者,会根据你的需求使用不同的算法。任何在亚马逊上购物的人都会非常熟悉两个最广泛使用的模型。“相关项目”和“那些谁买了这个也买了”推荐都是 协同过滤 算法,实现它们有一系列选项。

在本帖中,我们将介绍几种不同的推荐工具。您可以使用基于标记和过滤的经典方法。或者,我们将展示机器学习(ML)和人工智能(AI)如何提供隐私安全和更自然的推荐。最后,您将看到 Algolia 推荐 如何解决这些问题,为开发者提供一个 API 级别的推荐引擎。但是首先,理解用户的背景以及他们会如何看待你的推荐是很重要的。

让优质推荐成为搜索旅程的一部分

潜在客户通常通过两种方式进入网站。有了具体的指导方针,他们可能知道自己到底在寻找什么——一顶高质量的儿童自行车头盔、一件天然纤维的白色上衣、一个棕色皮搁脚凳。或者他们可能正在浏览,为一个重要的生日寻找礼物,或者为家庭办公室寻找更好的解决方案。

无论哪种情况,通过识别用户行为模式,推荐都有可能将潜在买家与他们自己可能没有发现的产品联系起来。下面,我们来看看两种可能的方法——一种简单的基于过滤器的方法和一种基于 ML 的解决方案。

用不带 AI 的简单标签获取自定义结果

在几十件白色衬衫中,用户点击了一件束腰亚麻衬衫。在不使用任何 AI 的情况下,利用标签和销售历史就可以进行推荐。

也许那件衬衫被贴上了“休闲”的标签,是你春季编辑活动的一部分。你可以很容易地返回一个简短的清单,列出三四件符合至少两个标准的其他衬衫——休闲风格、春季、亚麻、白色、束腰长度、价位。

准备您的数据到 提供这种类型的建议 需要一些前期工作和持续验证,以确保您库存中的所有产品都被正确索引。对于每个项目,您必须决定要“匹配”什么属性,以及每个匹配属性的相对重要性。当一个新产品添加到您的目录中时,它需要被“标记”并分配匹配的属性,这可能不容易自动上传。衬衫的颜色可能会自动填充,但“款式”或“季节”可能不会。使用这种方法有可能获得精确、高质量的建议,尤其是如果您的库存变化不太频繁的话。

另一个非人工智能的方法是使用销售历史。一个合理的假设是,有一个共同购买经历的客户可能也有其他共同之处。销售历史可以为购买了所选商品的人购买的其他商品提供推荐。查找这些产品-购买者-产品关系的查询可能会比上面的产品-产品关系使用更多的资源,因此对于大量库存来说可能是低效的。对于拥有许多产品类别的公司,这也可能导致推荐中出现一些不必要的“噪音”(例如,最畅销的商品出现是因为它普遍受欢迎,而不是因为它与其他产品相关)。此外,当一个新产品被添加到您的目录中时,将没有购买历史可供参考。

销售历史方法的另一个缺点是,它将消费者数据直接引入匹配算法。当然,以一种完全安全和私密的方式做到这一点是可能的,但是任何时候在面向公众的代码中使用客户数据,都有暴露私密数据的更大风险。避免数据泄露是一项需要时间和知识的承诺。

根据你的情况,这些负面影响可能会很大。虽然好的推荐不需要人工智能,但你可以避免处理用户数据和强行微调推荐。让我们来看看采用基于 ML 的方法是什么样子的。

使用基于 ML 的 AI 解决方案获得更好的推荐

基于过滤的非人工智能推荐的问题在于,它们假设用户知道他们想要什么,并能准确描述。有时候就是这样。但通常,最有效的推荐是针对用户自己可能没有找到或发现的项目。

基于最大似然的推荐的主要优点是有助于发现问题。儿童自行车头盔的购买者可能还有其他共同的需求——儿童安全设备,潜在的户外活动,健康饮食,或替代通勤,或其他更难预测的兴趣。

人工智能算法没有试图预测所有这些联系,而是注意到购物者行为中可能难以预测或描述的模式。基于 ML 的解决方案提供的推荐具有意外收获和“适合”的元素,这有助于它们脱颖而出。要开始观察这些模式,首先要收集用户事件。然而,正如前面提到的个性化一样,重要的是不要暴露私有数据。

捕捉用户事件,以低隐私风险获得高质量的结果

基于 ML 的推荐引擎可用的最丰富的数据是用户事件,如点击和转换。历史上,推荐只反映用户的 当前 动作——最近点击的项目,当前搜索词。搜索一件白色上衣,你会得到白色上衣。与单个事件相比,跟踪用户动作序列可以更深入地了解特定用户的目标和兴趣。从白色衬衫到浅色连衣裙再到凉鞋的点击流,比最初的搜索词更能洞察购物者的兴趣。

这种用户数据跟踪会给你的应用带来不必要的隐私风险。人工智能解决方案的一个幸运之处是,它们在用户隐私和数据安全方面取得了胜利,并提供了更好的建议。他们根据许多人过去的行为进行学习,然后根据模型进行预测。

基于 ML 的解决方案专门针对特定会话期间客户与您的产品和服务的交互方式进行调整。特定的搜索词、点击和用户当前访问你的网站的转换可以帮助你根据他们当时正在寻找的东西来定制推荐。

收集事件数据 支持的不仅仅是推荐。跟踪用户查看、点击和转换事件可以告诉你很多关于用户如何与你的网站和产品交互的信息。您需要对事件数据进行分类和存储,用线性回归和其他基于 ML 的算法训练您的模型。

如果您选择使用 Algolia,其Insights API将成为您收集用户事件数据并将其发送到您的应用程序的中枢。您可以使用这些数据进行 A/B 测试和动态产品重新排名,以响应用户的选择,并提供更有针对性的建议。

下面的代码显示了数据如何发送到 Insights 的简单示例。您前端的一个onClick事件处理程序发出一个简单的 POST 请求(这里显示的是您可能模拟 cURL 的事件):

curl -X POST \
https://insights.algolia.io/1/events \
-H 'x-algolia-api-key: ${ADMIN_API_KEY}' \
-H 'x-algolia-application-id: ${APPLICATION_ID}' \
-H "Content-Type: application/json" \
-d '{
    "events": [
        {
          "eventType": "click",
          "eventName": "Product Clicked",
          "index": "products",
          "userToken": "user-123456",
          "timestamp": 1529055974,
          "objectIDs": ["9780545139700", "9780439784542"],
          "queryID": "43b15df305339e827f0ac0bdc5ebcaa7",
          "positions": [7, 6]
        },
      ]
    }'

A queryID将点击事件绑定到特定的 Algolia 搜索,并且仅在搜索的一个小时内有效。基于会话的令牌将点击事件连接到用户。暴露敏感用户数据的风险很小,因为根本不会收集这些数据。与此同时,用户可以获得与他们当时的行为相应的推荐。

使用协同过滤生成精准推荐

最常见的“频繁一起买”建议先从 协同过滤 算法说起。任何推荐人工智能的基本目标都是找到用户和产品之间的相似之处,并基于这些相似之处提出建议。协同过滤算法被广泛用于数据科学中,根据具有相似偏好的其他用户对产品的评价,预测用户对产品的评价。 协同过滤 很多解释都是以电影为例。一个简化的场景:

  • 我爱古装剧,给过 皇冠**叫接生婆这样的电视剧很高的收视率。
  • 我真的很反感奇幻太多的电视剧,给了 夏洛克神秘博士很低的收视率。 姐姐爱死他们了!
  • 帕特和山姆也都喜爱古装剧,并且对 王冠 评价也很高。
  • 帕特也喜欢奇幻类的节目,并给我不喜欢的节目打高分。
  • 山姆和我更相似,所以他对奇幻电视节目评价较低。
  • 一部被归类为神秘/犯罪的新剧上映了,但它同时包含了历史和幻想的元素。帕特对它评价很高,萨姆评价较低。
  • 在此之前,我们没有人给推理/犯罪节目评分。
  • 因为我的喜好和山姆的大体匹配,所以不推荐我看这个节目。我妹妹的偏好与帕特的相匹配,她在她的推荐队列中获得了新节目!

在规模上,协同过滤算法比这更复杂,尽管基本原理非常相似。与我们上面讨论的非人工智能解决方案不同,可伸缩性是基于 ML 的推荐系统的一个卖点。数据集越大,使用人工智能算法的情况就越有说服力,因为有更多的机会发现用户行为的模式。亚马逊在很大程度上依赖于协同过滤,这导致产品推荐可以感觉到意外收获和独特的个性化。

协同过滤算法分为 几类——基于用户、基于项目、混合和矩阵分解。即使在混合系统中,也有一系列的选择来决定有多少种方法可以组合以及以什么样的优先顺序组合。根据用户数量、项目类型、每个用户的评级密度和项目类别,每种方法最适合不同类型的数据集。

使用 Algolia 推荐获得一个不断改进的基于 ML 的解决方案

虽然没有适用于所有目的的单一推荐解决方案,但在大多数情况下,一个非常好的选项并不一定很复杂。对于电子商务公司来说,协同过滤方法可能仍然是最好的选择。

Algolia 推荐在一个 API 中交付 高性能 AI 驱动的 推荐。API 外形意味着它实现起来很快,尤其是因为简单的前端 UI 代码片段。这也是确保您的推荐随着时间推移会变得更好的一种方式。那些通过 API 交付的迭代改进会自动实现——无需您重新编码。

如果没有安果指数, 创建账号和 app 。实施 Algolia 推荐,独立或与 Algolia 搜索,将是一个简单的步骤,让您的电子商务网站获得最佳结果。你可以 看一下动作 两个视频,或者从我们的 深入了解一下 。如果您不熟悉 Algolia,这些资源可以帮助您加深对推荐引擎的理解,并让您感受到使用 Algolia 是多么容易。

使用 11ty Serverless、Netlify 和 Algolia-Algolia Blog Blog 为静态网站构建服务器呈现的搜索

原文:https://www.algolia.com/blog/engineering/building-server-rendered-search-for-static-sites-with-11ty-serverless-netlify-and-algolia/

在创建任何网站或应用程序时,渐进式改进都是一个重要的主题。当用户的浏览器不能处理任何 JavaScript 或您正在使用的特定 JavaScript 时会发生什么?如果您的前端出现故障,您需要一个后备来允许基本功能继续工作。

这有什么难的?

当您在 Jamstack 上工作时,这可能比在传统堆栈中工作要困难得多。由于 Jamstack 致力于从 CDN 提供 HTML,我们没有传统的服务器,只有静态文件和无服务器功能。因此,我们可能会发现自己在为前端和服务器重写渲染代码。三年和重新设计过去了,突然你在时间机器里看着去年设计的搜索结果。

有了 11ty 新的无服务器包和 Netlify 功能,我们可以从服务器快速启动。在此基础上,我们可以逐步增强使用 InstantSearch.js 等库的体验。

什么是 11ty 无服务器?

11ty 是一个用 Node.js 编写的静态站点生成器,它提供了多种模板语言和多种获取数据的方法。它的构建考虑到了灵活性。

历史上,它在构建过程中完成所有工作,并生成可以存储在 CDN 上的 HTML。这就创建了在 Jamstack 上运行得非常好的快速网站。

对于任何动态内容,它都依赖前端 JavaScript 来获取数据。这在许多情况下都有效,但是没有提供明确的渐进增强的途径。

如果你的前端代码失败了,你的站点的动态方面也会随之失败。随着 11ty 1.0 版本的发布,这将不再是一个问题。11ty 将捆绑可选的 11ty 无服务器插件。这将允许开发者指定可以处理用户输入的路由。该输入可以来自查询参数或 URL 结构本身。

我们在建设什么

Screenshot showcasing the final serverless search page

在这个演示中,我们将采用一个非常简单的 11ty 站点,并添加一个动态搜索路线。该搜索路径将使用 11ty 和一个模板过滤器在一个无服务器的函数中创建 HTML 所有这些都来自我们习惯的 11ty 代码。这将用于我们渐进增强中的“后退”。虽然我们不会在这个演示中构建一个基于 JavaScript 的搜索,但是使用 InstantSearch.js 创建一个实时搜索是一个坚实的用户体验的基础。

我们将如何构建它:

1.安装插件并配置无服务器功能
2。创建搜索页面
3。创建一个getResults模板过滤器来查询我们的 Algolia 索引

设置

我们将从一个基本的 11ty 模板开始,只需要一点 HTML 就可以了。

首先,克隆这个库并安装依赖项(11ty 1.0 和 dotenv)。

想看看成品吗?检查存储库的final分支或者查看这个演示站点

npm install && npm start

我们项目的结构遵循 11ty 站点的基本结构。各个页面都在项目的根目录下——目前只有index.html文件。模板在_includes目录中。配置文件是根目录下的.eleventy.js。站点模板也相对简单:一个包含页眉和页脚的基础模板。

一旦安装完成,我们将有一个本地运行的 11ty 工作站点。还不是很有意思,只是一个带一点 HTML 的索引页面。让我们添加一个搜索页面来引入一些内容。

安装并配置 11ty 无服务器插件

在其最新的 1.0“金丝雀”版本中,11ty 附带了插件 11ty 无服务器。这有助于生成我们需要按需运行 11ty 的无服务器功能。

为了在我们的项目中安装它,我们需要更新.eleventy.js配置文件。

require("dotenv").config();  
const { EleventyServerlessBundlerPlugin } = require("@11ty/eleventy");  

module.exports = function(eleventyConfig) {  
    // Configuration rules  
    eleventyConfig.addPlugin(EleventyServerlessBundlerPlugin, {  
       name: "search", // The serverless function name for the permalink object 
       functionsDir: "./netlify/functions/",  
     });  
};

由于 11ty 正在我们的项目中创建我们不想在版本控制中跟踪的文件,请用以下项目更新您的.gitignore:

netlify/functions/search/**  
!netlify/functions/search/index.js

当我们重新运行npm start时,11ty 现在将在functionsDir指定的目录中创建一个无服务器函数——以及所有必要的包文件,其名称由name属性指定。

在大多数情况下,您不会修改这些文件。该插件生成了index.js文件,可以对其进行编辑以用于更高级的用例。11ty 将在每次运行时覆盖该目录中的其他文件。

创建页面使用无服务器功能

现在 11ty 已经创建了该函数,我们可以添加一个页面来使用它。

首先在项目的根目录下创建一个名为search.html的新文件。在文件中,我们可以用 frontmatter 配置页面的数据。

---  
layout: "base.html"  
title: Search Page  
permalink:  
 search: /search/  
---

变量layout将指示使用_includes中的哪个模板进行显示。变量title将显示在 HTML 的

The permalink`对象中,我们在这里指定这个页面的最终 URL 应该是什么。

如果你熟悉 11ty,你可能记得permalink变量是一个字符串。对于简单的用例,您仍然可以使用字符串,但是对于无服务器,它将是一个对象。对象的键将是我们在无服务器功能的配置中指定的名称。

您也可以通过这种方式根据 URL 指定不同的无服务器功能。如果希望在构建时和请求时生成页面,也可以为 permalink 指定一个build键。

一旦添加,页面将在/search/呈现。除了页眉和页脚之外,它没有任何内容。让我们从查询参数中获取一些动态内容。

---
layout: "base.html"
title: Search Page
permalink:
  search: /search/
---

<h2 class="is-size-3 mb-3">This list is built at request from the query "{{ eleventy.serverless.query.query }}"</h2>

这将创建一个标题,查看我们路线的查询参数,并插入query参数包含的任何值。

如果您访问 URL 末尾带有?query=11ty的页面,字符串11ty将出现在标题中。

那么,我们如何进行查询并从 Algolia 得到结果呢?

创建一个getResults模板过滤器

为了获得呈现模板所需的数据,我们需要创建一个模板过滤器。过滤器将接受来自无服务器页面的查询字符串,根据 Algolia 索引运行查询,并将一组文章返回到我们的搜索页面。

在我们深入研究代码之前,您需要有一个 Algolia 应用程序和一些环境变量。如果你已经有一个 Algolia 索引,请随意使用。我们将使用一个索引,其中包含带有标题、描述和 URL 的博客文章。如果您没有 Algolia 指数,创建一个帐户和应用程序,并使用这些数据手动创建您的第一个指数。

[
    {
        "title": "Creating an omnibar with Autocomplete",
        "description": "In this tutorial, we’ll walk through setting up Autocomplete to fire interactions with JavaScript. Specifically, we’ll build an omnibar to toggle light and dark mode for our website. An omnibar is a search field that has both search and actions that can be taken. A strong example of this is the Chrome or Firefox search and URL bar.",
        "url": "https://www.algolia.com/blog/engineering/creating-an-omnibar-with-autocomplete/"
    },
    {
        "title": "Building a Store Locator in React using Algolia, Mapbox, and Twilio – Part 1",
        "description": "These days, ecommerce shoppers expect convenience and want the physical and online worlds to mesh allowing them to conduct their business on whichever channel they want. For example, users may choose to:",
        "url": "https://www.algolia.com/blog/engineering/building-a-store-locator-in-react-using-algolia-mapbox-and-twilio-part-1/"
    },
    {
        "title": "Introducing Algolia Recommend: The next best way for developers to increase revenue",
        "description": "Now, with the introduction of Algolia Recommend, Algolia further enables developers to unleash the component of the experience that drives the remaining part of the product discovery experience: product recommendations. ",
        "url": "https://www.algolia.com/blog/product/introducing-algolia-recommend-the-next-best-way-for-developers-to-increase-revenue/"
    }
]

一旦有了索引,创建一个.env文件并添加以下变量:

# The app id
ALGOLIA_APP = ""
# The search-only API key
ALGOLIA_SEARCH_KEY = ""
# The index name
ALGOLIA_INDEX = ""

一旦这些都准备好了,我们就可以通过 Algolia JavaScript 客户端提交查询来获得结果。因为我们的查询可以在模板中访问,所以我们将创建一个新的模板过滤器来使用查询并返回结果。

要创建一个新的过滤器,我们需要在.eleventy.js配置文件中扩展 11ty。

首先,我们将安装algoliasearch NPM 软件包。

npm install algoliasearch

require("dotenv").config();
const { EleventyServerlessBundlerPlugin } = require("@11ty/eleventy");
const algoliasearch = require("algoliasearch");

const client = algoliasearch(process.env.ALGOLIA_APP, process.env.ALGOLIA_SEARCH_KEY);
const index = client.initIndex(process.env.ALGOLIA_INDEX);

module.exports = function (eleventyConfig) {
  eleventyConfig.addPlugin(EleventyServerlessBundlerPlugin, {
    name: "search", // The serverless function name from your permalink object
    functionsDir: "./netlify/functions/",
  });

  eleventyConfig.addFilter("getResults", function (query) {
    return index.search(query, {
      attributesToRetrieve: ["title", "url", "date", "description"],

    }).then(res => {
      return res.hits;
    })
  });

};

在文件的顶部,我们将使用 API 键、应用程序名称和索引名称来设置 Algolia 搜索客户端。之后,在导出的函数内部,我们将使用 11ty 的addFilter()方法添加一个过滤器。

该方法接受两个参数:用作过滤器的字符串和使用时要执行的函数。该函数将接收从页面文件传递的数据。在这种情况下,它将是用户输入的查询。

在这个简单的例子中,我们将查询传递给index.search()方法,并只请求回我们需要的属性,以保持我们的响应较小。当结果返回时,我们可以将结果返回到我们的页面,以便在模板循环中使用。

---
layout: "base.html"
title: Search Page
permalink:
  search: /search/
---

<h2 class="is-size-3 mb-3">This list is built at request from the query "{{ eleventy.serverless.query.query }}"</h2>

{% assign results = eleventy.serverless.query.query | getResults %}
<div class="card-grid">
  {% for result in results %}
    {% include "article.html" %}
  {% endfor %}
</div>

在页面中,我们使用 Liquid 中内置的assign标签将数据赋给一个变量。然后,我们可以遍历返回的数组,并将该信息传递给 include。这个 include 可以用于这些结果以及网站上的任何文章显示。应该在_includes目录中创建article.html文件。

<article class="card column">
    <h2 class="title"><a href="{{ result.url }}">{{ result.title }}</a></h2>
    <p class="content">{{ result.description }}</p>
</article>

由于 11ty 无服务器,我们现在在静态生成的网站中有了一个工作服务器呈现的搜索。11ty 无服务器可以帮助我们克服静态站点中的其他模式吗?在我们的开源代码交换平台上查看相关解决方案。

`

在 VivaTech 2019 上庆祝整个欧洲的创新

原文:https://www.algolia.com/blog/algolia/celebrating-innovation-across-europe-at-vivatech-2019/

住在巴黎时,风投公司经常问我欧洲的投资环境有多吸引人,尤其是巴黎。

2012 年 Algolia 成立时,美国风投对巴黎的印象相当负面。我听到了关于法国工作文化的所有典型的定型观念和误解——从每周 35 小时的工作到夏天的长假期。虽然这种刻板印象与历史有一定的相关性,但我不得不多次解释,法国人其实工作很努力!

时间快进到 2019 年,欧洲和巴黎的生态系统已经发生了巨大变化,变得既有活力,又对投资者和公司都具有吸引力。近年来,许多总部位于巴黎的科技公司,包括 Criteo、Deezer 和 Dailymotion,已经成长为全球舞台上的重要参与者。Algolia 目前为全球 6,500 家公司所使用,随着我们最近向 APAC 和日本的扩张,我们在每个主要地区都设有办事处。

相比 2012 年,现在我从风投和美国初创公司那里听到的关于如何在巴黎开设办事处的问题越来越多,而在欧洲其他城市中这种情况更甚。仅在过去一年,巴黎就有超过 35 亿美元的风投投资和超过 300 笔与总部位于巴黎的科技公司的交易,巴黎是最活跃、最有吸引力的科技生态系统之一。

最近,我参加了在本月早些时候举行的为期三天的“T4”2019 VivaTech 大会,与最有前途的初创企业和明日的颠覆者共聚一堂,探讨全球范围内的变革思路,就清楚地表明了这一点。正如其口号所言,VivaTech 是“全世界初创企业和领导者欢庆创新的聚会”。

自从 2016 年 Viva Technology 的第一次活动以来,我一直在关注它,并且对这一活动在科技界的重要性印象深刻。VivaTech 2019 的数字说明了一切,超过 120,000 人参加了,其中包括超过 13,000 家最具创新性的初创企业。我还对前来巴黎参加 VivaTech 2019 的世界各地领导人和 3300 名投资者的国际形象着迷。

作为活动的一部分,VivaTech 主办了首届下一届欧洲独角兽奖。Algolia 很荣幸成为深度技术类的获奖者,我也很荣幸代表我们全球的所有员工接受这个奖项。任何时候你得到行业的认可,这都是一个伟大的里程碑,提醒我们自 2012 年开始以来已经走了多远。

Julien-Lemoine-VivaTech-2019

这些奖项让我们受宠若惊。它为我们提供了一个视角,让我们了解我们已经走了多远,我们是如何走到这一步的,我们为谁服务,以及我们还希望如何继续创新、发展并为客户的成功做出贡献。随着我们的快速增长(去年增长了 90%以上),这给了我们一个认可、庆祝和感谢 300 多名员工和全球 6,500 名客户的机会,是他们让我们取得了今天的成就。谢谢大家!

Algolia-Next-European-Unicorn-Awards

建立和扩大一家科技公司是一项艰苦的工作,需要激情、创新和毅力。正是这样的时刻进一步证实了我们走在正确的道路上,并激发了我们加快努力的愿望。如果你受到创新的启发,有动力,有合作精神,并想加入我们,我们希望收到你的来信,我鼓励你看看我们的职业页面上的空缺职位。

祝贺其他获奖者,包括同样获得大奖的pay fit(B2B SMB)Snyk(B2B 企业)Vinted(B2C)Olio&open classrooms(Tech 4 Good)。随着我们继续在世界上留下我们的印记,并成为一个现代和持久的创新中心,为所有欧洲初创企业的更多成功干杯。

Algolia-winner-deeptech-VivaTech2019

使用 React 挂钩集中状态和数据处理,创建可重用组件

原文:https://www.algolia.com/blog/engineering/centralizing-state-and-data-handling-with-react-hooks-on-the-road-to-reusable-components/

应用程序开发通常是被动的。我们看到了需求,我们会尽快提供解决方案。在这个快速的软件周期中,我们收集需求,并在需求出现时立即实现它们。我说的不是又快又脏。我指的是使用最好的 RAD 实践——快速应用程序开发。

RAD 循环如下:你实现伟大的核心特性( MVP 风格),依靠多年的经验来创建可维护的代码。但是随着时间的推移,会发生一些事情:需求发生变化,编写了更多的代码,代码库开始违背您直觉上优秀但可能不完全健壮的架构。所以你开始重构。此外,您会发现技术在变化,提供了新的方法来使您的代码更简单、更清晰、更强大。

进入游戏规则 反应钩子 。而且,一个快速增长的业务需要你用大量的新特性重写你的应用程序。

重写——从头开始。生活提供了第二次机会。

React Hooks 如何保存我们的管理应用

应用程序开发也可以是主动(被动)的。我们的管理应用程序是数据密集型的。以前,许多独立的(和竞争的)组件独立地管理它们的数据——连接、格式化、显示、更新等等..

一个 Admin 应用程序的要求

管理应用程序是集中数据处理的理想选择。管理员需要按原样查看数据,因此屏幕视图通常与底层数据的结构相匹配。因此,虽然我们面向客户端的仪表板为业务用户提供了功能视图,但管理员需要以一致和直观的方式查看用户或客户端订阅信息。

我们需要的是一个更具可扩展性的解决方案。由于我们从多个来源提取数据——所有这些都可以通过一个具有多个端点的 API 来访问——我们希望集中数据处理的常见方面。这不仅给我们带来了直接的好处(更好的测试、缓存、同步、标准输入),还促进和简化了未来的数据集成。

定制挂钩

我们实现了一个名为useData的定制 React 钩子,它管理并因此集中了所有数据检索 API 调用、数据交换、类型检查、缓存和其他此类基于数据的功能。单单缓存就极大地提高了面向用户的速度。

同样重要的是,速度和集中化使我们的前端开发人员能够在界面的不同部分重用他们的组件和 UI 元素。这种可重用性创建了功能丰富、用户友好的 UI/UX,前端开发人员无需在每个组件中维护唯一的状态信息。最后,在幕后,数据可重用性使得驱动前端功能的模型一致。

我们将在以后的文章中讨论 React 钩子的前端好处;这篇文章是关于我们如何用一个可靠的和可伸缩的数据处理层来服务前端。

我们的useData钩子如何集中这个过程

我们使用不同的数据源,有些比其他的更复杂,但是都遵循相同的 JsonAPI 规范。此外,他们都有相同的需求,即:

  • 检索数据
  • 反序列化并格式化它
  • 验证其格式
  • 执行错误处理(数据质量、网络)
  • 与应用刷新和其他数据/工作流同步
  • 缓存数据并保持其最新

说够了,下面是我们的useData钩子代码:

import { useCallback } from 'react';
import { useQuery, useQueryClient } from 'react-query';
import { ZodObject, infer as Infer } from 'zod';
import { useApi } from 'hooks';
import { metaBuilder, MetaInstance } from 'models';

interface Options {
  forceCallApi?: boolean;
  preventGetData?: boolean;
}

interface ApiData<T> {
  data?: T;
  meta?: MetaInstance;
}

export interface DataResult<Output> {
  data?: Output;
  meta: any;
  loading: boolean;
  errors: Error[];
  refresh: () => Promise<void>;
}

export const useData = <Model extends ZodObject<any>, ModelType = Infer<Model>, Output extends ModelType = ModelType>(
  builder: (data: ModelType) => Output,
  url: string,
  { forceCallApi = false, preventGetData = false }: Options = {}
): DataResult<Output> => {
  const queryClient = useQueryClient();

  const { getData } = useApi(url);

  const getDataFromApi = useCallback(async (): Promise<ApiData<Output>> => {
    // here we get the data (and meta) using getData, and handle errors and various states
    return { data: builder(apiData), meta: metaBuilder(apiMeta) }
  }, [getData, builder, queryClient, url, forceCallApi]);

  const { data: getDataResult, isLoading, error } = useQuery<ApiData<Output>, Error>(
    [url, forceCallApi],
    getDataFromApi,
    { enabled: !preventGetData, cacheTime: forceCallApi ? 0 : Infinity }
  );

  const refresh = useCallback(async () => {
    await queryClient.refetchQueries([url, forceCallApi], {
      exact: true,
    });
  }, [queryClient, url, forceCallApi]);

  return {
    data: getDataResult?.data,
    meta: getDataResult?.meta,
    loading: isLoading,
    errors: ([error]).filter((error) => error !== null) as Error[],
    refresh,
  };
};

正如您所看到的,这个钩子接受三个参数,当这些参数组合在一起时,我们可以获得以下所有功能:

  • 一个“构建器”功能,用于转换和增强供我们的组件使用的数据
  • 检索数据的 API 端点的 URL
  • 可选参数。例如,在调用 API 之前忽略缓存或等待一些其他数据准备好

结果是我们的组件不再需要管理所有这些。我们已经抽象和封装了复杂性。

useData钩子返回一些我们可以在组件中使用的值:

  • 一些状态:加载和错误(如果有)
  • 数据(如果有)
  • 元信息(如果有,例如分页信息)
  • 刷新函数(通过再次调用 API 来刷新数据)

建筑数据

让我们更深入地看看这段代码做什么以及我们如何使用它。

用 Zod 进行模式验证

得到数据是一回事。确保数据的结构或类型正确是另一个问题。复杂的数据类型需要像 yupzod 这样的验证工具,它们强制执行有效和干净的方法,并提供工具和错误处理基于错误类型的运行时错误。我们的前端依赖于强类型数据集,因此验证阶段对我们来说至关重要。

我们用 zod 。Zod 用于建立数据模型。例如,我们应用程序的模型可能是这样的:

import { object, string, number } from 'zod';

const Application = object({
  applicationId: string(),
  name: string(),
  ownerEmail: string(),
  planVersion: number(),
  planName: string(),
});

然后,为了构建我们的构建器函数,我们在 zod 模型上使用内部构建的通用助手。这个助手有两个参数:

  • 我们的数据模型(上面例子中的应用)
  • 用于丰富该模型的转换函数。

在我们的例子中,变压器看起来像这样:

import { infer as Infer } from 'zod';

const transformer = (application: Infer<typeof Application>) => ({
  ...application,
  get plan() {
    return `${application.planName} v${application.planVersion}`;
  },
});

丰富的另一个例子是如果一个模型有一个日期:我们通常希望它公开一个 javascript 日期而不是字符串日期。

我们有两个版本的助手函数(一个用于对象,一个用于数组)。下面是第一个:

import type { ZodType, TypeOf, infer as Infer } from 'zod';
import { SentryClient } from 'utils/sentry';

export const buildObjectModel = <
  Model extends ZodType<any>,
  ModelType = Infer<Model>,
  Output extends ModelType = ModelType
>(
  model: Model,
  transformer: (data: TypeOf<Model>) => Output
): ((data: ModelType) => Output) => {
  return (data: ModelType) => {
    const validation = model.safeParse(data);
    if (!validation.success) {
      SentryClient.sendError(validation.error, { extra: { data } });
      console.error('zod error:', validation.error, 'data object is:', data);
      return transformer(data);
    }
    return transformer(validation.data);
  };
};

zod 的类型化输出非常干净,看起来像我们自己编写的 typescript 类型,另外 zod 使用我们的模型解析 JSON。为了安全起见,我们使用 zod 的safeParse方法,该方法允许我们在解析步骤出错的情况下“按原样”发送回 JSON。我们的错误跟踪工具 Sentry 也会收到一个错误。

在我们的例子中,我们的构建函数看起来像这样:

export const applicationBuilder = buildObjectModel(Application, transformer);
// and for the record, here is how to get the type output by this builder:
export type ApplicationModel = ReturnType<typeof applicationBuilder>;
// which looks like this in your code editor:
// type ApplicationModel = {
//   plan: string;
//   applicationId: string;
//   name: string;
//   ownerEmail: string;
//   planVersion: number;
//   planName: string;
// }

调用 API

在内部,我们使用另一个定制钩子useApi(不到 200 行代码)来处理 GET/POST/PATCH/DELETE。在这个钩子中,我们使用 axios 调用后端 API 并执行所有典型的 CRUD 功能。例如,在读取端,Axios 将我们收到的数据进行反序列化,然后将它从 JSON API 规范转换为更经典的 JSON,并从 snake_case 转换为 camelCase。它还处理我们收到的任何元信息。

此外,从流程的角度来看,它管理请求取消和调用 API 时的错误。

缓存数据

至此,我们可以总结一下:useApi钩子获取数据,然后通过构建器进行验证和丰富;并且使用反应查询缓存结果数据。

我们实现了 react-query 来缓存前端的数据,使用 API 端点 URL 作为缓存键。React-query 使用上面提到的useApi钩子来获取、同步、更新和缓存远程数据,允许我们用非常小的代码库利用所有这些功能。

在此基础上,我们要做的就是实现 react-query 的提供者。为此,我们构建了一个小的 react 组件:

import { FC } from 'react';
import { QueryClient, QueryClientProvider, QueryClientProviderProps } from 'react-query';

export const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      refetchOnWindowFocus: false,
      refetchInterval: false,
      refetchIntervalInBackground: false,
      refetchOnMount: false,
      refetchOnReconnect: false,
      retry: false,
    },
  },
});

type IProps = Omit<QueryClientProviderProps, 'client'> & {
  client?: QueryClient;
};

export const GlobalContextProvider: FC<IProps> = ({
  children,
  client = queryClient,
  ...props
}) => (
  <QueryClientProvider {...props} client={client}>
    {children}
  </QueryClientProvider>
);

最重要的是,它管理我们的缓存。我们有许多组件需要相同的数据,所以我们希望避免不必要的网络流量来检索相同的信息。性能始终是关键。限制执行不必要的网络调用的潜在错误也是如此。现在,有了缓存,如果一个组件请求数据,我们的缓存将存储该数据并将其提供给请求相同信息的其他组件。在后台,React-query 当然会确保缓存中的数据保持最新。

总而言之,这里有一个使用这个useData钩子和我们上面定义的应用程序模型构建的组件的例子:

import { FC } from 'react';

interface ApplicationProps {
  applicationId: string;
}

export const ApplicationCard: FC<ApplicationProps> = ({ applicationId }) => {
  const { loading, data: application, errors } = useData(applicationBuilder, `/applications/${applicationId}`);

  return loading ? (
    <div>loading...</div>
  ) : errors.length > 0 ? (
    <div>{errors.map(error => (<div>{error}</div>))}</div>
  ) : (
    <div>
      <div>{application.applicationId}</div>
      <div>{application.ownerEmail}</div>
      <div>{application.name}</div>
      <div>{application.plan}</div>
    </div>
  );
};

如你所见,我们的useData钩子让我们标准化加载和错误状态,鼓励我们编写处理这些状态的可重用组件。例如,我们有可重用的StateCardStateContainer组件。有了现在容易获得的数据,我们就可以着手集成那些可重用的组件,并专注于构建一个出色的前端体验——干净、功能全面、可扩展。

从 Heroku 到 Google Kubernetes 引擎的挑战性迁移

原文:https://www.algolia.com/blog/engineering/challenging-migration-heroku-google-kubernetes-engine/

对于一个仅由开发人员组成的团队来说,Heroku 的简单性使我们很容易将原型投入生产。然而,随着我们产品的成熟和客户期望的增长,我们需要对我们的基础设施有更强的健壮性和细粒度的控制。我们知道 Kubernetes 是我们的正确选择。然而,迁移并不是一项简单的任务。

这是背景故事。大约一年前,我们决定为 Algolia 开发一个网络爬虫原型。如你所知,Algolia 的用户通过使用 Algolia 的搜索 API,将他们的数据上传到一个可搜索的索引,从而使他们的内容可被搜索。一些潜在客户问我们是否可以通过抓取他们网站的内容,自动填充他们的搜索索引。对此,我们很快在 Node.js 中搭建了一个网络爬虫原型,并部署到 Heroku 上。

我们没有失望:添加数据库服务器或 RabbitMQ 之类的服务只需点击一下鼠标。我们所要做的就是git push部署新版本,然后我们的原型就投入生产了。

几个月后,我们的网络爬虫在 Algolia 的客户中流行起来,许多其他人也开始表达对它的需求。

然而,爬虫需要很多组件——一些在后台运行,另一些按需运行;此外,一些客户需要定制组件。随着产品变得越来越复杂,我们向基础设施同事寻求帮助。

这种复杂性的一个很好的例子是 IP 白名单。我们的一个客户希望我们从一个固定的 IP 地址开始爬行,这样他们就可以将该 IP 列入白名单进行高速爬行,而不会受到他们的负载平衡器的限制。只有两个工程师在开发爬虫,所以我们让其他同事用固定的 IP 地址建立一个 HTTP 代理。然而,随着客户数量的增长,越来越多的人开始提出同样的要求,我们的基础架构团队告诉我们,是时候让我们自己来解决这个问题了。

因此,我们决定迁移到一个云平台,该平台将对我们的基础设施提供更多的控制,并最终允许我们以编程方式设置和拆除代理。这就是我们如何决定是时候从 Heroku 迁移到谷歌 Kubernetes 引擎(GKE) 了。作为第一步,我们希望让我们的爬虫在 GKE 集群上工作,尽可能少地修改代码。只有这样,我们才能使它在生产中更加健壮和可维护。

这远不像我们最初想的那样简单。

在本文中,我们描述了我们的爬虫的架构,并解释了我们如何让它在 GKE 上运行,分享了我们在迁移时解决的三个挑战。然后,我们总结了迁移带来的一些经验教训和好处。

设置事物

在我们深入兔子洞之前,让我们对网络爬虫做一个概述——它的架构,底层服务,以及我们如何让它在本地和生产中工作。

爬虫本身是一组三个组件:

  • 工人负责获取网页,从其 HTML 内容中提取信息,并将这些信息存储到 Algolia 索引中;
  • 管理器负责将待爬行的 URL、与每个客户相关联的规则和约束(例如,速率限制)以及他们可能已经请求的任何配置更新分派给工作器;
  • web 服务器负责处理寻址到爬虫的 API 请求(例如,从 Algolia 仪表板)并服务于其自己的管理和监视仪表板。

这些组件位于几个服务之上:

  • RabbitMQ 队列,保存要爬网的 URL 列表;
  • 一个 PostgreSQL 数据库,保存爬虫的状态,如客户配置、URL 列表和外部数据,以提高搜索记录的相关性;
  • 一个 Redis 存储,保存我们仪表板的用户会话;
  • Tika 服务器,作为代理从 PDF 文件和其他类型的非 HTML 文档中提取内容;
  • 和一个 Rendertron 服务器,它充当代理,从需要执行 JavaScript 代码以在 DOM 中呈现内容的单页面应用程序中提取内容。

为了在开发爬虫时本地运行所有这些组件和服务,我们设置了一个docker-compose文件,为它们指定 Docker 映像和参数。在 Heroku 上,我们为每个服务激活了附加组件,并编写了一个Procfile来指定应该执行什么命令来启动每个组件。然后,通过简单地执行git push heroku master,我们确保了组件的最新版本会自动上传并在我们的 Heroku dynos 中启动。轻而易举。

Kubernetes 是一个可以根据开发者定义的服务部署来分派 pods 的系统。我们的第一个目标是让我们的组件和服务以与我们现有的docker-compose.yaml文件相同的方式运行。我们只需要将文件转换成 Kubernetes 格式,并找到正确的命令来启动它们。

在花了几个小时试图用 kompose 做这件事之后,没有太大的成功,我们决定寻求帮助。一位同事以三种方式帮助了我们:在 GKE 上建立一个集群,为我们提供了用于部署和服务的 Kubernetes 定义文件的示例,并建议我们使用由 Google 管理的服务(即 PubSub 和 CloudSQL),而不是将我们自己的 RabbitMQ 和 PostgreSQL docker 容器作为 pods 运行。这都是很好的建议,但是太快了。为了更好地理解 Kubernetes 的工作方式,并对它更有信心,我们决定一次解决一个问题:首先,通过镜像我们的docker-compose定义,让我们的服务在容器中运行,只有到那时,才考虑用谷歌管理的服务来取代它们。

因此,我们开始为每个服务编写 Kubernetes 定义文件。

实现——让我们先让 Kubernetes 运行起来

我们这样定义它们:

总结一下:

  • 部署是对可以部署、在给定数量的实例上运行和停止的软件的描述;
  • 服务是可以处理来自系统其他部分的请求的部署。

例如,要在 Kubernetes 上运行 RabbitMQ,我们需要:

  • 通过指定运行 RabbitMQ 服务器的 Docker 映像来定义部署;
  • 并定义一个公开两个端口的服务:一个用于 AMQP 查询,一个可选端口用于管理 UI。

除了需要被定义为服务的 web 服务器之外,我们以与部署相同的方式定义了我们的爬虫组件。因为这些组件不是 DockerHub 上的公共 Docker 映像,所以我们还必须编写一个 Docker 文件来从我们的源代码生成一个映像,将该映像上传到我们的 Google Registry,然后从我们的三个部署中引用它的标识符。为此,我们必须学习如何使用 gcloud 和 kubectl 命令行界面(CLI)工具。

在 YAML 文件中定义了我们的部署和服务之后,我们需要它们相互连接。例如,我们的三个爬虫组件期望环境变量包含它需要连接的所有服务的 URL。在 Heroku 中,我们有一个所有 dynos 共享的全局环境变量列表。我们可以从 Heroku 仪表板或通过他们的 CLI 编辑它们。也就是说,我们的大多数插件(例如托管 PostgreSQL 数据库)会自动设置环境变量来提供对其数据的直接访问,因此我们不需要做太多工作。

在 Kubernetes 世界中,环境变量是在部署级别设置的。这意味着每个部署文件都应该包含必要的环境变量的值。此外,考虑到 Kubernetes 可以随时动态终止和重启不同节点(例如,集群的物理机器)上的部署,它们的 IP 地址和端口可以改变。因此,我们不能为组件的环境变量提供硬编码的值。

幸运的是,我们了解到 Kubernetes 为所有服务动态生成集群范围的环境变量,格式为<SERVICE-NAME>_SERVICE_HOST<SERVICE-NAME>_SERVICE_PORT。我们还发现,通过使用以下 YAML 语法,可以将环境变量的值注入到其他变量中:

像密码这样的机密环境变量需要不同的过程。为此,我们使用了 Kubernetes 秘密

秘密是可以保存机密值的 Kubernetes 实体。建议将它们用于存储密码、证书和任何其他类型的私人信息:这些值永远不会以纯文本形式添加到 YAML 文件中,访问它们需要特殊权限。

要存储为环境变量,还必须在需要的部署的 YAML 文件中声明机密。然而,它们的结构与环境变量不同:我们需要挂载一个来加载秘密,然后将它们的值作为环境变量导入。

我们后来了解到,使用 ConfigMaps 可以在几个部署之间共享环境变量。这些是 Kubernetes 实体,可以保存几个命名值,并作为环境变量导入到部署中。

使用 ConfigMaps 阻止了我们复制配置,但是我们找不到任何方法来包含秘密,或者任何其他实体,这将在配置映射中包装其他环境变量的值(例如,使用$()语法,如上所示)。因此,我们最终将 ConfigMaps 用于不变的配置值,将 Secrets 用于密码和密钥,将 inline 环境变量定义用于依赖于其他环境变量的环境变量。
此外,由于我们希望我们的 YAML 文件在不同的域名上提供两个不同的集群(例如,生产和暂存),我们最终使用 sed 将其中一些转换为模板并编写一个脚本,将它们转换为最终的 YAML 文件。我们非常确定有一个更标准的方法来实现这一点,但考虑到我们能够在这一迁移上花费的时间,这种方法对我们来说是一个很好的妥协。

那时,我们已经编写了 10 个 YAML 文件和 5 个 bash 脚本来定义我们的组件和服务。我们终于准备好供应我们的 GKE 集群,并看到他们运行。上传我们的 YAML 文件并让它们在我们的集群上运行的命令是:kubectl apply -f .

为了举例说明我们编写的脚本,下面列出了在部署可能包含数据库迁移的更新后,我们为重启所有组件而运行的命令:

没那么快。一位同事警告我们,为了使我们的仪表板可以从互联网上访问,我们必须定义一个入口资源来将我们的“web”服务连接到 Google 的 HTTP 负载平衡器。

他举了一个例子,结果是这样的:

几分钟后,我们的仪表盘终于启动了!

遗憾的是,在允许 HTTPS 访问该端点之前,我们无法使用单点登录系统登录。让我们深入研究一下。

有线 SSL 证书

在 Heroku 世界中,启用 HTTPS/SSL 是小菜一碟。你所要做的就是点击一个按钮。

Heroku 会使用 Let's Encrypt 自动生成一个免费的 SSL 证书,回复 ACME 挑战,并每 3 个月自动重复该过程以在我们不知情的情况下更新证书。刚刚成功了。

我们希望 Google 也能提供一个简单的方法来在我们的 GKE 集群上设置它。再想想!GKE 的文档明确指出,虽然可以通过 kubectl 或 Google Cloud Console 将 SSL 证书与 Google 的负载平衡器关联起来,但它们没有提供生成证书的方法。

我们使用 Google 来寻找解决方案,我们发现有几个项目承诺为您的 GKE 集群生成和更新一个 SSL 证书,并且会自动将它关联到我们的负载平衡器。不幸的是,它们都包含了免责声明,如“不要在生产中使用”或“我们目前不提供关于 API 稳定性的强有力的保证”。因此,我们决定,在 Google 提供一种可靠的方法来自动完成这项工作之前,我们将手动生成一个 Let's Encrypt 证书,然后将其附加到我们的负载平衡器上。唯一的问题是,我们需要记住每隔几个月做一次。

我们的爬虫在那时是完全功能性的。迁移前唯一剩下的问题是 PostgreSQL 数据库中的数据可能会丢失,因为它仍然从 Docker 容器中运行,没有持久卷,也没有任何备份例程。

免责声明:自从我们迁移以来,其他解决方案让这个过程变得更加容易。我们还没试过。

插入托管数据库

数据是一件严肃的事情。我们的客户依赖于我们,因此他们的数据应该随时可用,无论规模如何都能响应,没有泄漏,并且在发生事故时能够快速恢复。这些都是信任托管数据库服务,而不是从 Kubernetes 可以随时终止的 Docker 容器中运行数据库的绝佳理由。

作为谷歌云生态系统的一部分,CloudSQL 产品最近将他们的托管 PostgreSQL 服务宣传为“生产就绪”,所以这对我们来说是显而易见的:我们应该将我们的爬虫插入到该服务中。我们的同事告诉我们,我们必须集成一个所谓的 CloudSQL 代理来连接到 CloudSQL 管理的 PostgreSQL 服务器。

为此,我们遵循了谷歌提供的教程。除了用 CloudSQL 代理服务替换 PostgreSQL 服务之外,我们还必须:

  • 创建数据库用户;
  • 将用户密码安全地存储为 Kubernetes 秘密;
  • 创建一个服务帐户,从我们的组件访问 CloudSQL 实例;
  • 在所有需要连接到数据库的部署中,将秘密作为动态环境变量加载。

尽管我们得到了帮助,但要将它集成到我们的系统中并不容易。Google 提供的教程解释了如何以“sidecar”的方式运行代理,这意味着 CloudSQL 代理将与应用程序本身运行在同一个 Pod 上,从而可以轻松连接到该代理。

在我们的系统中,我们有三个独立的组件需要访问同一个数据库,我们觉得给每个组件附加一个独立的 CloudSQL 代理会有些过头,而且更难维护。因此,我们必须花时间更好地理解如何配置部署。除此之外,有时有必要从集群外部访问我们的生产数据库(例如,出于调试目的从我们的开发笔记本电脑访问)。由于所有数据库连接都必须通过 CloudSQL 代理,我们有两个选择:

  • 通过在我们的生产集群中运行的 CloudSQL 代理进行连接;
  • 或者设置一个本地 CloudSQL 代理,每个开发人员有一个专用的服务帐户。

出于安全原因,我们选择了第二种解决方案。在下载了与我们为每个人创建的服务帐户相关联的 JSON 密钥之后,下面是我们如何能够在我们的笔记本电脑上运行 CloudSQL 代理:

如果您决定遵循这条路线,请确保您没有将与您的服务帐户相关联的 JSON 密钥保存在您的笔记本电脑上。我们建议使用像 Vault 这样的系统来更安全地存储这些密钥,或者甚至在每次连接时生成一个新的短期密钥。

免责声明:现在可以直接从 GKE 访问 CloudSQL 数据库了。我们还没试过这个。

结论

迁移需要时间,尽管我们采取了一些捷径,例如首先镜像我们系统的 docker 容器以达到 iso 功能阶段,然后用托管解决方案替换我们的数据库容器。最后,我们很高兴采取了循序渐进的方法。它让我们更好地了解 Kubernetes 如何工作,并掌握我们用来维护 GKE 集群的工具。它还防止我们不得不一次处理一个以上的问题,鉴于 GKE 的复杂性以及在这个生态系统中解决问题的无数方式,这可能成为沮丧和消极情绪的主要来源。

我们花了几周时间让我们的爬虫在 GKE 上可持续运行,并最终关闭了我们的 Heroku dynos 和附加组件。虽然迁移比我们预期的更加繁琐和不简单——尽管我们得到了拥有 Kubernetes 和谷歌云产品经验的同事的帮助——但最终,我们对它带来的东西感到满意。例如:

  • 现在,我们对每个组件的硬件要求及其独立行为有了更好的理解。迁移到 Kubernetes 使它们在动态基础设施上更加健壮(例如,可以随时关闭和重新分配不同 IP 地址的节点)。
  • 我们目前正在探索如何自动水平扩展我们“工作人员”部署的副本数量,并且比我们在 Heroku 上所能做到的更有效。
  • 我们相信,我们能够根据客户的需求,在我们的集群上以编程方式设置静态 IP 代理服务器。

好消息是,Google Kubernetes 引擎最近的发展已经解决了我们的一些困难,使这个过程变得更加容易。

顺便说一下,我们将于 3 月 7 日在巴黎办公室与一些谷歌专家组织一次关于 Kubernetes 的活动。如果那时你在欧洲,请随意注册

作者感谢 Rémy-Christophe Schermesser、Sarah Dayan、Peter Villani、Angélique Fey 和 Tiphaine Gillet 对本文的贡献。以及所有帮忙校对的同事。❤️

如何选择合适的电子商务网站搜索工具

原文:https://www.algolia.com/blog/ecommerce/choosing-ecommerce-site-search/

因此,你的网站需要一个电子商务网站搜索解决方案。

现在,你可能正在想象研究、比较、测试并最终选择一个网站搜索解决方案的艰巨任务。在你沉溺于并排的比较或屈服于另一个普通演示视频的沉闷头痛之前,问自己这个问题:

新的电子商务网站搜索解决方案应该解决哪些首要需求或挑战?

  • it 部门需要提高客户参与度吗?
  • 您是否需要一个更加简单而直观的搜索界面?
  • 你想通过网站上的搜索活动推动更多的销售和转化吗?
  • 您是否正在为您的搜索工具寻找更好的投资回报?

考虑到您的首要任务,您可以专注于将推动结果的相关功能。您的业务和客户需求可以构成您分析的基础,也有助于您为供应商确定问题。毕竟,如果一个网站搜索工具不能处理你的电子商务网站目前做的所有事情,以及它未来需要做的事情,为什么还要有一个网站搜索工具呢?

一旦你确认你所关注的网站搜索工具涵盖了基本内容,专注于你的需求将确保你找到最好的电子商务网站搜索合作伙伴。

伟大的电子商务网站搜索的基础

相关结果

可靠性、覆盖率和速度

网站搜索工具必备功能

  1. 分度
  2. 定制
  3. 个性化
  4. 分析学
  5. 商品销售工具
  6. 人工智能和机器学习

启动并运行你的电子商务网站搜索工具

实施注意事项

数据评估

管理和维护

支持规格

集成

这一切要花多少钱?

计算站点搜索的 ROI

你应该购买还是建立你的电子商务搜索?

寻找最佳电子商务网站搜索合作伙伴

电子商务网站搜索同

伟大电子商务网站搜索的基础

为了有效,所有的电子商务网站搜索工具都需要一些基本的东西:

相关结果

电子商务工具的基本功能是寻找和排列最符合客户查询的结果。虽然这看起来很简单,但所有电子商务网站搜索解决方案的搜索算法并不都是一样的。

一些算法依赖于简单的关键字匹配。其他人则依赖于该术语在页面上出现的频率、点赞或评论的数量,或者这些因素的某种组合。然而,单靠这些方法并不能获得令人满意的结果——对于一个强大的搜索功能,你需要更多。

该算法应考虑每个搜索 的 上下文,并基于文本和业务相关性呈现结果。为了提供一流的相关性,工具应该使用 排名标准 ,包括:

  1. 容忍用户输入错误
  2. 区分不同产品属性的重要性
  3. 允许企业设置自定义排名标准
  4. 如果与您的业务相关,按距离排列结果
  5. 动态过滤结果

搜索引擎应该按照 的顺序将这些结果呈现给用户

为了向用户提供最大价值,电子商务网站搜索也应该在产品的同时呈现相关内容。例如,关于当前相关趋势的产品指南或博客文章可以与产品一起出现在搜索中。这促进了搜索和发现,增加了用户对网站的参与,并为网站搜索者增加了价值。

可靠性、覆盖率和速度

开箱即用的解决方案以快速实施的承诺吸引着企业。然而,如果解决方案无法提供可靠性、覆盖范围和速度,那么在安装上节省的资金可能会增加维护和保养费用。

  • 速度。 创建一个快速的站点搜索很容易,做一个相关的也相对容易。但是 两者都掌握 很难。等待相关结果的几秒钟的延迟会累积起来,损害用户体验。网站搜索供应商应维护广泛的基础设施,以支持为您的所有客户提供即时搜索和即时搜索结果 而没有延迟
  • 全球覆盖。 每一个网站,尤其是大型网站,都需要保证所有客户都能获得出色的搜索体验——不管他们在哪里。该公司应该拥有基础设施,如一个 全球分布式搜索网络 ,以确保每个客户都享有一流的网站搜索性能。
  • 可靠性。停机会破坏客户对你的品牌的认知和他们的体验。如果供应商不能保证世界各地的数据中心确保 最大正常运行时间 ,你可能会想去别处看看。

网站搜索工具的必备功能

现在您已经有了一些基本要求,您需要考虑一些额外的高级功能来提升您和您的客户的搜索体验。让我们考虑一些主要领域:

  1. 索引
  2. 定制
  3. 个性化
  4. 分析学
  5. 销售工具
  6. 人工智能和机器学习

1。分度

密切关注你考虑的每个网站搜索工具的索引工作方式。

对于某些解决方案,索引的频率和索引项目的数量取决于您的工资级别。如果你的网站每天或每周频繁地添加产品,一个只按月索引的解决方案是行不通的。新产品需要一上网站就出现在用户的搜索中,而不是一个月后。

如果你的网站包含高度专业化的内容,寻找支持非产品内容索引功能的工具,如博客帖子、指南或客户评论。

2。定制

许多网站搜索工具都是现成的,这对于快速实施来说是非常理想的。然而,代价是这些工具很难或者不可能定制。开源解决方案拥有最多的定制选项,但是实现、维护和更新需要大量资源。

搜索即服务解决方案通常恰到好处,具有快速实施、高度定制以及较低的维护和创新长期成本。

考虑您的业务可能需要的各种配置:

  1. 您能否增强用户界面/UX 功能以满足您的业务需求?
  2. 您能保留解决方案之前实施的定制吗?
  3. 你能应用自定义业务逻辑吗?

你的搜索解决方案应该完全符合你的商业案例。如果解决方案缺乏满足你的愿景的能力,从你的列表中删除它是一个好主意。

3。个性化

个性化搜索结果使您能够将文本相关性、业务相关性和商品相关性结合起来,以满足客户的意图。它根据过去的用户行为来引导用户未来看到什么。

更加个性化的搜索体验有助于客户发现更多相关内容以及新产品和资源。这带来了更高的转化率、更大的平均购物车、更高的净推广分数和更多的客户参与度。

个性化 功能应该:

  1. 易于实施和使用
  2. 增加参与度
  3. 减少站点反弹
  4. 改善客户旅程

4。分析

电子商务网站搜索工具可以提供强大的商业洞察力。一旦你确定了你想通过网站搜索达到的目标,寻找能够提供与这些目标相关的数据的工具。

你的搜索工具应该:

  • 帮助您跟踪转化率、点击量、“无结果”查询、跳出率、搜索退出率、平均购物车大小等等
  • 在用户友好的仪表盘中显示信息
  • 提供自定义报表
  • 帮助您推动改进,例如突出某些产品,创建内容以填补关键空白,以及改进结果页面以阻止搜索退出

没有搜索分析,你就无法做出数据驱动的决策来改进你的网站。

5。销售工具

商品销售 是电子商务战略中必不可少的组成部分。你选择的网站搜索工具中的销售工具应该足够直观,网站所有者可以自行重新配置相关性和重新排列因素,以改善买家体验。

一些功能包括但不限于:

  1. 突出特定品牌
  2. 提升特定查询的特定项目或项目组的能力
  3. 在搜索结果的横幅中推广商品

在选择网站搜索解决方案时,您应该评估新工具将如何与您当前的销售配置配合使用。您已经投入时间和精力来开展营销活动,因此您选择的解决方案应该能够有效地支持这些活动。

6。人工智能和机器学习

供应商经常提到机器学习(ML)、人工智能(AI)和自然语言处理(NLP)来使他们的解决方案脱颖而出。然而,这些流行语的重要性取决于它们的相关性和实施。

机器学习、人工智能、自然语言处理是相互关联的概念。ML 和 NLP 是帮助开发和改进人工智能的技术,人工智能反过来为自动化提供智能。

一些公司夸口说,人工智能可以完全自动调整和改进你的网站搜索。虽然释放开发人员的能力似乎是有益的,但是请记住,您最了解您的业务。你真的希望 AI 完全接管你在线战略的重要部分吗?

人工智能应该提出建议,提供商业智能,帮助你做出最好的改进。没有你的直接输入,它不应该做出改变。

如有疑问,请求演示并询问有关解决方案如何使用 AI、ML 和 NLP 的详细问题。如果演示者不能准确解释技术是如何工作的,或者试图向你过度推销它的能力,你就要小心了。

启动并运行你的电子商务网站搜索工具

当你为你的电子商务网站评估网站搜索解决方案时,考虑它将如何在网站上实现。

实施注意事项

如果业务需求和技术需求没有明确定义,实施可能会让企业感到头疼,而客户网站搜索可以提供帮助。有必要考虑以下几点:

  1. 您的实施时间表是什么?
  2. 实施所选解决方案需要什么?
  3. 您是否有合适的开发人员资源来执行实施?
  4. 供应商是否支持实施,或者这是一个完全自助的过程?
  5. 从您当前的设置进行迁移将如何影响您当前的数据、跟踪、销售工具或其他定制?
  6. 实施期间会有停机时间吗?

提前计划是保证一个成功实施的最好方法。有些解决方案需要您购买服务器或安装软件才能开始;尽早了解这一点很重要,这样你就可以相应地规划资源。其他解决方案可能就像传输一些数据和调用 API 一样简单。

实施过程越复杂,评估开发人员的能力和技能以及了解搜索提供商团队的参与程度就越重要。如果您需要考虑高水平的定制或复杂的变量,请寻找一个在整个过程中提供定制实施服务和支持的站点搜索解决方案。

数据评估

数据驱动商业的很多方面,搜索也不例外。评估您当前的数据需求和数据状态,以了解新工具将如何适应:

  1. 你的数据现在处于什么状态?是否需要清洗或改造后才能使用?
  2. 新的网站搜索解决方案会接受你的数据转移吗?
  3. 新的解决方案将如何整合或利用您现有的数据?
  4. 新工具能让你收集和分析新数据吗?
  5. 重要的 KPI 如何在搜索工具中显示?

如果你已经用旧工具收集了搜索数据,检查这些数据是否可以集成到你的新工具中。如果这些数据对您来说至关重要,那么您将需要一个能够集成这些数据的解决方案。

你也要放眼未来。该工具是否允许您生成新数据并为您提供分析数据的工具?如果没有,想想这如何限制了你从搜索数据中学习的能力,以及如何随着时间的推移改进你的搜索功能。

管理和维护

一旦实施了新工具,就需要持续的管理来确保它以最佳状态运行。

使用“搜索即服务”解决方案,我们将为您处理维护和保养工作。由于基于云的基础设施,该工具的新更新和创新立即可用。

对于大多数其他工具,你必须自己完成这项工作。您将负责硬件成本,构建适合您的技术堆栈的搜索工具(如果您构建自己的工具),实施数据更改和补丁,以及解决日常问题。在这种情况下,你会想要考虑:

  1. 你和你的团队需要多长时间来了解产品的来龙去脉?
  2. 什么类型的资源(硬件、软件、开发团队等。)是新解决方案所必需的吗?
  3. 该项目是否需要额外的员工或培训?专业技能呢?
  4. 你将如何继续创新和迭代你的搜索解决方案?

考虑负责配置控制和根据需求变化或波动微调系统的用户。这个用户能直观地使用系统吗?用户能够按照产品文档完成不熟悉的任务吗?如果没有,寻找其他选择。

支持规格

即使有专门的资源、熟练的团队成员和丰富的经验,也总会有需要额外支持的时候。支持应超越实现,以涵盖意外问题。

确保为实施和未来需求提供可接受的支持。要考虑的常见要求包括:

  1. 您是否需要专门的专家,或者您是否可以利用特定产品的详细文档?请记住,两者都是这个问题可以接受的答案。
  2. 支持团队什么时候可以为您服务?
  3. 如何联系支持团队(即电话、电子邮件、聊天等)?
  4. 将实施哪些 SLA(服务水平协议)?
  5. 支持是分层的吗?层级基础是紧急程度还是包裹级别?
  6. 该解决方案是否为开发人员提供了可靠的文档?

这里需要注意的是,实施和未来需求不一定需要相同类型/级别的支持。您可以使用高水平的专用实施支持,但只需要一个快速聊天来指导您在未来找到正确的自助文档。

集成

确保您选择的解决方案与您当前的电子商务平台及其配置的任何扩展相集成。许多网站搜索与常见的电子商务平台,如 Magento 或 Shopify,以及常见的 CMS 平台,如 WordPress 和 Zendesk 一起工作,但没有什么是保证的。创建一个你选择的站点搜索工具必须支持的框架、平台和 API 需求的列表。

这一切要花多少钱?

成本问题是不可避免的,而且可能会极大地影响你的决定。比较价格时,请记住,从长远来看,在基本功能上偷工减料可能会让你付出更高的代价。看看价格结构,决定什么最适合你的公司——不只是现在,而是未来随着你的业务和网站的发展。

当你评估网站搜索解决方案时,考虑一下 无形的利益 以及有形的利益。优秀的网站搜索会影响客户体验、转化率,并最终影响底线。

计算站点搜索的 ROI

在决定最适合你的网站搜索需求时,有三个类别需要考虑:开源、现成的和搜索即服务

  • 开源工具可以免费使用和下载,但是会从人员需求、硬件需求和用于设计、维护和改进你的搜索引擎的资源上产生巨大的成本。像这样的劳动密集型搜索项目,成本会迅速增加。虽然初始成本可能会更低,但假设你有一个完善的工具,你的公司需要很长时间才能获得投资收益。
  • 现成的工具 因其易于实施和可预测的价格而吸引用户。不幸的是,维护和保养会产生意想不到的费用。这些工具还缺乏业务案例的可定制性。这意味着如果工具不能被定制以最有效地接触到您的客户,收入就会损失。
  • 搜索即服务工具 提供托管实施、持续创新、持续维护和强大的定制工具。随着时间的推移,搜索即服务工具通常比其他网站搜索方法产生更大的投资回报率。

你应该购买还是建立你的电子商务搜索?

因此,如果你的公司有资源建立自己的定制搜索,为什么不冒险一试呢?

事实是,在内部构建一个定制的搜索工具是一个复杂、昂贵的项目。 打造自己的搜索工具 意思是你负责:

  • 从头开始构建工具。
  • 实现搜索工具。
  • 记录工具的技术和面向用户的需求。
  • 购买搜索所需的硬件/软件/附件。
  • 处理所有未来发展。
  • 承担所有维护和故障排除费用。
  • 微调搜索引擎的相关性。

除非你的开发人员有丰富的从头构建搜索引擎的经验,否则这可能是一项艰巨的任务,尤其是当事情不可避免地发生故障并需要排除故障时。

虽然开始时这似乎是一个不太昂贵的解决方案,但从长远来看,构建自己的工具可能会让你花费更多。

尽管如此,在某些时候,建立自己的搜索引擎是最好的选择,即使它很贵。例如,如果您有一个供应商产品不能充分满足的复杂、严格的专业需求。在这种情况下,在你用一个新项目让你的开发团队大吃一惊之前,花点时间直接和供应商的产品团队谈谈,看看他们是否是合适的合作伙伴。

寻找最佳电子商务网站搜索合作伙伴

无论您选择哪种网站搜索,供应商都应该作为合作伙伴,具备推动您的业务目标和愿景的能力。供应商应该拥有 可靠的基础设施 以及支持您未来发展的能力。他们还应该重视创新和不断改进。

总的来说,就是找到最适合你的业务案例,给你成长的空间。在你做之前不要安定下来。

除了无与伦比的速度和相关性,Algolia 还为其每个搜索合作伙伴带来了持续的创新。凭借无与伦比的开发人员资源和支持,您可以高枕无忧,因为您知道您的站点搜索每次都适用于每个用户。 观看我们的 演示 并阅读更多关于 我们的特色 看看为什么像 LaCoste、Dior 和 Birchbox trust Algolia 这样的电子商务网站。

如何选择合适的企业搜索解决方案

原文:https://www.algolia.com/blog/ux/choosing-the-right-enterprise-search-platform-whats-important/

网站搜索引擎不再是一个简单的工具,它可以从你网站上的任何地方调出搜索结果并呈现所请求的信息。现在,正确类型的企业搜索系统已经成为那些绝对可以决定你的事业成败的事情之一。

为了赢得客户和员工的青睐,今天的企业网站搜索必须是个性化的体验,能够随着个人用户知识的发展而发展,并考虑到他们早期的互动。拥有合适的企业搜索平台无疑可以让您的指标产生显著的变化。

如果你正在寻找最好的企业搜索软件来确保你网站的成功,做一些研究来确保你能自信地做出正确的购买决定是值得的。

在考虑潜在的企业搜索解决方案时,首先考虑有效的现代智能搜索在企业成功大局中的重要性非常重要,无论是对您的客户、员工还是承包商而言。您希望优先考虑将 企业搜索 作为您的客户和员工体验的支柱。

为什么这一点如此重要?因为这是一个行之有效的策略,可以产生连锁反应。它可以交付大大改进的业务成果,例如:

  • 更准确的数据 ,这些数据可用于更好地为您团队的销售和营销决策提供信息
  • 客户的个性化体验: 更好的数据意味着您可以根据相关性更准确地定制客户旅程
  • 更高的客户转换率: 更加个性化的用户体验可以让更多的人采取想要的行动
  • 一种统一的数据使用方法, 这种方法可以释放存储库中的信息,并促进团队成员之间的顺畅协作
  • 卓越的分析能力, 这意味着可以访问高质量的数据,从而做出更好的决策

在我们考虑企业搜索平台中的一些重要搜索功能之前,让我们确切地定义一下“企业搜索”的含义。

什么是企业搜索解决方案?

企业搜索 从表面上看,仅仅是一个为你的网页编制索引的搜索引擎。它的功能使最终用户能够更快地搜索并立即找到信息和产品,例如,比他们使用菜单在文档管理系统中费力地导航要快得多。

你可能认为内容管理方面的经典搜索功能是企业搜索引擎所能提供的全部,但你错了。企业搜索服务不仅仅是从数据库中提取和显示相关结果。

人们日常使用的消费平台上的搜索和发现体验正在不断改善,如 Spotify、谷歌搜索和网飞。这意味着人们期望更多来自 你的 网站的搜索。如果你渴望品牌忠诚度,但你的搜索体验达不到你的客户在其他企业网站上享受的标准,你可能没有办法获得这种忠诚度。

你知道吗,新一代的搜索应用程序甚至可以在用户在自动完成搜索查询中输入第二个字母之前就预测出他们在找什么?这些解决方案可以推荐人们可能感兴趣的商品,甚至在客户开始需要时建议重新订购定期购买的产品。这种量身定制的个性化已经成为黄金标准。

企业搜索须知

当你寻找一个能满足你公司目标的解决方案时,以下是你要记住的一些最重要的问题。

API vs 自制

首先要考虑的是:你有时间、金钱和专业知识来构建自己的搜索解决方案吗?

虽然定制的搜索和内容发现工具可以提供更多的适应和发展自由,但它也需要更多的资源来构建和维护。因此,对许多公司来说,走这条路在经济上或实际上都没有意义。

如果是你,下一个问题是:专业设计和创建的 API 会是最好的企业搜索工具选项吗?

搜索专家 设计、构建和维护的 API 往往比在内部组装解决方案更经济。搜索 API 也经常胜过自制的企业搜索解决方案,因为他们有一个完整的组织致力于使它们变得更好。

数据整合

企业搜索最突出的功能之一是能够从多个数据源(如 Salesforce 或 HubSpot)提取详细信息,以通知交互。如果您的平台具有有限的数据集成,您可能无法连接您组织选择的 CRM、CMS 或 KMS,从而使提供 全渠道交互 的任何希望都化为泡影。

人工智能能力

AI 用于管理大部分搜索引擎算法,但也可用于改善其他重要功能。

智能搜索和发现工具使用人工智能来处理来自各种集成的数据,并通过相关搜索通知与客户的营销互动,或 向员工提供相关信息 【通过 API 仪表板】在他们的内联网上搜索。

智能发现

大多数搜索引擎都提供发现功能。如果你曾经有过流媒体服务推荐的音乐或视频,或者注意到产品出现在你的亚马逊主页上,那么你就体验过智能发现工具的使用案例。

发现工具使用来自企业搜索平台的数据,向客户推荐他们可能感兴趣的产品和服务。这是一个很好的方法,可以在有能力的企业搜索的基础上建立更多样化的定位目标。

分析能力

分析是企业搜索中的一项关键功能。它为您的市场营销、销售和客户成功团队提供了关于客户寻求什么的宝贵数据,以帮助通知他们的方法。

例如,如果一个商业购物者在你的 B2B 网站上已经购买了一件商品,并且随后浏览了几件类似的商品,那么给他们打一个销售电话并提供一些折扣价格可能会更有成效。

一些分析功能走得更远。如果你为你的电子商务网站采用——或者想要创建——一个全渠道战略,你可以使用数据分析来更准确地锁定客户,并进行更个性化和更吸引人的互动。

例如,假设您发现越来越多的客户搜索您的在线商店提供的特定产品。在多面发现软件的帮助下,你的营销团队可以创建一个活动来推广相关商品,并在你的网站或应用程序中向你的购物者展示它们。

需要一个完整的企业搜索平台?看看阿尔戈利亚。

  • 世界领先的 SaaS 公司信任我们的搜索 API
  • 我们的搜索引擎使用先进的机器学习算法
  • 我们非常依赖开源软件,并受益于具有前瞻性思维的个人的贡献
  • 我们的托管搜索功能和发现 API 提供搜索和推荐服务,为客户(和员工的工作场所搜索)创造惊人的体验

我们的软件允许你只为你使用的东西付费,这样就不需要雇佣专门的搜索团队。这意味着您可以快速部署解决方案,并随着业务增长轻松扩展。

想了解更多?联系 我们的团队免费注册 ,亲身体验我们如何帮助您发展企业业务。

为 Jamstack 选择 API

原文:https://www.algolia.com/blog/engineering/choosing-your-apis-for-jamstack/

所以你想使用第三方 API 来构建你的网络应用。给你这么多选择,你怎么选?

关于 Jamstack 的美妙之处在于,除了提升性能和可伸缩性,它还允许你使用任意数量的第三方 API 来构建你的 web 应用。结果是,你可以为每一项工作插入一流的产品,并在每个专业领域利用持续创新;在某种程度上,这是一种分拆。

考虑实现 Algolia,而不是构建一个定制的全文搜索模块,或者实现 Contentful,而不是处理托管在您必须维护的服务器上的 CMS,或者使用 Netlify 的无缝开发工作流,而不是自己编译源代码并通过 FTP 上传到 web 服务器。此外,这种模式允许您在为堆栈的任何部分找到更好的解决方案时,轻松地切换出单个服务。

当然,随着选择而来的是责任:在有这么多选择的情况下,你应该如何选择要使用的解决方案?

在本帖中,我们将分享为项目选择 API 时需要考虑的 5 个标准。

以下是我们将涉及的要点:
平衡技术质量和业务需求
API 作为解决方案
数据复杂性
智能 UI 策略
策略和支持

平衡技术质量和业务需求

您购买的服务需要完全符合您的架构,但也要与非技术利益相关方的需求保持平衡,因为这是他们将管理的事情。因此,您需要两全其美:一个拥有同样出色的文档的出色的 API,以及一个可访问的功能完整的业务仪表板,同时为两个利益相关者群体保持灵活性和控制力的平衡。

现在,当构建一个软件产品时,所有的事情都是关于权衡的。对于不太成熟的产品,您可能会发现更侧重于开发人员或业务焦点。因此,第一个要求是寻找一个在这两个领域都有能力的相当成熟的提供商,并尽可能减少这种权衡。

API 作为解决方案

就 API 本身而言,寻找 API 不被视为服务,而是解决方案的迹象:

  • API 客户端/开发人员工具的维护情况如何,它们使您的集成变得有多容易?寻求灵活性和易用性。
  • 供应商提供的功能中有多少可以通过 API 访问?
  • 文档有多好?它是简单的功能规范,还是帮助你实现目标的全套资源?当一个 API 是一个解决方案时,文档将是全面的和易于使用的,有许多常见用例的代码样本。一些好的文档示例有 ReactGatsbyVue,以及graph QL。除了文档的直观布局和设计之外,这些 API 还使用搜索使开发人员更容易找到她需要的资源。
  • 提供商有开发者体验团队吗?在供应商的业务中有专门致力于帮助工程师在实现他们的产品时更有效率的拥护者会有很大的帮助。这表明供应商非常重视这个涉众群体。

数据复杂性

在添加 API 提供者时,您会希望查看数据流和部署过程中增加的任何复杂性。例如,当使用 headless CMS 时,当内容更新时,您需要触发站点的重新部署。在这种情况下,你需要寻找一个关于如何设置 webhooks 的集成指南。在 Algolia 这样的搜索 API 的例子中,当内容被创建或更改时,您需要通过管道将内容发送到搜索 API,当内容被删除时,您需要将内容移除。此外,您的内容可以来自许多不同的来源,如文章、产品等等。

幸运的是,许多 Jamstack 的提供商让这个问题变得很容易解决。一定要检查他们是否有集成到您正在考虑的其他 Jamstack 技术的工具。如果工具之间有直接的集成,那就更好了。例如,如果您正在使用 Algolia with Netlify,您可以利用 Algolia 的 Netlify 插件 来简化上述过程。

智能用户界面策略

当选择 API 优先的提供商时,你需要考虑你的 UI。API 是为了在前端给你自由而构建的,它们尽量不固执于它们将被嵌入的接口。传统上,这意味着您必须构建所有的 UI。 然而,随着服务的成熟,现在很多提供商都提供 UI 组件供开发者使用。在使用服务的 API 客户端时,这些组件通常在接口中实现了最佳实践 UI。

如果你使用一个带有 UI“组件”或“部件”的提供者,就需要考虑权衡。无头方法在设计和用户体验方面提供了自由度和灵活性。使用提供商的小部件为构建前端提供了更快的途径,尽管您通常会失去一些设计定制的自由。您应该如何验证这些工具?寻找智能默认值,以及覆盖 UI 本身的能力,而不丢失组件内置的逻辑。这样,您可以从缺省值开始,并快速发展,而不必在偏离提供商的标准模式太远时重新构建一切。以 Algolia 为例:开发者有能力 扩展小部件 来定制 UI 并保留小部件提供的功能,甚至 通过直接在底层库之上构建来创建定制的小部件

政策和支持

由于您可能在您的应用程序中管理多个提供者——可能每个用例一个提供者——从管理的角度来看,您可能希望让您的生活尽可能简单。在这里,您需要考虑每个服务的一些元素:

  1. SLA——你需要担心的最后一件事就是你的某个提供商倒闭了,但这确实发生了。在这种情况下,您应该将 SLA 视为您业务的保险。您还可以内置辅助故障转移来切换提供者。
  2. 支持——文档可以让事情变得自助,但是当行动迅速时,一个小小的澄清或问题的一天延迟会让一切变得不同。确保你有一个团队,当你需要他们的时候,特别是在实施阶段。
  3. 发布政策——当使用许多 API 时,确保任何一个 API 发布更新都不会影响到你的站点是很重要的。即使是 API 客户端中一个不向后兼容的小变化也会对您的实现造成严重破坏。密切关注您的提供商如何发布更新,并确保他们的 API 实际上是兼容的。
  4. 安全性和合规性——为工作项目选择 API 时,确保您符合公司的安全性和隐私要求。您可能需要一个拥有 SOC2 认证的供应商,并且知道如何以符合 GDPR 标准的方式处理数据。对于电子商务项目,您可能需要研究 PCI 合规性。金融或医疗保健等监管更严格的行业有更多的要求。大多数提供商在其网站上会有一个 安全合规页面

作为 Jamstack 的开发人员,这是一个激动人心的时刻。您可以自由选择最适合您正在解决的问题或您正在构建的产品的 API。在未来的几个月和几年里,我们可以期待推出更多的服务。我们希望这个指南能帮助你为你的下一个项目选择正确的 API。

关于作者

Matt 在 Algolia 从事解决方案工程工作,之前曾在通信 API Twilio 和电子商务 and Moltin 工作过。

Sarfaraz Rydhan 是 Netlify 合作伙伴生态系统总监。Sarfaraz 与技术和商业领袖合作,通过使用 JAMstack web 架构帮助公司更好地接触客户。作为一名经验丰富的前软件工程师,Sarfaraz 利用他的技术和运营专业知识来帮助这些公司服务于新的市场,并在考虑清晰的业务成果的情况下做出技术决策。

比较最佳电子商务搜索解决方案

原文:https://www.algolia.com/blog/ecommerce/comparing-the-best-ecommerce-search-solutions/

电子商务 网站搜索 有助于提升访客体验,建立客户忠诚度,提高现场转化率。根据一项 研究 ,使用搜索的访问者创造了所有电子商务网站收入的 30-60%左右。

尽管改进现场搜索有潜在的影响,但只有 15%的公司拥有专门用于优化现场搜索的资源。

亚马逊的利润和电子商务搜索的重要性

全行业的现场转换率徘徊在 3%左右,但 Amazon.com 的转换率是行业平均水平的五倍(对于 Prime 会员来说甚至更高)。在这个世界上最大的市场上,搜索对于寻找任何东西都是至关重要的,因此自然亚马逊 20 年来在搜索工程上投入了大量资金;今天,超过 1500 人在亚马逊网站搜索上工作。

amazon conversion rate average

无论你是市场、零售商还是直接与亚马逊竞争的品牌,都有一个好消息:你不需要雇佣成千上万的搜索工程师。今天现成的电子商务搜索引擎技术可以帮你一把,而不会让你倾家荡产。

接下来,我们将讨论两件事:网站搜索的关键要素和帮助你建立良好搜索体验的工具种类。

现代电子商务栈

2021 年,约 50%的零售商 表示,他们计划花更多时间开发自己的网站搜索能力。

更新的搜索解决方案可以取代你的电子商务软件自带的默认搜索引擎,或者允许你在一个无头商务架构中定制搜索。搜索引擎可以很容易地插入以下关键后端应用程序的高度相互依赖的技术栈:

  • 电子商务平台/ CMS
  • PIM
  • 标签标签:一个产品标签解决方案丰富了 medata,使搜索更加准确
  • 库存 :管理你的库存的 ERP 系统
  • CRM :在所有接触点和互动中存储客户信息的中心位置
  • 支付 :在线支付处理解决方案

为了提高效率,搜索需要在构成你的电子商务业务的不同系统中运行。它需要能够搜索您的产品目录,检查您的库存缺货项目,利用客户关系管理的访问者特征,并显示更新的价格信息。另外,它需要在几毫秒内完成所有这些事情。

电子商务搜索的挑战

成功的电子商务搜索需要多方面的方法。下面,我概述了零售商面临的一些关键问题,以及目前广泛可用的解决方案。

正如 Baymard Research 指出的 ,即使是世界上许多最大的零售商和品牌也没有解决一些更基本的搜索挑战,如拼写检查。成功搜索还需要许多其他基本和高级功能。

你的电子商务网站搜索需要的 8 种能力

虽然电子商务网站搜索解决方案拥有许多功能,但以下八项基本功能是你的网站绝对不能缺少的:

1。相关性

首先,解决方案必须向用户提供 上下文相关的 搜索结果,这样他们就可以轻松找到他们要搜索的内容。因此,电子商务搜索引擎必须能够分解复杂的语义和语法,处理同义词和 拼写错误 ,并智能地对结果进行排序。它还必须使您能够根据业务需求、优先级和销售数量、利润等指标对结果进行排序。

更新的 语义搜索 解决方案由 向量 (一种机器学习)提供更加强大的查询处理。通过结合向量搜索和关键字搜索算法(我们称之为混合搜索),零售商可以获得开箱即用的令人难以置信的结果。

2。速度

谷歌和亚马逊都进行了研究,表明即使 100 毫秒的滞后也会对搜索收入产生负面影响。如果网站搜索没有及时地将相关结果返回给客户,那么这些结果就是无用的。今天的互联网用户习惯了快速的结果。速度慢的网站让用户沮丧,驱使他们去竞争对手的网站。电子商务搜索引擎应该优化计算复杂性并减少网络延迟。

为了获得最佳速度和可用性,最好:

  • 将自动建议(也称为自动完成)添加到搜索栏,以便在用户键入查询时显示结果,并自动修复输入错误
  • 提供带有产品图片的即时搜索
  • 当用户选择不同的过滤器和切面时,动态刷新结果

3。可靠性和可扩展性

电子商务网站需要很高的正常运行时间,以确保不同时区的用户可以在一天中的任何时候购物。同样,最好的电子商务搜索解决方案必须高度可用,索引必须是最新的。系统必须能够 扩展 来处理不断增长的目录大小、用户数量和内容类型。

4。与主要电子商务平台的整合

为了避免大量的定制开发工作,网站搜索系统必须能够轻松地与电子商务平台集成,如 Shopify、Magneto、BigCommerce、Salesforce Commerce Cloud 和 WooCommerce。理想情况下,集成应该是一个简单的插件形式,这样营销人员或企业主可以轻松调整排名因素,并根据需要维护系统。

5。分析

大多数企业和电子商务网站运行谷歌分析进行网站优化,它们包含的关于你的网上商店的数据非常 有价值 ,但并不总是 有帮助 。 网站搜索解决方案附带的搜索分析可以根据转化率和错失的机会,为您的目录确定具体的搜索词和改进查询。

电子商务运营商必须能够跟踪转换指标,如不返回结果、不导致销售或其他重要行为的关键字。一个站点搜索系统应该让非技术用户容易 监控和分析站点搜索数据

6。个性化

除了显示用户查询的相关结果,网站搜索系统还应该提供与特定用户查询相关的结果。例如,如果一个服装品牌的客户只购买女装,那么可以合理地假设她将来会对女装感兴趣,并且可以优先搜索结果以首先显示这些商品。个性化可以增加客户对品牌的信任,并为交叉销售和追加销售创造机会。

7。实验和测试

体验上的小变化会对转化率产生很大影响。因此,一个站点搜索系统应该允许 A/B 测试 ,这样你就可以在向所有搜索者发布之前测试出变化和改进。系统还应该确保测试随机分配给用户,以避免引入任何其他可能给测试增加统计噪声的偏差。

8。内置销售工具

商品销售 工具允许电子商务企业策划和推广特定的产品或产品类别。这可以通过在搜索结果中显示某些促销产品,以及通过用不同的 UI 组件强调促销来实现。网站搜索系统应该允许配置搜索规则,以方便地运行这些类型的促销活动。

对比顶级电子商务搜索部署选项

这八种能力构成了一个成功的网站搜索解决方案的基础。现在让我们来看看三个主要的供应商群体,以及他们能给电子商务网站带来的好处。

现成的解决方案

许多主要的第三方平台都提供现成的电子商务网站搜索。他们可以直接集成到电子商务平台,如 Shopify 和 Magento,只需最少的技术专业知识或配置,提供用户期望的一般功能,而无需大量的开发开销。提供商包括 Cludo、Site Search 360、AddSearch、HawkSearch 等。

现成解决方案的优点

易于部署: 开箱即用解决方案的最大优势是快速、易于设置,并且易于插入电子商务平台,只需最少的前期配置或定制。

用户友好的仪表板和分析: 这些工具通常提供有用的仪表板,用于分析常见的搜索查询,以帮助电子商务运营商调整他们的产品供应,以适应用户的口味。通过专门针对电子商务用例定制体验,这些仪表板立即变得相关,并且不需要定制配置。

现成解决方案的缺点

有限的可定制性: 即插即用的解决方案是通用的,不针对特定的业务案例。提供者对用例做了许多假设,这些假设限制了灵活性和可以内置到系统中的个性化数量,从而为客户提供更多上下文相关的内容。定制商店的搜索用户界面可能会很困难,这使得它很难适应您的品牌。

有限的搜索功能: 举例来说,如果你想索引 其他类型的内容——比如博客帖子、视频和常见问题——那么你可能会遇到专门为索引产品和产品类别而构建的现成解决方案的问题。处理其他类型的内容超出了这些产品的范围。

搜索是一个黑匣子:现成的解决方案实际上是黑匣子,很难说明为什么搜索会以某种方式排序,或者它们是如何处理复杂的搜索查询的。对于需要能够定制和调整搜索结果以提供更准确结果的特定领域行业来说,这尤其是一个问题。

电子商务解决方案

一些现成的产品,如 Klevu、SearchSpring 和 Nextopia,宣称自己是专门针对电子商务的。

虽然这可能意味着搜索工具可以支持额外的 UX,用于按类别或推荐产品过滤搜索,但这并不总是意味着它最适合您的使用案例。

这些电子商务专用工具有时缺乏顶级电子商务网站推动转化所需的关键个性化功能和营销工具。这极大地限制了推广合作伙伴产品、推出新产品线或引导用户购买高利润商品的能力。任何大型电子商务公司都知道,这些是品牌长期发展的重要工具。

搜索即服务

搜索即服务 产品为在线商店提供快速部署,同时为不同的使用案例和定制提供更大的灵活性。这些产品处理索引和技术维护的所有复杂性,使运营商能够专注于微调他们的结果,并为客户提供丰富的相关搜索体验。Algolia是搜索即服务解决方案的一个例子。

【搜索即服务解决方案的利弊】

多渠道用户体验: 搜索即服务产品通常会提供出色的多渠道用户体验。这不仅包括桌面和移动,还包括移动应用、语音搜索,甚至店内。随着搜索成为客户导航和探索体验的核心,这可能是非常有价值和成本效益的。

可能的重要定制: 这些产品中的大多数都允许对用户界面和搜索相关性进行重要定制。例如,自定义排名和同义词可以让电子商务运营商将搜索结果调整为更加特定的领域,并向用户提供上下文相关的结果。此外,不同的内容类型可以集成到搜索结果中,以允许用户浏览整个网站,而不仅仅是产品。

搜索即服务解决方案的弊端

需要一些技术能力: 实现搜索即服务确实需要一些技术能力来实现和定制。然而,实现它们通常不需要任何搜索经验。相反,开发人员只需要知道如何集成 SDK 或 API,并进行一些简单的编程来配置和嵌入前端组件。

持续成本: 由于这些是托管产品,它们需要持续的订阅费来支付基础设施和使用成本。这项费用还包括持续创新和发布新功能的成本。虽然搜索即服务工具的费用可能高于现成的工具,但电子商务网站可以获得规模效益:与自己构建和维护工具相比,搜索即服务通常可以以更低的拥有成本提供最先进的功能和增强功能。

开源解决方案

创建网站搜索最灵活的方式是使用开源工具,如 ElasticSearch 和 Solr。这些工具是非常可定制的,并且通常有强大的开发人员社区来帮助解决开发中的技术问题。

开源解决方案的利弊

终极灵活性和控制: 开源搜索解决方案的主要优势是可以灵活地编写任何用例。有了足够的开发人员知识,可以定制和调整工具,使搜索与最终用户非常相关。

初始托管和基础设施: 此外,可以优化托管以降低持续成本。例如,在测试和开发系统时,搜索集群可以运行在一台小型虚拟机上,这将比托管搜索解决方案的订阅费用更便宜。但是,请注意,以经济高效的方式扩展这些系统需要丰富的技术经验,因为它们是复杂的分布式系统,有许多会影响可用性的故障模式。

开源方案的弊端

技术专长和诀窍: 利用开源技术开发搜索系统的主要问题是,开发人员不仅需要从零开始构建系统,还需要大量的经验和时间来持续维护和操作系统。具有这种专业水平的开发团队是昂贵的,并且必须努力适当地扩展系统以确保高水平的可靠性和可用性。

功能必须从零开始构建: 开源解决方案中没有任何 UX 工具或其他解决方案的后端功能(如销售或个性化),因此这些功能也必须构建和维护。这不仅成本高昂,而且需要不断开发,以确保系统的每个组件都符合行业标准。

正在进行的开发: 开源解决方案缺乏好的方法去迭代和实验。每当一个业务用户想要尝试一个新的特性或者甚至做一个小的改变,他们将不得不与开发团队一起工作来确定项目的范围,并且可能需要等待特性被开发、测试和部署。这可能会严重拖累经济增长。

寻找你的电子商务网站搜索伙伴

丰富的搜索栏体验对于任何电子商务企业的成功都是至关重要的。Algolia 提供了所有必要的工具,以快速和成本效益实施成功的电子商务网站的网站搜索。看看 Algolia 如何通过一个 个性化演示 帮助您的电子商务网站成长。

可组合商务:如何建立店内产品搜索亭和商店定位器

原文:https://www.algolia.com/blog/ecommerce/composable-commerce-how-to-build-an-in-store-product-search-kiosk-and-store-locator/

继续我们关于可组合商务的系列,我们将展示两个应用程序,它们将日益流行的在线购物和实体购物结合在一起。想象一下。在繁忙的零售店中,顾客想知道产品是否有不同的颜色。他们不再等待销售代表,而是在店内信息亭独立查找所有库存信息。如果该产品在他们当前的商店中没有,他们会很方便地掏出手机,在附近的一个地方找到相同的产品。他们订购商品并在回家的路上取货。这是店内信息亭(在线库存查询)点击取货商店定位器的完美结合。对顾客的便利:不需要额外的旅行,不需要等待送货。品牌促成了销售,赢得了顾客的长期忠诚。

让我们更仔细地看看这些应用程序。

店内售货亭

App: 商品搜索亭

中: 店内

目标/问题解决:

  • 独立浏览存货
  • 即时检索当前商店和其他商店的产品详情和供货情况

主要用户:

  • 店内顾客
  • 店员

将网上购物的便利融入购物者的店内体验。随着网上购物的兴起,顾客的购物习惯发生了巨大的变化。比起向销售助理寻求帮助,他们更喜欢独立研究。让购物者可以通过产品搜索亭浏览商店库存。使客户能够立即找到准确可靠的问题答案:检索当前或附近商店的产品详情和产品供应情况。无论顾客是在寻找特定的服装颜色、洗涤说明还是搭配建议,这些信息现在都可以在店内获得,就像在网上一样。

产品搜索亭解决了零售店可能遇到的最困难的技术挑战:

  • 供货情况必须每 15 分钟更新一次,价格每天更新
  • 数据来自各种来源:不同的目录(商店、国家、全球),不同类型的数据来自不同的来源(商品、可用性、价格、产品图片和其他媒体资产)
  • 多索引搜索:每个国家一个索引用于库存管理,每个语言一个索引用于产品信息
  • 零售商所在国家/地区各种语言版本的目录
  • 数据的地理复制,以及在世界各地安装应用的能力

Algolia 是面向零售商的同类最佳店内产品搜索亭应用的产品数据平台。

  • 商业价值
    • 使用同义词来克服产品数据限制,并更容易地向购物者推荐相关产品(例如,“异国情调”是“鳄鱼”和“鸵鸟”的同义词)
    • 销售产品目录,以执行您的活动,或在店内售货亭展示最新商品
    • 速度、相关性、打字错误容忍度、过滤器和方面等等,所有这些都有助于商店员工在向顾客提供建议时获得顺畅的体验
    • Kiosk 应用程序允许购物者发现他们最初没有想到的商品
  • 技术价值
    • 利用 Algolia 强大的 API 来聚合 Algolia 中的所有产品数据,以提供出色的体验
    • Algolia 的可靠性和可扩展性允许零售商在全球范围内使用我们的平台
    • 由于平台和编程语言无关的软件架构,Algolia API 优先的方法可以在任何地方轻松实现。

商店定位器

App: 带“网上购买,到店取货”功能的店铺定位器

中: 在线/远程

目标/解决的问题:

  • 线上线下购物体验的平滑融合
  • 简化的库存可用性信息检索,消除了亲自/电话询问商店员工的需求
  • 消除顾客因在实体店发现产品缺货而产生的挫折感
  • 购物灵活性,允许产品交付的多种选择:
    • 网上购物,如果商品比正常运输时间更快,可在当地商店提货
    • 网上购物,如果最近的商店没有该商品,可在邻近的商店提货
    • 如果您正在旅行,并且物品在出发日期前无法提供,请在线购物并在目的地提货
  • 适应新冠肺炎相关用户的购物习惯:
    • 无法在实体店购物的顾客可以通过商店的免下车服务选项,以非接触式交易的方式轻松提取他们购买的商品

主要用户:

通过提供多种产品交付方式,让您的用户在购买过程中拥有更大的灵活性。喜欢非接触式购物体验作为店内购物之旅替代选择的购物者现在可以在线订购商品,并在商店提货。商店定位器应用程序通过将在线和离线世界融合成一个无缝的过程,为用户提供了在线和离线世界之间的平滑集成。购物者可以轻松找到离他们最近的商店,独立地检查库存情况,而没有等待几天发货的麻烦,也没有打电话给商店同事检查他们喜欢的商品是否有货的麻烦,或者亲自到达商店却发现他们感兴趣的商品在特定位置缺货的麻烦和沮丧。

有关商店定位器应用程序的更多信息:

使用 Algolia、Mapbox 和 Twilio 在 React 中构建商店定位器——第 1 部分

使用 Algolia、Mapbox 和 Twilio 在 React 中构建商店定位器–第 2 部分

想多造?

在这个关于可组合商务的系列中,您将发现如何使用可组合 API 来帮助您创建基于产品目录的创新应用程序。

可组合商务:如何通过优化库存管理帮助店内销售人员轻松找到产品

原文:https://www.algolia.com/blog/ecommerce/composable-commerce-how-to-help-in-store-sales-associates-to-find-products-easily-by-optimizing-inventories-management/

在之前的博客 (关于电子商务产品发现店内信息亭和商店定位器 ) 中,我们介绍了可组合商务方法如何让您利用产品目录直接吸引购物者。但是,购物者并不是从无缝访问该目录中受益的唯一受众。在商店或客户服务部工作的零售员工通常是购物者与你的品牌最有影响力的互动的中心。让您的员工使用高级企业搜索应用程序访问您的产品目录,最终将使您的顾客受益。

伴侣 app

App: 带服务云和 销售助理语音搜索集成的门店助理手机 app /配套 App

中: 店内

目标/解决的问题:

  • 通过提供店内、网上或附近的实时库存信息,为商场销售人员提供支持

主要用户:

  • 店内销售人员

为销售人员配备 Algolia 商店助理应用程序,确保完美的店内购物体验。一个应用结合在一个界面中:POS(销售点)、股票应用和客户服务云应用。商店销售人员不需要同时使用多种工具来提供良好的顾客服务。此外,如果销售助理忙得不可开交,他们可以简单地使用语音搜索来即时查找他们需要的任何产品或客户相关信息,而无需前往静态的销售点。例如,说“在我的商店给我找一件 M 号的黑色大衣”将显示当前地理位置库存中所有相关商品的搜索结果页面。数据集是非常动态的,库存在一天中不断变化,但使用强大的搜索工具,返回的结果是准确的,并且是实时更新的。

寻求帮助的顾客总是希望获得关于店内、网上和附近各种商品库存的准确可靠信息,以及与销售人员的顺畅沟通和便捷的交易流程。为店内顾客服务设立高标准,消除顾客服务中的失误和延误,提高顾客忠诚度。

品牌将能够保持高质量的客户服务,不仅通过投资于客户支持技术,而且通过确保他们的支持人员也配备了最好的技术。确保销售人员配备单一、直观、功能强大的应用程序来满足他们的所有需求,应该是每个零售商的首要任务。授权商店销售助理更有可能提供更个性化的客户体验,确保更高的客户满意度,并改善品牌在客户心目中的形象。

库存管理、运营和物流

App: Algolia 与 物流运营服务云交互

中型: 全球作战

目标/问题解决:

  • 提高运营效率和流程生产率

主要用户:

大型零售企业需要确保其全球运营团队配备一流的技术工具,以跟上行业的快速发展。所有必要的材料应该以闪电般的速度容易获取和搜索。将 Algolia 与服务云提供商相集成有助于增强企业员工的能力,为他们提供一流的运营工具,从而显著提高员工绩效和效率

App: 图片搜索 App(光学字符识别/OCR)通过集成 Algolia 和 Google Cloud Vision

中: 店内

目标/解决的问题:

  • 物流运营生产力

主要用户:

  • 商店员工、仓库员工、办公室员工

随着最近网上购物的扩张和仓库压力的增加,优化物流运作和生产效率对每个零售商来说都至关重要。通过结合光学字符识别(OCR)、Algolia 搜索和闲置通知,仓库员工可以用手机扫描运输标签,并向包裹收件人发送闲置信息。标签扫描应用结合了光学字符识别(OCR)、Algolia 搜索和 Slack 通知。

https://github . com/algolia-samples/image-search-ocr-with-algolia-and-Google-cloud-vision

App: 企业搜索(GDrive、Confluence、Salesforce)

中: 全局操作

目标/问题解决:

  • 提高运营效率和流程生产率

主要用户:

一个成功的零售品牌背后是一个非常高效的组织。为了在竞争激烈的零售市场中处于领先地位,公司必须投资提高运营效率和流程生产率。为了支持这些战略努力,Algolia 提供了一个企业搜索工具,将 Lycos 与 Google Drive、Confluence 和 Salesforce 相结合。高效组织的所有基本要素。

可组合商务:如何改善全渠道产品发现体验

原文:https://www.algolia.com/blog/ecommerce/composable-commerce-how-to-improve-omnichannel-product-discovery-experience/

你想展示产品目录的第一个受众是你的顾客。 虽然你的电子商务网站搜索、导航和推荐显然是首选(查看下表中我们的博客系列,了解更多关于这方面的体验),但还有许多其他方式可以直接吸引你的顾客——在线和店内。

在这个系列中,我们将向您展示如何利用可组合组件来构建最能展示您业务的电子商务工具。

在线装建工具

App: 网装生成器

中等: 网上商店

目标/问题解决:

  • 不再需要客户服务、支持代表或销售助理的帮助
  • 通过以有趣的视觉方式定制产品来增加收入
  • 通过实时收集用户定制请求减少生产时间,同时提高客户满意度

主要用户: 网店客户

将店内销售助理的支持与在线定制服务结合起来,打造无缝购物体验。在线服装制作工具能够以有趣的视觉方式定制产品,确保客户满意度,减少生产时间,并且无需为现场销售助理的定制会议安排时间。

客户可以选择风格、材料、颜色和其他细节,根据每个用户的个人资料进行个性化设置,同时根据库存管理系统数据验证产品或元素的库存和交付时间,以确保顺利交易和客户对在线购物体验的满意度。T39

聊天机器人

App: 聊天机器人对话搜索

中: 在线

目标/解决的问题:

  • 检索产品相关信息
  • 协助解决与产品相关的问题

主要用户: 终端客户通过社交媒体平台查询在线和店内销售的产品

聊天机器人在回答网上购物者的问题时非常有用。它们允许用户使用普通语言提问,而不是使用人工搜索查询。在自然语言处理(NLP)的帮助下,聊天机器人从用户的问题中提取用户的意图,并提供最佳匹配的答案或触发相应的操作。Algolia Answers 可以通过仅将用户意图的一部分引导到 Algolia Answers,而其他意图在其他地方处理,来容易地实现到现有聊天机器人中。零售商可以利用聊天机器人来帮助购物者解决与产品相关的问题,从而将他们的客户支持提升到一个新的水平,无论是在线销售、店内销售还是社交媒体平台销售。除了为客户问题提供与支持相关的答案,并最大限度地降低与实时帮助中心代表团队相关的成本之外,聊天机器人还可以通过向客户通知与他们的查询相关的相关产品或促销来用于商品销售。

邮件推荐

App: 个性化邮件推荐搭配 Algolia 推荐&邮件营销自动化平台

中等: 在线

目标/解决的问题:

  • 产品推荐的相关性和个性化

主要用户:

  • 会员购物者
  • 购物者在店内或网上通过电子邮件注册
  • 过去至少购买过一次的购物者

零售商通过联系每位顾客独特的购物偏好,并在每次互动中加入个性化元素来赢得顾客忠诚度。Algolia 使购物者能够直接通过电子邮件地址获得相关的个性化产品推荐。将个性化电子邮件推荐与您选择的 Algolia 推荐和营销自动化软件整合:SendGrid、AWS SES、Mailchimp 或 Marketo。千篇一律的促销邮件已经成为过去——它们会直接进入数字垃圾桶!确保从客户行为中捕捉信号,并将这些洞察实时应用于每个渠道,从而将每次互动联系起来。

已保存搜索提醒

App: 用 Algolia 搜索保存搜索提醒&电子邮件营销自动化平台

中: 在线

目标/解决的问题:

  • 有意义的提醒让网上购物更加便捷
  • 跟进顾客需求并做出快速反应

主要用户:

    • 会员购物者
    • 购物者在店内或网上通过电子邮件注册
    • 对特定产品的可用性感兴趣的购物者

允许在实时购物和异步购物之间平滑来回转换。有时,您的购物者正在寻找的完美产品暂时缺货、缺货,或者他们对尚未到达商店的新目录商品感兴趣。通过保存的搜索提醒,您可以跟进并快速响应购物者的需求。将 Algolia Search 与您选择的营销自动化软件(SendGrid、AWS SES、Mailchimp 或 Marketo)相结合,以创建有意义的警报,这将使零售商能够继续与他们的客户进行沟通,即使他们并不积极浏览在线或实体店。

T38

想多造?

在这个关于可组合商务的系列中,您将发现如何使用可组合 API 来帮助您基于您的产品目录创建创新的应用程序。

可组合商务:如何将你的产品目录整合到微信、谷歌主页和 Alexa 中

原文:https://www.algolia.com/blog/ecommerce/composable-commerce-how-to-integrate-your-product-catalog-into-wechat-google-home-and-alexa/

继续我们的 可组合商务 系列,我们已经讨论了 电子商务产品-发现库存管理店内售货亭和商店定位器 等主题,我们现在将讨论社交媒体、即时消息和语音技术。

在当今世界,新技术频繁地改变着我们的日常生活和习惯,比如我们购物的方式。对于零售商来说,要想与客户保持联系,就必须对新的技术趋势做出快速反应,并适应客户行为和新购物习惯的变化。

语音助手

App: Algolia 集成 Google Home / Alexa 语音助手

中: 在线/远程

目标/解决的问题:

  • 将在线购物体验与用户偏好的媒介或工具相结合
  • 适应用户的购物习惯

主要用户:

在购物者所在的地方与他们见面!零售购物者养成了独特的网上购物习惯和偏好。Google Home 和 Alexa 是许多人在零售购物体验中的首选媒介和工具。成功的零售品牌通过在这些流行的平台上整合其品牌的在线存在,快速适应新的技术进步并支持其客户的旅程。

社交媒体

App: 微信 App 集成

中: 在线

目标/问题解决:

  • 直接面向消费者的销售和营销

主要用户:

  • 终端客户通过社交媒体平台购物
  • 主要地理区域:亚洲(中国),该社交平台在这里被广泛采用

利用客户已经熟悉的社交媒体平台。让它们成为你销售和营销工作流程中不可或缺的一部分。对于一家在亚洲拥有大量业务的零售商来说,微信是最直观的选择。该平台已被广泛采用,顾客也乐于使用它进行网上购物。将微信实时集成到库存管理工具中,以轻松匹配零售商和购物者,从而实现高度个性化和精确定位的直接面向消费者(D2C)销售和营销。

可组合商业不止于此……

不断发展的技术不仅塑造了客户的习惯和期望,也塑造了整个行业。为了迎接快速到来的未来,公司需要模块化和灵活的基础,以及面向创新和采用新趋势的组织文化转变。

这就是可组合商务的全部:没有放之四海而皆准的解决方案;相反,有许多创造性的想法可以利用新技术,让零售业走出电子商务泡沫。通过集成可组合架构,零售公司能够实现全渠道存在,从而加强与客户群的联系,并获得品牌忠诚度,以不断实现其业务目标。

可组合商务:如何选择最佳组件来满足您的业务需求

原文:https://www.algolia.com/blog/ecommerce/composable-commerce-how-to-select-best-of-breed-components-to-meet-your-business-needs/

可组合商业案例研究

可组合商务通常被认为是零售业的下一步。Gartner 预测,“到 2023 年,采用可组合方法的组织将在新功能实现的速度上超过竞争对手 80%。”

在这个案例研究中,我们通过一个特定的主题展示了可组合商务方法的力量:如何从你最有价值的资产之一:你的产品目录,在所有客户接触点上创造更多的价值。

首先,什么是可组合商务?

可组合商务是通过将最佳组件连接或组合到解决特定业务需求的定制应用程序中来构建商务系统的方法。这些组件被定义为打包的业务功能(PBC ),它代表定义良好的业务功能,比如结帐或搜索。

这种方法为采用它的组织带来了许多好处,包括更高的灵活性以适应客户和营销趋势,更高的灵活性以提供差异化的体验,以及跨所有接触点更轻松地实施体验。

在技术层面,可组合商务要求这些 PBC 建立在允许这种灵活性和连接性的技术之上。马赫的定义总结得很好:

马赫Mmicroservices, A PI-first, C loud-native, H eadless

微服务——微服务执行一系列处理特定业务功能的操作,从而轻松适应不同且不断变化的业务需求。

API 优先——API 公开微服务,管理底层数据、功能和不同微服务之间的连接。

云原生 SAAS–软件即服务利用云的全部功能,包括每个微服务的存储、托管和扩展。

HEADLESS——确保前端接口与后端逻辑和各种微服务完全断开,从而允许工程师在不影响系统其他部分的情况下更新 UI 或微服务。

电子商务架构和生态系统组件

在传统的整体电子商务平台架构中,可扩展性和复杂性是最大的限制。随着平台变得越来越大,对于工程团队来说,完全理解影响他们快速迭代能力的过程和依赖性变得越来越困难。结果是:启动时间缓慢、错误和效率降低,这是由于每次更新都需要不断地重新部署整个应用程序。

无头架构通过消除前端和后端之间的链接,提供了自由度和灵活性。站点内容和 UI 元素可以即时更改,而不会影响后端基础设施。现代的 API 优先方法让内部团队(产品、营销和销售)能够迭代在线全渠道体验,并测试具有高敏捷性和可扩展性的新策略。灵活的 headless commerce 架构允许公司创建定制的技术堆栈,并为其独特的用例选择最佳的 API 组件,而无需因平台元素依赖性或复杂性而做出妥协。

马赫电子商务的组成部分有:

  • 前端框架
  • 前端部署和托管平台
  • 内容管理系统(CMS)和数字资产管理(DAM):菜单导航、页面、位置、内容类型和数字媒体资产
  • 商务功能:产品目录、购物车、订单、定价和促销
  • 搜索和浏览体验(外部客户和内部员工):高级搜索功能、优化、个性化结果、语音搜索、地理搜索、推荐引擎和搜索/浏览商品功能
  • 库存管理系统

MACH 电子商务商店架构的一个示例如下:

一个成功的电子商务网上商店的三个基本和互补的要素:

  1. 风驰电掣&移动第一
  2. 个性化&相关上下文结果
  3. 网上购物体验是对店内购物体验的补充,而非竞争

传统的单体平台在上述各个方面都存在不足,限制了现代电子商务业务的灵活性、收入和增长。单一的“盒子里的电子商务”是一种通用的解决方案,任何竞争企业都可以轻松使用,而行业领导者,如亚马逊,能够利用他们定制的在线购物体验来赢得客户的忠诚度并增加他们的收入。虽然较小的零售商可能负担不起电子商务巨头可用的工程资源量,但 MACH 方法允许他们以很少的成本实现类似水平的在线购物体验。为每项功能精心挑选最佳组件的灵活性,使零售企业能够将自己定位在与大公司相同的水平上。

MACH 架构相对于整体电子商务平台的优势

  • 快速创新:快速部署新功能,更好地控制每个功能
  • 降低维护成本:可以灵活选择组件和功能,立即获得自动软件更新
  • 轻松适应和改变业务需求的任何变化

借助无头电子商务方法,可以构建不同的应用程序,为不同的消费者类型(如购物者和商店员工)提供多种用途。

现在,让我们就事论事吧!

在接下来的博客中,你会发现这种方法如何帮助你根据你的产品目录创建创新的应用程序。

随处可用的内容—富文本格式的历史和未来

原文:https://www.algolia.com/blog/engineering/content-that-works-everywhere-a-history-and-a-future-of-cross-use-rich-text-formats/

还记得什么时候“内容”是这样的吗?

Original form of punched card content graphic

Generously offered under the Creative Commons Attribution 2.0 Generic license by Pete Birkinshaw on Wikimedia.

啊,美好的旧时光。

如今,“内容”往往是这样的:

Modern content WAV format encoded

科技发展到了什么程度。

不要误解我的意思,这两种格式(分别是穿孔卡和 WAV)各有千秋,实际上都相当擅长各自的任务。但事实是,几十年来,我们一直在寻找一种包含所有类型“内容”的单一格式。我们还没有完全失败——已经做了许多尝试,都取得了不同程度的成功——但我们也没有完全实现全垒打。

这方面的大多数尝试(适当地)将范围缩小到富文本。毕竟,如果我们能创造出只适用于富文本的更好的东西,那么放弃对视频等明显不同类型的内容的支持是合理的。

因此,在本文中,我将深入研究过去跨平台、全功能富文本格式的三种最著名的尝试——XML、Markdown 和 JSON——以及解决这个问题的三种现代方法——concept、ExtraMark 和 Sanity 的结构化内容

XML

当 XML 被创建时,它被迫回答这个问题:“我们存储的是什么?”。类似于 HTML 的格式对这个问题有一个明确的答案(在它的例子中,就是网站布局)。XML 的回答几乎是“你想要的任何东西”,因此缩写为 eXtensible。

有时候,这可能是一件好事。例如,新闻行业使用一个名为 NITF 的规范来格式化提要,其他工具可以将提要合并到跨期刊的文章集合中,如谷歌新闻。这是唯一可能的,因为 XML 允许 NITF 的创建者选择他们想包含的任何标签。

这种可扩展性有时也是一件坏事。这种格式缺乏特异性,意味着学习 XML 实际上并没有教会你如何使用它。您仍然需要担心规范的细节,因为这将告诉您如何实际访问存储在 XML 中的数据。

这种可扩展性也使 XML 文件变得不必要的长!假设我想为我的内容创建一个标题。在 XML 中,我需要任意定义元素,或者我喜欢称它为什么,并确保该元素的存在对于稍后阅读该数据的任何人都是清楚的。这通常是通过文档类型定义来完成的。然后,我们必须以某种方式传达这些信息的含义,因为除了不言自明的元素标题之外,元素并没有告诉我们太多。标题到底是什么?两个不同的人阅读这些数据可能会对有不同的解读。所有这些占用了大量空间——太冗长了,以至于后来的努力最终走向了相反的极端。

降价销售

Markdown 的创建者看到了在 XML 中定义像标题这样简单的东西的混乱,认为这很荒谬,于是想出了这个:

# 

我认为这是相反的极端。

包裹在那个小小的标签中(英镑符号?只是哈希?夏普?奥克托索普?)是最高阶标题的整个概念。它假定标题所针对的内容的主题是不相关的,因此不需要为设置不同的标记。最高级标题的单个标记就可以了。

这导致了与 XML 相反的问题!XML 的灵活性大放异彩,而 Markdown 却没有。事实上,当你想存储一个可以通过你的网站销售的产品时,在你的数据库中有一个名为heading的字段似乎是不必要的。不,你可能希望它更具描述性,特别是因为你的产品名称有时会显示为标题,有时会显示为列表项,有时会显示为纯文本。所以最后,虽然 Markdown 通过迎合实际的网站布局设计使 Web 上的展示变得更容易,但它实际上并没有有效地标记它存储的信息,而这正是富文本格式的首要目的。这在某些用例中很方便,但在几乎所有其他用例中却毫无意义。

但是,即使在预期的地方使用降价也有一两个问题。例如,你会期望如果它要在网页设计中表现元素,它会全力以赴。然而,Markdown 在 HTML 中表示富文本的很大一部分可能方式上并没有类似的方法。除此之外,技术上没有一个单一的降价标准,这一难题也是实现的功能有点悬而未决。积极的一面是,这很容易解决!在回到最近的修复尝试之前,让我们先确定一下这个问题。

JSON

2001 年,一名开发人员决定序列化一个 JavaScript 对象,这样它就可以作为一个只能发送字符串的协议(如 HTTP)中的有效载荷发送。因为它为人所熟悉(最初是 JavaScript 的子集),而且是跨环境的(几乎每种语言都有驱动程序),JSON 很快成为领先的数据传输格式之一。因为它可以存储和传输几乎任何东西,不久人们就开始尝试用它来处理富文本。

但到目前为止,这篇文章的主题似乎是反复出现的:有一个致命的缺陷。我们又回到了 XML 的无限可扩展性,所以我们又回到了学习这种格式并没有教会我们如何使用它的地方。JSON 中的属性比 XML 中的更清楚一点(这是我非常主观的观点,但是考虑到它们的相对普及性,我可以说很多人都同意我的观点),所以甚至一些对象描述的块的“内容”也是属性。这听起来可能有点令人困惑,但这里有一个例子:

XML

 <product-description
	sold-out="true"
>
	This is the product description.
</product-description> 

JSON

 {
	"product-description": {
		"sold-out": true,
		"content": "This is the product description."
	}
} 

为了进行比较,XML 示例使用了两种不同类型的存储数据(为了演示而分开,而不是因为这是最佳实践)。您可以将简单数据存储为父元素本身的属性,或者存储为该父元素的子节点。何时使用这些方法可能会有点混乱,尤其是如果您不知道使用这些 XML 的程序的最终开发方向。另一方面,JSON 示例平等地对待所有属性。它们可以是字符串、布尔值、数字、null、数组或子对象,所有这些都是大多数开发人员熟悉的数据类型。为了格式的原因,我们不需要把它们都像字符串一样对待(参见 XML 示例中的sold-out)。

我个人是 JSON 的粉丝,不是因为某种客观的标准,而是因为我是一名 JavaScript 开发人员,使用起来感觉很好。有趣的是,JSON 似乎是存储富文本最常见的方式之一。虽然脱机文档仍然需要格式(想想 DOCX,一种用于 Microsoft Word 的 XML 规范),但今天创建的绝大多数文档都是为了在万维网上公开共享,我们通常使用支持 JavaScript 的浏览器访问万维网。所以 XML 确实有一席之地,但是有一个越来越大的争论,因为富文本主要是为浏览器准备的,所以 JSON 是一种跨环境(不是 HTML)的原生格式来存储它,正如我们将要发现的那样。

观念

我们已经谈了很多关于过去的尝试——让我们谈一谈现在和未来。我最初的想法是(看我在那里做了什么?)在检查了我自己的工作流程以及它是如何从技术作者多年前使用的工作流程发展而来之后,写了这样一篇文章。我发现最大的改进是概念,我用来写这些文章的笔记应用。我深入研究了 organization 的 API,想弄清楚他们是如何存储我现在正在写的富文本内容的。看看当我查询这个部分的标题时,我得到了什么:

{
	"object": "list",
	"results": [
		{
			"object": "block",
			"id": "00000000-this-long-uuid-000000000000",
			"created_time": "2022-05-24T02:55:00.000Z",
			"last_edited_time": "2022-05-24T02:55:00.000Z",
			"created_by": {
				"object": "user",
				"id": "0another-very-long-uuid-000000000000"
			},
			"last_edited_by": {
				"object": "user",
				"id": "0another-very-long-uuid-000000000000"
			},
			"has_children": false,
			"archived": false,
			"type": "heading_2",
			"heading_2": {
				"rich_text": [
					{
						"type": "text",
						"text": {
							"content": "Notion",
							"link": null
						},
						"annotations": {
							"bold": false,
							"italic": false,
							"strikethrough": false,
							"underline": false,
							"code": false,
							"color": "default"
						},
						"plain_text": "Notion",
						"href": null
					}
				],
				"color": "default"
			}
		}
	],
	"next_cursor": null,
	"has_more": false
} 

好吧,所以肯定是 JSON。

问题是,他们如何使用底层技术来匹配用例?嗯,我注意到几件事:

  1. 每个数据对象都用一个 UUID 来标识。诸如块的实际内容之类的东西并不重要——我说的是离散的对象,如块本身、用户、页面等。仅这一点就消除了在 JSON 中构建复杂数据结构的最大缺点之一,即允许您引用其他对象而不重复它们的内容。它仅次于 GraphQL 这样的查询语言。那么 NotionQL 的存在是多么的方便。
  2. 也许这是一件小事,但我喜欢的是,它们不只是在annotations属性中有一个列出一些注释选项的字符串,比如bold-underline-italic。JSON 继承了 JavaScript 简单、易于理解的布尔值,因此,创建一个annotations对象的选项,每个注释选项都是它自己的布尔值。这意味着他们不必担心注释给出的顺序,也不必担心未来的更改(例如,添加上标注释选项)会破坏一切。
  3. XML 的一个好处是它需要标记名!很容易掩盖这一点,但是这些标签名称有助于定义每个元素实际上是什么。这里的概念已经确保了他们的 JSON 对象不是未标记的。它们实际上在每个离散对象上有一个一致的属性(见这个列表的#1),叫做object,它告诉你你实际上正在读取的对象是什么。第 5 行告诉你“你正在阅读关于一个内容块的信息”,第 10 行告诉你“你现在正在看一个代表用户的对象”。在 XML 中,这些将是<块>和<用户>标签,所以非常清楚——但是这种简单模式的一致应用给了 JSON 同样的优势。

凭借这些优势,concept 创建了一个系统,其他工具可以很好地采用它,甚至可以对其进行扩展,直到它成为一个完整的规范!我正在努力寻找任何“不合逻辑”的部分,即使我个人可以看到采取不同方法的好处。例如,concept 在 JSON 上进行了扩展——考虑到程序基于块的特性,这是一个恰当的决定——但他们仍然将 Markdown 作为输入和输出,因此他们仍然受到 Markdown 所能支持的内容的限制。我个人使用了很多切换列表和并排元素,它们在 Markdown 中都不受支持,但在 concept 中却受支持。无论如何,观念已经建立了一个优秀的系统,我真的很兴奋看到它的发展。

额外标记

让我们取出之前放在 Markdown 中的大头针——概括一下,我只是抱怨 Markdown 专门用于表示 web 上的富文本,但没有足够的标记来表示 web 上所有类型的富文本,这限制了它的预期用途。但是,当我们添加一些缺失的元素时,情况会大大改善。web 上的 Markdown 的有用性没有改变,但是一些新的 Markdown 风格可以使它完美地直接映射到 HTML 富文本。

就拿 ExtraMark 来说吧。这是 CommonMark 的超集,common mark 是最受欢迎和公认的减价风格之一。但 ExtraMark 更进一步,开始添加其他非常有用的功能。以下是他们的 GitHub 自述文件列表:

  • 自动排版替换
  • 桌子
  • 标题锚(直到标题级别 3)
  • 定义列表
  • 上标
  • 下标
  • 缩写
  • 脚注
  • 评论家标记

太神奇了。我记不清有多少次——尽管我个人很讨厌和桌子打交道——我在谷歌上搜索如何用 Markdown 做一个,却发现自己被卡住了。现在,有可能了!定义列表是另一个应该经常使用的特性(它在语义上很有价值,只是有点晦涩),现在它也可以用在 Markdown 中了!

不过,我应该给最后一句话加个脚注。从技术上讲,我们可以在 Markdown 中使用脚注和下标,但是无论是解析还是显示 Markdown 都需要支持 ExtraMark,实际上我从来没有听说过这样的实现。这个回购有 4 颗 GitHub 星——它不是一个常用的工具。这是一种耻辱!ExtraMark 是我所见过的最符合逻辑,但仍然是最强大的降价建议规范!因为它完全兼容 CommonMark,如果你的下一个项目需要 Markdown 解析器,我推荐选择这个!到目前为止,您编写的所有内容仍然可以工作,但是现在您已经可以轻松使用所有这些功能了。

结构化内容

现在让我们跳回 JSON 我个人认为只有一种格式超越了 concept。我想向您介绍一下 Sanity 的结构化内容

虽然 it 不是使用结构化内容所必需的,但它与他们的数据存储平台有足够紧密的联系,是一种可选的好处,而不是强制性的负担。如果您需要某个地方来存储您在结构化内容中传输的数据,您可以明智地将它放在那里,因为您知道他们会为您处理格式和一切。

结构化内容不仅仅包括丰富的文本!它内置了结构化内容的工具(顾名思义)——您的内容所遵循的模型与其他所有内容一起存在!您可以存储逻辑和自定义算法,以便在需要时修改数据(注意,虽然这听起来很疯狂,但这一部分实际上在富文本中很常见——想想动态修改 HTML 的 JavaScript,或者 PowerPoint 中那些愚蠢的可编程动画),您可以轻松地在外部服务中循环(也不是没有听说过——在 Markdown 中甚至有这方面的变通办法),图像在显示时会自动自定义(这总是可能的,但以前需要外部服务——Sanity 将它融入到您的富文本中)。

最好的部分(在我看来)是您可以严格地使用富文本规范,而不需要所有的健全性特定的特性(大部分逻辑实际上在那里运行)。该规范本身被称为可移植文本,它得到了由 Sanity 团队开发的驱动程序和解析器的良好支持。他们花了很大力气才没有把你锁定在他们的平台上。截至 2022 年 5 月,他们已经有了以可移植文本为输入,吐出纯 HTMLMarkdownVue 组件React 组件Svelte 组件Hyperscript 的公开库(我到现在还没看到这个,但看起来很神奇)。如果你正在使用其他编程语言,他们也已经把你包括在内了——不是说我想再使用 PHP,但是如果我想,至少我会很欣慰知道我可以使用可移植文本。

回首往事

这是一篇相当深入的文章。我已经写了将近三千字,但我认为我们花得很值;深入研究富文本格式的历史是一个有用的练习,因为它有助于我们理解任何未解决的问题或缺点,以便我们能够改进它。

实际上,我们中的许多人可能不会参与创建未来的富文本规范之一,但是很有可能,我们必须选择一个来使用,我们在这里回顾的粗略理解将有助于做出这些决定。也许普通的 XML、Markdown 和 JSON 正在逐渐消失,但是在下一个项目中,您将使用什么格式来传递富文本呢?如果你想听我的建议——你已经读到这里了,为什么不呢——如果你打算走降价路线,就去找 ExtraMark,或者找便携文本。

感谢你的阅读,我期待看到你创造的东西。

对话式搜索如何重新定义数字互动

原文:https://www.algolia.com/blog/product/conversational-search-digital-interactions/

下一次革命将由人类最自然的交互方式驱动:语音。

已经有 32%的人每天通过语音搜索。几乎没有一个行业不增加语音搜索的用户体验。仅电子商务一项就预计美国和英国的语音购买量将达到 400 亿美元,其他行业肯定会紧随其后。

只用他们的声音,购物者就可以仔细浏览你的数码店面,找到他们一直在寻找的裤子。或者只需说出几个关键词,读者就可以在他们的移动设备上找到并阅读一条突发新闻。不难看出语音搜索如何重新定义用户与你的业务互动的方式。

语音搜索用用户和企业之间的互动关系取代了传统的键盘搜索领域。这一切是如何运作的?

从定向搜索到对话搜索

语音搜索通常被认为需要真正的对话式来回体验。声音可以是那样的,但不一定是那样的。语音可以只是另一种输入机制。

语音堆栈由输入、输出和中间的实现组成。输入表示口头请求(语音到文本),输出是应用程序的响应(文本到语音)。一个好的经验法则是“垃圾进,垃圾出”——也就是说,输入越好,输出越好。目前,大多数语音搜索引擎的准确率在 95%左右,这实际上比人类的听力要好。语音转文本很好,而且越来越好。

然而,在这两者之间的履行过程中,语音搜索可能会变得复杂。实现由意图检测和业务逻辑组成,后者将可能是用自然语言表达的不连贯的输入转化为可操作的输出。

以下是一些有助于实现这两者之间的部分。

  • **去掉停止字。会话语言并不总是遵循语音清晰、语法正确、甚至上下文连贯的模式。很多时候,口语是混乱的,充满了停用词,像“找我”、“the”和“about”。对于语音搜索,停用词会妨碍语音堆栈可以注册的整齐查询。一个好的声音 UX 会忽略停止字,就像他们不存在一样。 **

  • 减少草堆。对于更冗长的公式,引擎将需要挑选出许多额外的单词来隔离相关的单词。把移除过程想象成大海捞针。不要通过检查每一堆来寻找针,更有效的方法是制造更小的一堆,直到你找到针。通过减少草堆,全文搜索变得更加容易和精确。一些可以减少工作量的功能包括:

    • 过滤 。Algolia 的内置搜索引擎有一个称为查询规则的功能,它接受文本查询并寻找可过滤的值以减少堆栈。
    • 个性化 。用户自己的密切关系也可以用来过滤结果。一些结果可以考虑用户行为。当个性化融入履行过程时,语音搜索体验就有了一种定制的感觉。
    • 上下文 。围绕查询的信息构成了上下文。诸如用户最近的查询、搜索的时间或日期以及用户请求的数量等信息都被考虑在内。
  • 分析学。通过分析,您可以从语音引擎中推断出见解,从而改善对话体验。例如,在同义词的情况下,用户经常用不同的方式表达同一个意思。有了分析工具,您可以监控、重复和预测用户的行为,帮助他们准确找到下次想要的东西。

语音搜索早已渗透到各个行业,融入到坐拥尖端的业务中。通过以最自然的交互方式将用户和企业联系起来,成功的语音搜索将激励客户,推动品牌参与,并增加销售额。

在我们的电子书中了解更多: 下一次科技革命将会被提及

对话搜索

原文:https://www.algolia.com/blog/product/conversational-search/

随着虚拟助手等语音优先设备在过去几年中的快速崛起,搜索技术不断被推至理解越来越复杂的自然语言模式。预计到 2020 年全球将有超过的语音助手用户。对话式搜索一直被视为推动这场搜索革命的技术。

它允许用户提交查询,通常是通过语音,并以对话的形式接收答案。与传统的关键字搜索相反,会话搜索系统采用复杂的语法句子,并可以使用以前交互的上下文来提供更有用和更全面的结果。

对话式搜索不同于语音搜索,语音搜索允许用户提交口头查询,但会以文本、语音或其他不像对话的格式返回答案。

告别传统关键词

传统上,搜索系统使用直接取自查询文本的文字关键词来导航它们的索引和数据库。然而,对于会话式搜索,这个过程变得非常困难,因为潜在的关键字必须从语义和结构上更复杂的句子中导出。机器学习和 自然语言处理(NLP) 帮助将这些人类互动转化为结构化格式,可用于获取相关信息。

设计对话式搜索

许多策略被用于将复杂的语音请求转换成计算机可以理解的更结构化的模式。删除停用词,或者忽略可能使搜索复杂化的不相关的词或结构,是一种策略。其他技术旨在减少干草堆,或需要搜索的内容的体积。通过应用基于 查询规则 的过滤器,并使用个性化和上下文,搜索引擎可以更快地返回结果并提高准确性。

从事务型到交互式搜索

在这一点上,搜索主要是事务性的,因为用户要求一些特定的东西,搜索引擎试图提供给他们。然而,这种情况正在迅速改变。公司意识到创建更有意义、个性化的交互和推荐以鼓励用户参与特定产品或内容的价值。

因此,企业提供能够支持用户更复杂的搜索模式和需求的搜索能力是很重要的,尤其是通过语音。

未来的对话搜索

随着对话式搜索能力的提高,虚拟助手、网站和应用程序可以与客户进行更复杂的对话。例如,有了足够的用户购买模式和行为的历史数据,虚拟助理可以推荐更适合客户可能没有意识到的需求的产品和服务。

对话式搜索的改进也可能导致用户变得更加依赖他们的虚拟助理,有效地形成一种隐含的“伙伴关系”,从而该技术越来越多地成为探索和解决问题的工具,而不是简单的事务性任务完成。人们可以开始利用技术来更好地推断他们实际想要和需要什么,而不是积极地搜索特定的产品。

这些变化对在线业务意味着什么尚不清楚,因为营销产品和服务的渠道将在未来几年内迅速发生变化。然而,很有可能,用户将开始期待这种与网站和应用程序的丰富对话,他们将不太可能使用那些仅仅依赖于传统关键词搜索的网站和应用程序。依赖搜索的组织应该开始构建一个丰富的、基于上下文的搜索功能,使他们能够比以前更好地满足用户需求(并且不受一小组有针对性的关键字的限制)。

对话搜索和 Algolia

对话式搜索允许消费者通过个性化和基于上下文的界面更有效地与企业互动。

为了帮助企业更有效地通过语音与客户互动,Algolia 开发了一套技术来帮助从复杂的句子中提取明确的查询信息,并根据之前与用户的互动为搜索添加上下文。

在我们的电子书 中了解更多关于搜索未来的信息 下一次科技革命即将来临

了解“你可能也会喜欢……”的秘密

原文:https://www.algolia.com/blog/ai/cosine-similarity-what-is-it-and-how-does-it-enable-effective-and-profitable-recommendations/

这条围巾你看了两遍;需要配套的手套吗?一件昂贵的羽绒背心怎么样?

你看了四遍 这个高飞挥?试试别的。我知道接下来什么会吸引你。

你输入的搜索词出现在公司数据仓库的无数地方。根据我的单词袋模型,检查一下我找到的包含常用单词的类似文档。

如果一个推荐引擎算法能够像人一样“思考”,你可能会发现它在进行这种私人观察。当然,这些并不是网站上关于文档相似性和相关内容或产品建议的表述方式。你得到的只是一个“你可能也会喜欢”或者一个没有说明为什么会被选中的物品列表。不管怎样,你已经得到了很好的类似项目或内容的推荐,这些推荐很容易引起你的兴趣,就像算法已经做了笔记一样。

大数据正在监听

相似性是对搜索引擎结果进行排名和推荐内容的关键区别。如果我们人类喜欢某样东西,那可能还不够;我们想要更多,更多,更多。

电子商务零售商特别乐意为我们提供更专业的信息检索;可以理解,他们热衷于满足我们寻求相似性的需求。从亚马逊到网飞,再到大型零售商的网站,类似商品的用户推荐在网上随处可见。大多数人都被他们个性化的“你喜欢那个,你可能会喜欢这个”的想法,他们的“购买它”附加建议,他们检查“顾客也考虑”产品的能力所吸引。

由于数据科学家创造了可靠的相似内容功能,这种体验每天都在发生。但是 如何做到 公司利用数据科学如此不可思议地弄清楚 还有什么 我们可能会喜欢?一个网站在众多选项中识别 相似的项目会涉及哪些内容?推荐系统如何使用人工智能并挖掘数据集来找出用户接下来想要看的类似电影名称、产品或博客帖子?

秘密归结为两个数列之间久经考验的相似性度量:余弦相似性( 维基百科定义 )。

什么是余弦相似度?

在语言方面,余弦相似度决定了两个或两个以上的词在意义上的接近程度。这是搜索或推荐引擎知道的方式,例如,单词 math 类似于统计学,类似于机器学习模型,类似于余弦,所有这些都是 而不是 类似于围巾和手套。

这种距离评估度量,也称为项目到项目的相似性,计算位于多维 内积空间 中的 向量 中的两个项目之间的相似性得分。这是通过 矢量化 实现的,它将单词转换为向量(数字),允许它们的意思以数学方式进行编码和处理。那么可以确定在多维空间中投影的两个向量项之间的角度的余弦。

这里有一个例子:

这张图表显示女人和男人有些相似(就像火星和金星一样),然而国王和王后没有关系,但是国王和男人有关系。

这种测量方法如何揭示物品之间的相似性?它基于余弦原理工作:当余弦距离增加时,数据点的相似性降低。

为了根据两个项目的属性来衡量它们的相似性,余弦相似性是在这样的矩阵上计算的。输出值范围从0–1。

所有这些值的余弦计算将产生以下可能的输出:

  • -1(一个对立面)
  • 0(无关系)
  • 1 (100%相关)

但最能说明问题的数值是两个极端值之间的小数,表示不同程度的相似性。例如,如果项目 1 和项目 2 相差 0.8 度,这将使它们与项目 3 更加相似,如果项目 3 与项目 1 和项目 2 的距离都是 0.2。

这里有一个关于如何 计算余弦相似度 的小教程。

结论:如果两个项目向量有许多共同属性,则项目非常相似。

为什么余弦相似?

在推荐系统的数据分析中,各种相似性度量,包括 欧氏距离JAC card相似性,以及 曼哈顿距离 用于评估数据点。但是在这些选项中,余弦相似度被认为是最好和最常用的方法。

由于各种原因,余弦相似性是一种可信的测量形式。例如,即使两个相似的数据对象由于它们的大小而在欧几里德距离上相距很远,它们之间仍然可以有相对较小的角度。而且角度越小,相似性越强。

此外,余弦相似度公式是一个赢家,因为它可以处理可变长度的数据,如句子,而不仅仅是单词。

证明了它的流行,余弦相似性被用于许多在线库和工具,如tensor flow,加上sk learn和 scikit-learn for Python。

余弦相似度和机器学习

机器学习 算法通常应用于数据集,以便为网站用户和购物者提供最切合实际的定制推荐。这种做法已经起飞:深度学习为购物者和媒体网站订户生成的推荐已经成为网站 搜索和发现 体验不可或缺的一部分。

有了相似性评估,获得语义的正确是关键,所以 自然语言处理 (NLP)起着实质性的作用。

考虑图表中的术语类型——国王、王后、统治者、君主、皇室。有了向量,计算机就可以通过在n-维空间中把它们聚集在一起来理解它们。它们可以各自用坐标( x,y,z )来定位,并且可以使用距离和角度来计算相似度。

然后,机器学习模型可以推测向量空间中彼此靠近的单词(如 king 和 queen)是相关的,而更靠近的单词(如 queen 和 ruler)可能是同义词。

向量也可以加减乘除来建立意义和关系,从而提供更准确的推荐。这种加减法的一个经常被引用的例子是:国王-男人+女人=王后。机器可以使用这种类型的公式来确定性别。

应用算法

Algolia,我们的推荐部分依赖于有监督的机器学习模型。为相似性矩阵收集数据,其中列是用户令牌,行是对象 id。每个单元格代表 userToken 和 objectID 之间的交互(点击和/或转换)次数。

然后,我们应用一种协作过滤算法,对每一件商品,找出顾客中具有相似购买模式的其他商品。如果相同的用户集合已经与项目交互,则项目是相似的。

一个挑战:相似性矩阵计算量大(密集),而相似性值小,这给数据带来了噪声,可能会对所提供的推荐质量产生负面影响。

要绕过这个路障,k-最近邻算法 (KNN)就派上了用场。余弦相似性确定最近的邻居。您将获得最佳数量的相邻点,对于这些相邻点,具有较高相似性的数据点被视为最近,而具有较低相似性的数据点则不被考虑。您只保留最相似的 k 对物品。结果:高质量的建议。

余弦相似度推荐系统

电影推荐系统 ,在其他类型的基于内容的推荐系统中,都是关于算法的。

相似用户看(或读或听)什么?余弦相似性衡量两个查看者之间的相似性,即一个用户简档与所有其他用户简档的相似性。

查看或购买这件物品的人还买什么 别的 ?在推荐生成过程中,利用项目描述和属性来计算项目相似性。使用余弦相似度,可以评估该人选择或查看的内容与目录中其他项目的相同程度。具有最高相似性值的其他项目被呈现为最有希望的推荐。

余弦相似度也有助于推荐正确的文本文档。例如,它可以帮助回答如下问题:

对于文本相似性,频繁出现的术语是关键。术语是矢量化的,对于推荐来说,具有较高频率的术语被认为是最强的。

如果你喜欢这个帖子,你可能会喜欢 Algolia

想为你的搜索引擎用户或客户提供最好的 算法化计算的 个性化的 类似商品的建议?查看阿哥利亚 推荐

无论您的使用情况如何,您的开发人员都可以利用我们的 API 来构建最适合您需求的推荐体验。我们的推荐算法应用基于内容的过滤来增强您的 用户参与度 并激励访问者再次光临。这对于转换和你的 底线 来说是个好消息。

获得一个 定制演示免费试用我们 ,或 与我们聊天 关于高质量的相似内容建议,这些建议必将引起您的客户群的共鸣。我们期待着您的回复!

创建零售战略,为在线购物者提供成功的零售体验

原文:https://www.algolia.com/blog/ecommerce/create-a-digital-retail-strategy-for-the-ultimate-customer-retail-experience/

当你看到“良好的零售体验”这个词时,你会想到什么?

也许是一家实体零售店,商品陈列得很吸引人,货架上摆满了物美价廉的商品,服装店的试衣间灯光明亮,友好的销售人员专注于顾客的健康,加上在必要时可以轻松退货而不会遭到白眼。

你可能想象不出一个易于导航的网站,对吗? 但在 2022 年,随着零售领域的大量商业活动转移到网上 ,零售业的“好”面肯定会扩大。

现在,真正好的零售客户体验(包括在线版本)意味着什么?

由于新冠肺炎的限制,越来越多的人转向网上购物,依靠移动设备或电脑的数字体验来浏览商品和购买产品。网购显然有一个时刻。随着向数字空间的转移,零售商正在集思广益,提出并提供消费者喜欢的有吸引力的新数字购物功能。

在数字空间购物

虽然消费者向数字空间的大规模转移为许多处于有利地位的企业带来了疯狂的新收入,但这也要求企业迅速采用并过渡到新技术。对于电子商务网站来说,这通常意味着在线卖家需要赶上在线购物零售业的巨头。

因为就像他们在实体零售店购物时一样,你的网上目标客户不仅仅津津乐道于一次 OK 体验,他们想要并期待一次 伟大的 体验。零售企业有责任执行零售战略来满足这一期望,否则将面临客户满意度和保留率下降的后果。 现实点吧:网上购物永远不会复制实体零售的体验。数字零售世界有不同的参数。网购者的需求是不同的。至关重要的是,企业要理解这些要求并适应,以确保完全的客户满意度。

了解你的目标受众

能够准确描述你的目标客户——他们的需求、购买偏好、成功网上购物的按钮——听起来很简单,对吗?但是你会惊讶于有多少品牌不能或不愿意投资研究来做这件事。

在实体店中,销售人员可以与购物者互动,了解他们的购物目标和需求,并积极帮助他们找到想要的东西。通过这样做,他们可以成为了解客户总体需求的专家,这可以帮助他们积极主动地努力满足这些需求。

在电子商务网站上并非如此。如果你想建立一个利润丰厚的网上商店,那就完全是另一回事了。但是,如果你想向他们销售,了解你的在线受众的能力是至关重要的。

数据分析的作用

这就是数据分析的用武之地。通过查看您的网络流量获得的数据可以帮助您识别人们的购物偏好和购买模式,应用这些信息,您可以智能地决定突出哪些新产品,以及如何帮助个人客户点击购买并愉快地“带着”他们的购买离开网站。分析可以告诉你如何构建你的电子商务网站,哪些产品类别占据中心位置,以及你使用什么样的元数据和标签。除了通过查看您的流量来收集标准数据之外,您还可以通过在您的网站上或通过电子邮件营销活动中提供的调查,直接接触您的购物者并征求反馈来收集他们的数据。

打造一段销魂之旅

任何从事电子商务的人都知道经典短语“客户之旅”啊,听起来是不是很有田园风味,就像你的购物者在迪斯尼乐园的 中轻轻漂浮一样。

顾客之旅的概念源于零售商希望为进入实体店的购物者提升顾客体验。在设计最佳零售之旅以促进强大的顾客参与时,消费心理学家想出了推广商店知名品牌的方法。

这次促销会带来什么? 心理学家知道,例如,某些颜色和音乐可以影响消费者的行为,并且可以促使购物者购买特定的产品 。因为大多数购物者都是右撇子,所以当他们走进一个实体空间时会直觉地向右转,实体商店通常会相应地设计:售货员可能会在商店入口的右侧放置一个彩色的产品展示,这样购物者(无论如何是右撇子)就会直接跑进去。

为网购运筹帷幄

对于实体店的营销来说,这一切都很好,但就商业模式而言,数字商店是另一回事。潜在的新客户不能随意进入(右边的 或左边的 )四处闲逛,或听到音乐或闻到令人愉悦的香味,或被友好的销售人员热情地接近(咧着嘴笑的机器人不合适)。因此,当你在处理网上购物体验时,有必要采取截然不同的策略。

另一个重要的考虑因素:人们经常在网上寻找他们需要购买的特定商品,而不是在浏览数字橱窗时迷路,也许会在购物车中随意扔一些东西,然后最终找到他们需要的商品。从这个意义上来说,网上零售体验与实体零售体验非常不同。这意味着它的电子商务网站的主页和产品详情页面有一个先进的功能和产品过滤器突出的搜索栏的关键。

在线零售商在制定战略时需要考虑的另一个因素是:潜在客户可以通过多种方式“走进”你的数字商店,而不是走进一个相当于精心策划的实体正门。在线购物者可能会通过点击谷歌或亚马逊的广告来购买类似母亲节礼物的东西,这可能会直接将他们带到产品详情页面,或者让他们进行类别搜索或选择类别方面。在这个过程中,他们不会接触到主页上的商品销售,也不会接触到任何等同于走到展示区和过道的实体店体验的东西。

为全渠道优化

为了给你的网站创建一个强大的零售战略,你还想提供一个的全渠道零售购物体验,这意味着这个旅程始终如一地精彩和综合,不仅包括你的网站,还包括你的 移动应用 、你的实体店售货亭、营销电子邮件、社交媒体帖子以及你的数字和实体店客户可能经过的其他渠道。如果有人在网上买了东西,他们可以很容易地返回到商店吗?如果他们在你的商店里发现它缺货,他们能很容易地在你的网站上订购吗?他们能在路边取网上订单吗?所有这些类型的客户服务接触点必须无缝衔接,才能给你的顾客留下深刻印象。

如你所见,在网上购物中,创造一个吸引顾客的旅程可能相对复杂。那你的策略是什么?你在哪里以及如何引导你的在线客户,让他们对你做了一笔好买卖感到满意?一次有效的电子商务购物考察必须考虑到所有可能的体验变化,并为顾客创造一条直观的数字路径。

把顾客放在首位

在最好的实体店中,提供一流的客户服务并不总是那么容易。销售人员接近购物者,回答问题,记录交易,处理退款。如果顾客对某件事有意见,店员或商店经理很可能会发现他们的不满,并提供补救措施,防止他们怒气冲冲地离开。

对于电子商务网站来说,如果没有合适的功能,确保出色的客户服务可能会更加难以实现。在网上,顾客实际上是孤独的。如果他们找不到自己需要的东西,或者花的时间太长,他们很可能会离开网站,尝试另一家在线零售商。

你的战略包括什么?

  • 电子商务网站可以尝试复制传统的客户服务,提供全面的常见问题解答和突出的联系信息(对任何问题的快速回复)
  • 在新冠肺炎疫情期间,许多在线企业开始使用人工智能驱动的弹出式聊天机器人(尽管它们是自动化的和非人性化的)来模拟线下客户服务体验
  • 在线零售商可以提供免费退货运费等优惠,以帮助抵御潜在的负面评价

放大客户的声音

如果您想要实施有效的在线零售战略,您还需要提供用户生成的评论,以传达透明感。你有很棒的产品或服务吗?给你的顾客一个简单的方式来宣传它。这可能是通过他们写热情洋溢的评论,在博客上发表积极的评论,在社交媒体页面上发表积极的意见,或者这三者都有。

人们喜欢在购买之前阅读他人的评论,因为他们通常对企业零售营销炒作保持警惕。根据 尼尔森 (2021),全球 88%的消费者最信任他们认识的人的推荐。在线评论并不完全符合“他们认识的人”或口头推荐的条件,但它们可以说是退而求其次的事情。

产品质量自然也是关键。随着消费者对产品属性变得更加明智,企业必须能够产生持续的积极的客户反馈。许多消费者甚至不会考虑客户评级低于 3 或 4 星的产品。如果有足够多的人讨厌你产品中的小故障,他们会通过指出来让所有人阅读来赶走更多的潜在买家。

承认你的失误也同样重要:你的客服人员需要谦逊而迅速地回应任何公开的负面评论,并提供解决方案,比如退款、折扣,甚至只是一点点感同身受。这不仅有助于安抚顾客的情绪,还能告诉无数其他潜在顾客,你正满怀同情地倾听,并且真诚地关心他们对产品的体验。

瞄准恒星搜索

说到给你的在线客户留下深刻印象的策略,你的网站搜索效果如何?对于电子商务企业,尤其是那些拥有大量产品目录的企业,一个能够返回准确、基于人工智能的结果的复杂搜索功能是必不可少的。但是根据 贝玛研究所 的调查,所有电子商务网站中有 61%的搜索性能低于可接受的水平,这将“直接与用户的实际搜索行为和期望不符”

投资有效 人工智能搜索 能为你的底线创造奇迹。伟大的在线客户体验的另一个名副其实的要求:一流的 产品 发现 。发现软件提供物品过滤等功能(例如,按尺寸、颜色、价格)来帮助客户缩小购买选择范围。没有高质量的发现工具,购物者必须费力地浏览产品页面,这不会带来积极的客户体验。使用发现功能的选项简化并加快了导航过程,并提供了使用搜索栏的替代方法。

打造高效零售体验

谁知道我们是会过上更加轻松的大流行后生活,还是会因为不断变异的病毒而不得不应对更多的不确定性?随着这一切的发生,谁真正知道零售业的未来会是怎样?

但无论 2022 年及以后会发生什么, 由于疫情期间的限制,如此多的消费者转向电子商务购物,在线零售商不再足以提供传统的“良好”数字零售体验。为了击败你的竞争对手,你必须从零售营销策略开始,确保你的网站的购物之旅体验可以与零售业的佼佼者(亚马逊、谷歌等)相媲美,后者以其狂热的客户忠诚度而闻名。

策略提示:轻松搜索&发现解决方案

Algolia 能帮你制定完美的零售策略。我们非常清楚如何为顾客创造更强大的零售体验。我们为电子商务网站提供经过验证的 世界级 人工智能搜索和发现功能。

当你通过创造一个让顾客愉悦的购物之旅来增加你的在线收入时,很有可能在短短几天内,你就会看到令人印象深刻的投资回报。

你的网站指标还能提高多少? 在重新设想你的网上零售销售的可能性和确定你的网上零售战略时,先试试我们的快速利润模拟器来大致了解一下增加搜索引擎的影响。然后,如果你喜欢这些个性化的评估,我们随时准备帮助你实施一个成功的零售战略和增压你的网站性能。今天就报名参加安哥利亚 免费试用 看看你怎么看!

使用 DateRangePicker 组件获得更好的日期选择体验

原文:https://www.algolia.com/blog/engineering/creating-a-better-date-picking-experience-with-the-daterangepicker-component/

在设计搜索界面时,使用 Algolia 的即时搜索库就足够了。为了便于使用,每个库都有不同风格的 JavaScript。每一个都有制作一个强大的 UI 所需的所有主要部分。

有时候你想超越现有的东西。

在这一点上,您有两个选择:用我们的连接器 API 制作您自己的或者找到一个预构建的定制小部件。

任何认识我的人都不会感到惊讶,当面对想要一个 React 日期选择器时,我希望尽可能少地编写代码来使它工作,但我也希望为圣诞老人提供最好的 UI。当第五次奖金挑战来临时,我需要一些额外的东西。我的第一站?阿尔戈利亚电码交换

在对date组件进行快速搜索后,我找到了我所需要的:名副其实的@ algolia/react-instant search-widget-date-range-picker!如果你没有使用 React,还有一个 VanillaJS 版本

设置项目

如果您想继续,您需要安装一个新的 React InstantSearch 项目。最简单的方法是运行以下命令:

 npx create-instantsearch-app concert-search \
 --app-id latency \
 --api-key 059c79ddd276568e990286944276464a \
 --index-name concert_events_instantsearchjs \
 --template "React InstantSearch"

这个怪物命令将建立一个 React InstantSearch 项目,并将其连接到 Algolia 的 hosted concert 索引。将目录切换到创建的文件夹,运行yarn start作为坚实的起点。

至此,您已经获得了一组音乐会的完整搜索体验。

如果您想按日期过滤,您可以设置一个<RefinementList>组件,并将其attribute属性设置为date,但是这些日期是 Unix 时间戳(为了便于比较)。这对用户体验来说并不理想。让我们做得更好。

安装和配置小工具

要启动并运行日期范围选择器,我们需要安装几个依赖项。

npm install @algolia/react-instantsearch-widget-date-range-picker @duetds/date-picker

这将安装官方的 Algolia React 日期选择器小部件及其依赖项 Duet 日期选择器。

从这里,我们需要将包导入到我们的src/App.js文件中,并初始化 Duet 日期选择器以供使用。

//在 create-instantsearch-app 代码中包含的导入之后添加

import { DateRangePicker } from '@algolia/react-instantsearch-widget-date-range-picker';  
import { defineCustomElements } from "@duetds/date-picker/dist/loader";

// Defines the custom elements from the date picker for use on the window object  
defineCustomElements(window);

既然这些包已经导入,我们就可以在页面上看到它们了。

添加日期范围选择器

要将选择器添加到页面,我们需要在<InstantSearch>组件中选择一个点。该应用程序的基础是一个search-panel。默认情况下,这里只有结果,但是我们也可以添加一个过滤器面板。

<InstantSearch searchClient={searchClient} indexName="concert_events_instantsearchjs">  
  <div className="search-panel">
    <div className="search-panel__filters"> 
      <DateRangePicker attribute="date" />
    </div>

    <div className="search-panel__results">

      //... Results code

    </div>
  </div>
</InstantSearch>

DateRangePicker 接受一个attribute属性。该属性接受索引中点击次数的基于日期的属性。

快速提示:DateRangePicker 接受一个 Unix 时间戳,从 Epoch 开始以毫秒为单位,而不是以秒为单位。根据您的数据结构,您可能需要在数据中创建一个辅助时间戳。

当您查看呈现的页面时,您现在应该有一个日期选择器。有一些小的 UI 障碍需要清理。

Duet 日期选择器使用了大量 CSS 自定义属性来设计样式。在我们的src/App.css文件的开始,我们需要粘贴这些文件并为我们的应用程序进行配置(如果合适的话)。

:root {  
  --duet-color-primary: #3c4ee0;  
  --duet-color-text: #333;  
  --duet-color-text-active: #fff;  
  --duet-color-placeholder: #666;  
  --duet-color-button: #f5f5f5;  
  --duet-color-surface: #fff;  
  --duet-color-overlay: rgba(0, 0, 0, 0.8);  
  --duet-color-border: #d6d6e7;  

  --duet-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,  
  Arial, sans-serif;  
  --duet-font-normal: 400;  
  --duet-font-bold: 600;  

  --duet-radius: 3px;  
  --duet-z-index: 600;  
}

这两个选择器区域仍然靠得有点近,所以让我们也用一点 CSS 来解决这个问题。这可以放在src/App.css里,但应该更靠近底部。有许多方法可以获得两个项目之间的空间,快速简单的解决方案是使用 CSS Grid 和gap属性。

.date-range-picker {  
  display: grid;  
  gap: 1rem;  
}

这样,我们就有了一个有效的、用户友好的日期选择器。不再需要处理 Unix 时间戳和转换。

借此进一步

这在小样本数据集中非常有效,但也可以用于任何 Algolia 即时搜索应用程序。如果你想进一步了解这个例子,可以通过编辑src/App.js中的 Hit 组件来创建一个更好的 UI。您还可以显示使用 CurrentRefinements 组件应用的当前过滤器。

使用自动完成创建端到端搜索体验

原文:https://www.algolia.com/blog/product/creating-an-end-to-end-search-experience-with-autocomplete-and-instant-search-results/

自动完成彻底改变了用户的搜索体验。你不用找很远就能找到证据;你只需要去你选择的搜索引擎或在线零售商那里寻找提醒。

两个最大的在线公司——亚马逊和谷歌——在各自的领域都是庞然大物,他们的成功很大程度上都归功于他们的搜索体验,而这在很大程度上依赖于自动完成功能。

当你考虑到他们内容的浩瀚时,在用户点击“输入”之前 提供精确和相关的建议是很有意义的。在任一平台的搜索栏中键入一个查询就像在海滩上搜寻一粒特定的沙子。他们的自动完成体验帮助用户在看似无限的内容中筛选,以尽可能少的步骤找到并发现他们需要的东西。

有了 Algolia,在线企业可以将自动完成体验更进一步,增加更直观的功能,如即时搜索结果和“联合搜索”(定义如下)。这些基于自动完成的功能附带了一些方法,这些方法可以创建即时反馈循环,从而提高相关性和速度,并最终推动发现。

向现有搜索添加自动完成功能

“我们如何将自动完成功能添加到我们已经存在的系统中?我们需要重做一切吗?这需要几个月的时间和大量的资源吗?”

正如你将看到的,添加自动完成功能几乎没有什么成本。但是有一个警告:你使用的 自动完成组件必须与你网站的其他部分分开构建,并且设计成独立于网站的其他代码运行。

构建独立的自动完成组件依赖于:

  1. 你是如何建立自己的网站的(整体式还是无头式)
  2. 您如何构建您的用户界面(整体式与可组合式)

第一步——用无头架构替换单片 UI

在第 3 步回到正题之前,让我们快速浏览一下系统设计(第 1 步和第 2 步)。

整块石头

搜索用户界面(表示层)有两个主要任务:管理 可视显示 (搜索栏、方面、结果等)。)和 用户交互 (查询文本输入、刻面点击、点击结果)。一个 单片 前端添加了另一个元素,即业务和数据逻辑,从而通过设计将应用的功能逻辑紧密地编织到其可视化和用户交互代码中。

单片 UI中,各部分会变得极其紧密地相互耦合。这就是独石的定义。这些部件将依赖于它们都使用的平台的特性。它们将基于共享的抽象进行通信,因为它们都使用相同的库。”

以用户输入订单后计算和显示销售税为例。一个单一的前端将计算销售税本身,而不要求从后台财务系统计算税收的金额。虽然采用这种方法可能有很好的理由,但这并不可取:当计算发生变化时,您需要重新编码前端代码(税收经常会发生变化)。将此与 10 或 100 个这样的业务逻辑结合到前端代码中,您最终会得到一个即使是最高级的工程师也无法解开的密不透风的结构。

更糟糕的是,当一个 UI 组件与其他组件共享它的业务逻辑时,这种纠缠变成了一个结,在所有 UI 组件之间产生了不必要的相互依赖。

开发人员抵制修改整体系统,因为他们声称(合理且现实地)改变需要时间,并且尝试起来风险太大、太复杂。快速的解决方法是修补它,但这只会增加未来变化的风险。除了重写或重构系统之外,没有干净的解决方案——那些耗费时间和金钱的可怕字眼。

然而,变化还是发生了:市场和做生意的方式在不断变化。

没事的时候就是铁板一块

这可能令人惊讶,但有时单片系统是一个合理的设计选择——如果它不会变得太大或太复杂(或太复杂)。不需要太多的技术,一个单一的代码体就可以完成所有的事情,简化了不同系统组件之间的交互。要实现非单片化,需要抽象和额外的机制,以允许组件独立运行(模块化),但仍然能够共享它们的数据和逻辑。单体设计通过在整个系统中共享代码和数据来简化事情,从而使所有数据和业务逻辑在全球范围内可用。

当真是没事做铁板一块

在本文中,我们将向您展示为什么现代的客户机/服务器 web 设计不能支持单一的设计。我们将专门关注一个非单片的、可组合的前端(将在下面定义),其中每个 UI 组件都是自给自足的,并且不共享其内部功能、数据或代码。

无头建筑

进入无头架构,它从前端移除业务逻辑,将其适当地放回专门的后台系统手中。

通过去 headless——即通过将前端与后端系统分离——前端代码显著减少,使前端开发人员能够专注于视觉和交互功能。

具有单一焦点的精简代码库实现了更大的解耦和灵活性,这为可组合性和自动完成等新功能的轻松获取铺平了道路。

可组合组件

除了无头解耦,你还希望表示层(即纯粹的视觉和交互组件)被解开。这要求各个 UI 组件尽可能地相互独立,从而实现真正的即插即用。让我们看看第 2 步是如何工作的。

第 2 步–添加 可组合 组件以分离任务并启用即插即用

在一个可组合前端中,每个 UI 元素(搜索栏、菜单、按钮等。)彼此独立工作,执行不同的功能,当这些功能组合在一起时,可以创建完整的用户体验。真正的可组合组件可以很容易地被替换,而不会对系统的其余部分造成任何影响。

每个 UI 元素的目标是解决特定的问题,易于实现,并通过 API 层连接到系统中的其他部分。这种设置允许电子商务公司将他们最喜欢的内部和第三方组件合并到一个灵活的系统中。

能够集成第三方组件尤为重要,因为构建这些组件的专家会随着市场和技术的进步不断改进他们的软件。这方面的一个例子是基于文本的搜索栏,它可以在一行代码中添加麦克风,然后转换为基于语音的搜索。

第三步——为自动完成和联合搜索选择最佳组件

可组合前端允许第三方开发者构建可互换的组件。这些组件提供者包括专门研究该领域的开发人员和业务专家——在自动完成示例中,开发人员、设计人员和业务专家专门研究搜索和 UI 设计。

我们的自动完成和即时搜索组件提供了一种无头/可组合的方法。在接下来的部分中,我们将看到我们的自动完成库如何执行组件间和前端/后端解耦,方法是自己完成大部分工作,主要要求将它放在代码的正确区域,并正确配置和参数化。

自动完成:获得可能的最佳查询

在其核心, autocomplete 是一个搜索栏和一个用户输入时的下拉列表位置。一个很棒的自动完成功能将向用户显示查询,在他们输入完整的搜索词之前,将获得他们需要的信息。

联合搜索提供了增强的自动完成体验,为方面和多种结果提供了占位符。

federated search

这种易于查看的多样性使得联邦搜索成为一种强大的自动完成模式。一个自动完成的联邦搜索界面可以 在不同的栏中显示不同的结果,或者更一般地,在屏幕的不同部分显示不同的结果。例如,在上面的图像中,产品出现在中心,吸引了最多的注意力;但是建议、分类和文章会出现在产品的侧面和下面,让用户走得更远,发现更多。

此外,自动完成功能可以作为一个交互式弹出窗口出现,独立于底层网站的其他功能。一旦他们在单独的窗口上点击一个选项,用户就返回到网站。

在幕后,autocomplete 需要 API 访问服务器端的数据。如果有多列结果,每个结果可以来自单独的数据集。

federated search back end data

将 headless 方面(一个获取信息的 API 调用)和 composable 部分(一个在其自己的代码库中做所有事情的弹出窗口)放在一起,任何在线业务几乎都可以立即启动并运行。根据 autocomplete 组件的可配置性,从简单的设计到雄心勃勃的设计应该不需要太多额外的编码。

自动完成的好处

自动完成已经变得无处不在,以至于现在它已经出现在大多数将搜索作为体验核心部分的网站上。甚至像 Slack 这样的消息应用程序也使用自动完成功能,让用户更容易找到他们需要的东西。事实上,Slack 是自动完成的一个非常完美的用例。根据经验,可能的搜索结果的广度越大(你每天发送多少条空闲消息?),自动完成对用户越有帮助。

许多以搜索为中心的网站甚至进一步利用了自动完成功能——例如,【Blissim(之前为 BirchBox),这是一家在线美容零售商和订阅服务公司,提供法国排名第一的美容盒子。

Birchbox — Comprehensive results with federated search

在 Blissim 网站上,用户可能想要搜索几样东西:一个品牌名称、一种特定的产品,甚至是一篇关于如何尝试特定美容趋势的博客文章。为了适应用户可能尝试访问的可能类别的数量,Blissim 的自动完成建议分为清晰描述的类别:品牌、类别、提示、产品、建议和常见问题。

Blissim 能够提供如此强大的自动完成体验,因为他们对自己的数据和建议的相关性非常有信心。事实上,他们的信心如此之强,以至于当搜索栏为空时,网站甚至会向他们最常访问的页面显示建议。

随着时间的推移收集数据是建立这种关联的最佳方式。Blissim 有十年的时间来分析他们的搜索数据,并将其转化为一种工具,帮助客户在每次访问网站时获得最佳的搜索查询。

即时搜索结果:驾驶发现

如果 autocomplete 可以帮助用户生成最佳的搜索查询,那么即时搜索结果可以让这种体验更进一步,有助于推动发现。instant search 不是实时更新查询建议,而是在用户在搜索栏中键入查询时刷新实际的搜索结果页面。

InstantSearch 是一套完整的可组合组件,可以单独工作,也可以互换。因此,它具有与自动完成相同的优点,可以相对简单地集成到现有应用程序中。

要了解即时搜索的运行情况,让我们以 Lacoste 为例。这家受欢迎的服装公司的法国网站通过在用户完成查询时刷新搜索结果页面来提供真正的交互式搜索体验。例如,如果用户在搜索栏中键入字母“d”,搜索结果页面会立即更新包含字母“d”的产品名称。然而,如果用户继续键入并输入“连衣裙”,结果页面现在会将项目缩小到连衣裙,甚至显示连衣裙的促销活动。

添加这一层为用户创造了全新的体验。即时搜索不是试图预测用户的查询,而是试图预测最有效的最终结果——通常在用户点击“enter”之前不会预测。与筛选类别不同,用户看到的是与他们的查询最相关的项目,这比网站仅仅依靠自动完成更快地将他们从 A 点带到 B 点。

将所有这些放在一起:一个伟大的端到端体验

一个网站迎合用户的方式有无数种,没有一种方法是放之四海而皆准的。让我们看两个不同的例子来说明这一点。

首先,考虑一个既有患者门户又有医生网站的药房。虽然每个组的结果库将是相同的,这两个受众如何与他们各自的网站交互将是非常不同的。将由药房来考虑哪些搜索功能将为每个受众提供出色的端到端体验,这可能涉及为每个网站定制自动完成建议或提供针对每个受众的即时搜索结果。

虽然提供优雅是有帮助的,但它也会把人引入歧途。假设一个用户登录到 Open Table 进行晚餐预订。他们可能在搜索一家特定的餐馆、一种菜肴或一个地点。试图过早缩小结果范围实际上可能会限制用户体验。使用带有联邦搜索的 autocomplete 将所有三个可能的路径统一到一个显示区域,确保用户不会被引入错误的路径。

当涉及到构建一个出色的搜索体验时,应该始终考虑构建一个支持搜索和发现的界面。例如,在美国和欧洲,手机现在代表了超过 50%的网络流量,在发展中国家甚至更多;因此,为了适应有限的空间,必须拥有带有查询建议的自动完成组件。但即使在大显示器上,autocomplete 也提供了一个易于使用的界面,提供了各种选择,拓宽了购物者的可能性。

让您的数据一路领先

最终,最好的在线体验是那些为用户量身定制的体验。搜索结果越个性化、越相关、越有帮助,用户就越容易找到他们想去的地方。

海量数据是实现这一目标的关键。当你随着时间的推移收集大量高质量的数据时,就更容易了解用户的习惯,并能够预测他们——然后提供最佳的搜索体验来迎合这些习惯。

个性化搜索体验不是一朝一夕的事;这需要耐心、分析和尝试的意愿。但是如果你想开始建立这种体验,现在就开始吧。查看我们的演示请求演示。越早开始收集高质量的数据,就能越早找到自动完成和即时搜索元素的理想组合。

创建一个带有自动完成功能的 omnibar

原文:https://www.algolia.com/blog/engineering/creating-an-omnibar-with-autocomplete/

什么时候搜索栏不是搜索栏?当它是一个用 Autocomplete 构建的“omnibar”时!

https://www.youtube.com/embed/ghy7a78JGCQ

视频

在《与杰森一起学习》的一集中莎拉·达扬提到了使用自动完成来创造一种充满快捷方式和超级用户启示的体验的想法。

在本教程中,我们将通过设置自动完成来触发与 JavaScript 的交互。具体来说,我们将构建一个 omnibar 来切换网站的明暗模式。omnibar 是一个搜索字段,既有搜索功能,也有可以执行的操作。Chrome 或 Firefox 的搜索和 URL 栏就是一个很好的例子。

在搜索栏中,用户可以输入/命令。这些命令将被绑定到特定的 JavaScript 方法来触发。我们还将使自动完成结果有状态。当应用程序处于灯光模式时,灯光模式选项将显示“已启用”标志。启用黑暗模式时,黑暗模式选项将显示标志。

自己试一试!

配置与 React 一起使用的自动完成功能

在其核心,自动完成是一个普通的 JavaScript 库。让我们通过将它作为 React 组件安装在任何基于 React 的框架或站点中来使它更具可重用性。

我们将从 CodeSandbox 的基本 React 沙箱开始。分叉这个沙箱以获得所有为我们安装的包的准确起点。

为了创建我们的组件,我们将从添加一个名为Autocomplete.js的新文件开始。这个文件将包含自动完成库的所有初始化代码,并导出组件以供我们的应用程序使用。

在新文件的顶部,从 React、React-dom 和 Autocomplete 库中导入必要的元素。

import React, { createElement, Fragment, useEffect, useRef } from "react";  
import { render } from "react-dom";  
import { autocomplete } from "@algolia/autocomplete-js";

一旦导入,我们需要导出一个新的功能性 React 组件。我们将从创建新的挂载组件的基本样板文件开始。

export function Autocomplete(props) {  
  const containerRef = useRef(null);  

  useEffect(() => {  
    if (!containerRef.current) {  
      return undefined;  
    }

    // Space to initialize autocomplete on the newly created container

    // Destroy the search instance in cleanup  
    return () => {  
      search.destroy();  
    };  

  }, [props]);

  return /<div ref={containerRef} //>;  
}

这段代码将负责组件在安装和卸载时的基本初始化和分解。

在函数内部,是时候初始化 Autocomplete 实例了。

// Creates an Autcomplete component from the JS library
// https://www.algolia.com/doc/ui-libraries/autocomplete/guides/using-react/
export function Autocomplete(props) {
  const containerRef = useRef(null);

  useEffect(() => {
    if (!containerRef.current) {
      return undefined;
    }

    // Initialize autocomplete on the newly created container
    const search = autocomplete({
      container: containerRef.current,
      renderer: { createElement, Fragment },
      // Autocomplete render()
      // https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-render
      render({ children }, root) {
        // react-dom render
        // https://reactjs.org/docs/react-dom.html#render
        render(children, root);
      },
      ...props
    });

    // Destroy the search instance in cleanup
    return () => {
      search.destroy();
    };
  }, [props]);

  return <div ref={containerRef} />;
}

autocomplete方法接受一个选项对象。我们将container属性设置为该函数创建的元素。通过指定renderer函数,我们可以使用 React 的createElement方法和Fragment组件。

然后,我们需要为 Autocomplete 提供一个render函数。该函数将接受一个要呈现的组件对象(children),以及附加到实例的元素(root)。

然后,我们可以使用任何方法来呈现这些项目。在我们的例子中,我们将使用react-domrender()方法,并向它传递那些相同的元素。最后,我们想通过autocomplete方法传递我们使用组件时添加到组件中的任何附加道具。这将允许即时定制。

使用<Autocomplete />组件

转到App.js文件,我们可以导入我们的自动完成组件(以及一些默认样式)。

// Styles
import "./styles.css";  
import "@algolia/autocomplete-theme-classic";  

// Import algolia and autocomplete needs
import { Autocomplete } from "./Autocomplete";

现在,我们准备在页面上放置一个自动完成字段。在App()函数的 JSX 返回值中,我们可以将<Autocomplete />组件放在对 UI 有意义的任何地方。我建议放在网页正文之后。

export default function App() {  
    return (  
      <div className="App">  
           <h1 className="text-xl">  
             Run JS from{" "}  
             <a href="https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/">  
               Autocomplete  
             </a>  
           </h1>  
           <p className="text-base">  
             This demo is based on the amazing idea of{" "}  
             <a href="https://twitter.com/frontstuff_io">Sarah Dayan</a> in her  
             appearance on{" "}  
             <a href="https://www.learnwithjason.dev/javascript-autocomplete">  
               Learn with Jason  
             </a>  
             .  
           </p>  
           <p>  
             Use the Autocomplete box below to toggle dark mode and perform other  
             JS-driven actions on the page.  
           </p>  

            <Autocomplete />

      {/* ... the rest of the function ... */}
      </div>
    )
  }

Autocomplete 组件可以接受任何属性,只要这个属性是autocomplete-js库可以接受的选项。首先,让我们添加占位符文本。

<Autocomplete placeholder="Try /dark" />

一个搜索字段应该出现在我们的应用程序与占位符文本集。这个字段还没有做任何事情。让我们添加一些数据来完成。

向自动完成组件添加一个actions

自动完成库能够针对多个源创建自动完成功能。在我们的例子中,我们只有一个静态源,但是任何外部数据——包括 Algolia 指数——都可以用来填充这个功能。

要添加一个源,我们将使用getSources属性并提供一个接受query选项的函数。该查询是用户主动输入到输入中的内容。我们可以用它来检查数据中的项目。

源是 getSources 返回数组中的对象。我们需要的源的基本元素是一个sourceId字符串、一个用于呈现的template对象和一个返回数据的getItems()函数。现在,我们只返回一个带有标签属性的静态数组。这足以填充我们的自动完成功能。让我们也添加openOnFocus作为道具,当用户聚焦字段时自动列出我们的项目。

<Autocomplete  
  placeholder="Try /dark"
  openOnFocus   
  getSources={({ query }) => [  
    {  
      sourceId: "actions",  
      templates: {  
        item({ item }) {  
          return <h3>{item.label}</h3>  
        }  
      },  
      getItems({ state }) {  
        return [  
          {  
            label: "/dark"  
          },  
          {  
            label: "/light"  
          }  
        ]  
      }  
    }  
  ]}  
/>

现在,我们有项目填充我们的领域,但我们不过滤项目,因为我们键入。让我们用几个辅助函数来解决这个问题。

过滤并突出显示自动完成的项目

当使用 Algolia 索引时,我们可以使用一些辅助函数来管理过滤和突出显示,但我们没有使用 Algolia 索引。在我们的用例中,我们希望将它完全保留在浏览器中。为此,我们需要几个助手函数来适当地过滤和突出显示我们的选项。

用 JavaScript RegExp()过滤自动完成项

JavaScript 提供了基于正则表达式测试过滤数组的能力。要做到这一点,我们需要创建一个模式来测试用户可能向我们抛出的任何组合。让我们基于查询创建一个助手函数,并在 JS .filter()方法中使用它。

App.js导出之外,我们将创建新的助手函数getQueryPattern()

function getQueryPattern(query, flags = \"i\") {  
  const pattern = new RegExp(  
    `(${query  
      .trim() // Trim leading and ending whitespace 
      .toLowerCase() // convert to lower case
      .split(" ") // Split on spaces for multiple commands 
      .map((token) => `^${token}`) // Map over the resulting array and create Regex_  
      .join("|")})`, // Join those expressions with an OR | 
    flags  
  );

  return pattern;  
}

export default function App() { /* ... */ }

一旦创建了 helper 函数,我们将在返回项目数组之前在getItems()方法中创建模式。

有了保存的模式,我们可以用它来测试我们的数组。

<Autocomplete
  placeholder="Try /dark"
  openOnFocus
  getSources={({ query }) => [
    {
      sourceId: "actions",
      templates: {
        item({ item }) {
          return <h3>{item.label}</h3>
        }
      },
      getItems({ state }) {
        const pattern = getQueryPattern(query);

        return [
          {
            label: "/dark"
          },
          {
            label: "/light"
          }
        ].filter(({ label }) => pattern.test(label)) // tests the label against the pattern
      }
    }
  ]}
/>

现在,当我们在字段中键入/dark时,只有/dark选项。我们没有给用户任何提示,说明为什么会这样。让我们添加一个小的突出显示功能来展示输入的字母。

高亮显示结果中正在键入的字符串

为了突出显示键入的文本,我们需要获取查询文本和我们在上一步中创建的模式,并生成一个新的字符串,在键入的文本周围添加附加的降价。

getQueryPattern助手函数之后,让我们创建一个新的highlight助手函数。

function highlight(text, pattern) {

    // Split the text based on the pattern  
    const tokens = text.split(pattern);

    // Map over the split text and test against the pattern  
    return tokens.map((token) => {

      // If the pattern matches the text, wrap the text in <mark>  
      if (!pattern.test("") && pattern.test(token)) {
        return <mark>{token}</mark>;
      }

      // return the token back to the array  
      return token;
    });
  }

这个 helper 函数接受要测试的文本和要检查的模式,并返回一个带有附加标记的字符串。

我们首先根据模式分割文本。这将给我们一个由两部分组成的数组——匹配的和不匹配的。当我们映射这个新数组时,我们可以对照模式检查文本,如果匹配,就用一段新的标记包装这个特定的项。如果没有,返回未修改的文本。

<Autocomplete
  placeholder="Try /dark"
  openOnFocus
  getSources={({ query }) => [
    {
      sourceId: "actions",

      templates: {
        item({ item }) {
          return <h3>{item.highlighted}</h3>
        }
      },

      getItems({ state }) {
        const pattern = getQueryPattern(query);

        return [
          {
            label: "/dark"
          },
          {
            label: "/light"
          }
        ]
        .filter(({ label }) => pattern.test(label)) // tests the label against the pattern
        .map((action) => ({
          ...action,
          highlighted: highlight(action.label, pattern)
        }));
      }
    }
  ]
  }
/>

有了这个助手函数,我们现在可以映射所有被过滤的条目。我们将采取行动项目,并返回一个对象及其所有的初始属性,但一个新的highlighted属性,其中包含我们突出显示的文本。这是根据动作的label属性和我们之前定义的模式构建的。

现在,我们将使用新的highlight属性,而不是在模板中使用action.label。当/dark被输入到字段中时,该项目将有正确的高亮文本。

过滤 UI 已经完成,但是当我们选择一个项目时,什么也没有发生。让我们解决这个问题。

onSelect在自动完成中触发一个 JavaScript 函数

getSources数组中的每个源可以有自己的onSelect方法。这个方法定义了当用户通过键盘或点击选择一个选项时的功能。

让我们首先创建一个全局选择函数来记录项目的数据,然后将查询重置为空字符串。

getSources = {({ query }) => [
    {
      sourceId: "actions",
      templates: {
        item({ item }) {
          return <h3>{item.highlighted}</h3>
        }
      },
      // Run this code when item is selected  
     onSelect(params) {
        // item is the full item data
        // setQuery is a hook to set the query state
        const { item, setQuery } = params;
        console.log(item)
        setQuery("");
      },
    }

对于一个动作,我们可以在这个方法中定义 JavaScript,但是为了使这个方法在将来可以被任何动作重用,让我们在项目的数据上定义这个方法。

为此,我们将为每个项目定义一个名为onSelect的方法。这个方法可以处理您需要的任何功能。在这种情况下,我们将创建一个非常简单的黑暗和光明模式,方法是将类dark添加到主体以启用黑暗模式,并移除它以启用光明模式。

{
  label: "/light",
  onSelect() {
    document.querySelector("body").classList.remove("dark");
    notify("Light Mode enabled");
  }
},
{
  label: "/dark",
  onSelect() {
    document.querySelector("body").classList.add("dark");
    notify("Dark Mode enabled");
  }
},

现在,回到主onSelect方法,我们可以运行item.onSelect(),而不是运行console.log(item)。这将启动我们刚刚创建的函数。

我们现在有功能性的行动!

增强全方位体验

有了工作动作,我们可以专注于为 omnibar 打造强大的用户体验。

自动高亮并选择

首先,让 Autocomplete 自动突出显示列表中的第一项。这将允许用户只需按回车键就可以选择一个动作。

为了添加这个特性,我们需要向<Autocomplete />组件传递一个新的道具。通过给属性defaultActiveItemId传递一个值"0",我们可以激活列表中的第一项。任何激活的项目都可以通过按回车键来选择。这带来了坚实的键盘体验。

使用新组件创建更健壮的 UI

让我们抽象出template来使用一个叫做Action的独立组件。我们可以在一个单独的文件中构建它,或者在App.js中创建它。

为了使用该组件,我们将向它传递一个包含我们的项目数据的hit属性。该组件还将使用特定的类名,这些类名与我们在本教程开始时导入的经典主题中的特定项目相匹配。

在标记内部,我们提供了突出显示的文本和两个新项:hit.icon和 return 键的 SVG 表示。这增加了一些定制的图标

function Action({ hit }) {
    // Component to display the items  
    return (
      <div className="aa-ItemWrapper">
        <div className="aa-ItemContent">
          <div className="aa-ItemIcon">{hit.icon}</div>
          <div className="aa-ItemContentBody">
            <div className="aa-ItemContentTitle">
              <span>{hit.highlighted}</span>
            </div>
          </div>
        </div>
        <div className="aa-ItemActions">
          <button
            className="aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly"
            type="button"
            title="Select"
          >
            <svg viewBox="0 0 24 24" width="20" height="20" fill="currentColor">
              <path d="M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z" />
            </svg>
          </button>
        </div>
      </div>
    );
  }

一旦组件被创建,我们需要改变我们的item模板来使用它。

templates: {
    item({ item }) {
      return <Action hit={item} />;
    }
  }

我们还需要为每个操作项添加一个图标属性。在这个例子中,我们有一些手工制作的 SVG,但是任何图标库都可以。

return [
    {
      icon: (
        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor">
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            strokeWidth={2}
            d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"
          />
        </svg>
      ),
      label: "/dark",
      enabled: state.context.dark,
      onSelect({ setContext }) {
        document.querySelector("body").classList.add("dark");
      }
    },
    {
      icon: (
        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor">
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            strokeWidth={2}
            d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"
          />
        </svg>
      ),
      label: "/light",
      onSelect() {
        document.querySelector("body").classList.remove("dark");
        notify("Light Mode enabled");
      }
    },
  ]

这看起来真的很不错。有点奇怪的是,该网站是在光模式,但光模式选项没有提供这方面的指示。让我们为我们的用户添加一些上下文。

setContext创建启用状态

自动完成使我们能够访问状态。让我们用它来创建一个enabled状态,并在我们的动作被触发时设置这个状态。

让我们从给每个名为enabled的动作添加一个新属性开始。

{ //...
  label: "/dark",
  enabled: state.context.dark,
  // ...
},
{ //...
  label: "/light",
  enabled: !state.context.dark,
  // ...
}

该属性将检查 Autocomplete 的 state 对象中是否有标记为dark的上下文项。如果dark设置为true,暗动作将为真enabled状态,如果false,亮将为真。

为了获得上下文,我们需要在我们的onSelect函数中设置应用程序的上下文。我们可以将setContext方法传递给我们的onSelect函数,并使用它将dark设置为真或假。

我们需要为 sources 方法传递 options 对象中的setContext方法。从将getSources={({ query })}改为getSources={({ query, setContext })}开始。然后我们可以在我们的onSelect函数中使用setContext

onSelect({ setContext }) {
  document.querySelector("body").classList.remove("dark");
  setContext({ dark: false });
}

现在剩下的就是在我们的组件中使用enabled布尔值。

function Action({ hit }) {
    // Component to display the items
    return (
      <div className="aa-ItemWrapper">
        <div className="aa-ItemContent">
          <div className="aa-ItemIcon">{hit.icon}</div>
          <div className="aa-ItemContentBody">
            <div className="aa-ItemContentTitle">
              <span>{hit.highlighted}</span>
              {hit.enabled && (
                <code className="aa-ItemContentTitleNote">Enabled</code>
              )}
            </div>
          </div>
        </div>
        <div className="aa-ItemActions">
          <button
            className="aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly"
            type="button"
            title="Select"
          >
            <svg viewBox="0 0 24 24" width="20" height="20" fill="currentColor">
              <path d="M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z" />
            </svg>
          </button>
        </div>
      </div>
    );
  }

因此,我们的 omnibar 是有状态的。这是黑暗模式的一个相对简单的例子。为了更好地构建它,您可以从应用程序的整体状态或者基于用户的本地存储中的信息来添加和设置 omnibar 的上下文。

下一步

在本教程中,我们构建了不仅仅是搜索的 Autocomplete,但是您也可以使用不同的源对象和它自己的一组模板来添加常规的搜索功能。您还可以扩展这些操作,以匹配应用程序具有的任何潜在操作。

一些想法:

  • 添加到待办事项列表或已保存列表
  • 时事通讯注册
  • 用户配置文件更新

我们很想看看你有什么想法。分叉启动沙箱(或者这个完成了一个),创造一些新的东西,然后在 Twitter 上和我们分享。在我们的开源代码交换平台上查看相关解决方案。

为内容丰富的电子商务和媒体创建搜索相关性

原文:https://www.algolia.com/blog/product/creating-great-search-relevance-for-ecommerce-and-media/

我们继续我们的搜索相关性系列。我们的第一篇文章 定义了相关性 ,描述了一个 相关性循环 ,该循环从 搜索 (即查找和订购项目)开始,并继续高级 浏览发现 策略,如商品销售、内容管理、个性化

在本文中,我们主要关注循环的第一部分,搜索。我们浏览了一些真实的例子,并搜索了创建生产级相关性的配置策略。我们分解并优化搜索相关性的两大支柱:

  • 文本相关性查找与查询匹配的
  • 排名排序 所找到的商品中哪些 商品最符合查询

首先,我们将展示这些支柱在很大程度上取决于您如何 构建和配置您的数据 。为了说明这一点,我们将描述一些基础知识: 可搜索属性分面自定义排名——这些术语我们将在后面定义。

我们将讨论重要的配置,如 同义词语言错别字设置 。最后,我们将展示 分析的重要性,测试您最重要的查询 以查看它们是否返回所需的搜索结果。

匹配单词到内容

我们说的“相关性”,往往是指“ 文本 相关性”,是指搜索引擎如何将一个查询的词与你的底层数据(搜索索引)进行比较,返回匹配结果。

有两个相关的问题要问:

  • 内容中的条目与查询中的词匹配吗?
  • 如果是,这是一场强有力的比赛还是弱有力的比赛? 最佳 匹配是 最强 匹配。

为了说明我们所说的找到弱匹配和强匹配是什么意思,想象一个使用最简单的相关性形式的搜索,即 逐字母比较

这里有四个著名的引语(我们已经在第一部分中讨论过了,但角度略有不同)

  1. “要还是不要: 就是这个问题了”(作者威廉·莎士比亚)
    *** “那是 成为 的第一个时代,那是最坏的时代”(作者查尔斯·狄更斯)* “不要问你的国家能为你做什么——问你能为你的国家做什么”(美国总统约翰·肯尼迪)* “很长一段时间我习惯去 【d 早】(作者马赛尔·普鲁斯特)**

**文本匹配可以是精确的,也可以是部分的。搜索"be"匹配 3 条记录的文本:记录 1 (" be "),记录 2 (" be st "),记录 4 (" be d)。在本例中,记录 1 是最强的,因为它是完全匹配的,而记录 2 和 4 较弱,因为它们只是部分匹配。

继续这个例子,如果我们允许 1 个单词的错别字,那么搜索“ that ”将找到记录 1 和 3,其中记录 1(“that”)比记录 3(“what”)强,这与查询相差 1 个字母。

匹配 意图

如果只是这么简单的话……事实是,搜索人员的要求远不止这些。搜索不仅仅是匹配文本。他们希望他们的结果感觉直观。这里有一些额外的问题要问:

  • 我应该以什么顺序显示这些记录?

  • “最好”这个词应该回归什么?只记录 2(最好 的次数)?但是,如果用户一直在寻找“最佳”的 创意=比如,最佳报价,会怎么样呢?

  • 创造一个“最好”的同义词,比如“最伟大”怎么样?

  • 查询“question”(“question”输入错误)应该返回记录 1 吗?

  • 如果有人只寻找“文学名言”(记录 1,2,4)呢?

  • 如果我只想查找从法语翻译过来的引文(记录 4),该怎么办?

为了帮助实现这一点,我们需要考虑内容/数据的质量以及如何最好地配置它。

内容,或 数据 ,需要包含更多的细节。这里有一个更新的数据集:

  1. 《生存还是毁灭:这是个问题》,莎士比亚,英国,哈姆雷特,戏剧,引文
  2. 《这是最好的时代,这是最坏的时代》,狄更斯,英国,《双城记》,小说
  3. “不要问你的国家要求你什么——问你能为你的国家做些什么”,肯尼迪,美国,演讲,政治
  4. “很长一段时间我习惯早睡”,普鲁斯特,法语,寻找逝去的时光/ a la recherche du temps perdu,小说

有了这么多数据,还有一步:引擎需要 配置 。我们会添加一些同义词。同义词不是数据的一部分,而是引擎设置的一部分。让我们加上“最好=最伟大”。我们还将配置引擎来匹配单数和复数形式(book = books ),并告诉它容忍打字错误和拼写错误。正如我们稍后将讨论的那样,还可以进行其他配置。

卷起袖子,让我们创建一组优化的可搜索数据

上面的引文被用来说明我们所说的相关性。现在让我们来看一个典型的媒体/电子商务例子:一系列书籍(用于购买或流媒体播放)。

在这里,我们可以设想书的信息(即属性)如下:

  • 标题
  • 描述
  • 作者
  • 流派
  • 封面图片
  • 人气

要搜索,我们不需要使用“封面图片”、“价格”或“人气”。我们现在也将忽略“描述”。其他字段(“标题”、“作者”、“流派”)将用于查找图书。这种只选择部分属性的过程有助于引擎聚焦于 可搜索属性 ,使你的信息更加精确,保证相关搜索结果。

  • 标题(可搜索)
  • 描述
  • 作者(可搜索)
  • 流派(可搜索)
  • 价格
  • 封面图片
  • 人气

其他字段用于其他目的。例如,用于在搜索结果中显示(“价格”、“图像”)和按(“人气”、“价格”)排序。

按相关性排序,称为排名

排序 对你的可搜索信息同样重要。我们称之为相关性排名。例如,如果您键入“king”来查找斯蒂芬·金写的书籍,您可能会在看到斯蒂芬·金书籍之前看到“标题”中带有“King”一词的书籍。要解决这个问题,你需要将你的属性按以下顺序排列(例如,“作者”在“标题”之上,让搜索引擎首先搜索作者):

  • 作者
  • 标题
  • 流派
  • 描述
  • 价格
  • 封面图片
  • 人气

还可以在顶部加上“流派”,这样《王者恐怖》会保证有好的效果。

  • 流派
  • 标题
  • 作者
  • 描述
  • 价格
  • 封面图片
  • 人气

这里的要点是你可以选择搜索内容的优先级。这是一项重要的业务定制,是每个书商的独特选择。

为了提高匹配度,我们添加“描述”作为后备。然而,我们需要小心。像“描述”这样的长属性可能会产生噪音,并在相关性方面产生误报。这样的属性通常包含太多的简单匹配。在这种情况下,您可以创建一个“简短描述”属性,该属性从“描述”中提取关键字的子集。

  • 流派
  • 标题
  • 作者
  • 简短描述
  • 价格
  • 封面图片
  • 人气

最后,让我们确保可以在字段的开头或中间搜索“标题”、“作者”和“简短描述”。这使得寻找“和平”能够找到“战争与和平”,即使“和平”不是标题中的第一个词。这对每个属性都不好,比如“流派”。我们用一个特殊的词“ (无序) ”来完成这一点。

  • 流派
  • 标题(无序)
  • 作者(无序)
  • 简短描述(未订购)
  • 价格
  • 封面图片
  • 人气

用自定义排名创建订单

这里我们重点关注属性“人气”。我们只需要告诉引擎使用“流行度”来帮助排序记录。

  • 流派
  • 标题(未排序)
  • 作者(无序)
  • 简短描述(未订购)
  • 价格
  • 封面图片
  • 人气

这个 自定义排名的想法需要一些上下文。当用户搜索“king”时,所有在可搜索属性中包含单词“king”的记录都会显示出来。将“作者”作为一个字段当然会确保这一点(关于斯蒂芬·金)。

问题是:斯蒂芬·金的哪本书应该排在榜首?哪一秒?这就是受欢迎的原因。没有办法知道先显示哪个,因为它们都匹配得一样好,所以我们可以按受欢迎程度排序。我们也可以订购最新的版本。

现在,如果有一个你想让你的用户知道的未知作者呢?您可以添加另一个自定义属性,如 promote-book(真或假),或者一个评分系统(1 到 5,1 对向用户显示非常重要)。其他自定义排名属性:最高利润或最流行。或者两种或多种属性的组合。

我们将这一过程描述为平局决胜,我们比较匹配项,将最强的匹配项放在顶部,较弱的匹配项放在较低的位置。例如,如果有人键入“ki”,与“ki”完全匹配的作者(例如,【Ki Lynn】)将比仅部分匹配的作者显示得更高。但如果用户加上“ng”,使其成为“王”,Ki Lynn 下降(作为 精确匹配中的 )而 Stephen King 上升到顶部。此外,由于流行度是一个自定义排名,斯蒂芬·金很可能会填满搜索结果的前 10 页。(有办法避免这最后一个事实——一个受欢迎的作者可以在搜索结果中独占鳌头。例如,您可以将斯蒂芬·金限制为只有 3 个结果。)

利用同义词、错别字容差、过滤器、分析进一步优化相关性

现在你的数据可以搜索了,排名也合适了。搜索引擎不需要知道更多关于你的数据。您已经构建了它,并通过指定如何搜索赋予了它意义。我们可以做更多的事情来管理某些特定的情况,但是我们所做的事情在很大程度上已经足够了。但是我们可以更进一步,创建同义词和方面(即过滤器)。

添加同义词

每个顾客都有一套独特的词,可以通过创造 同义词 来满足。就书而言,有一个词“小说”是“书”的同义词。有剧院和戏剧,有作者和作家,还有诸如“椅子”和“座位”,或“裤子”、“宽松裤”和“裤子”等世俗的同义词。很多相关的同义词可以来源于一本字典,但其他的则非常具体到一个行业或一家公司。他们也可以 AI-power 你的同义词

添加滤镜

已经提到过,对于书籍,添加“流派”和“作者”这样的属性有助于用户根据这些和其他过滤器挖掘和挑选出书籍。 滤镜 可以在后台工作,也可以放在屏幕上作为

错别字&拼写错误

你的搜索引擎应该能够找到只有一两个字母不同的单词。然而,打错“shakspear”应该找到“shakespear”。这叫做

语言设置

将您搜索解决方案的 语言 设置为您用户的母语。如果你只卖英文书,你需要告诉搜索引擎你的用户将用英语打字。然后,搜索引擎可以应用特定于语言的逻辑(例如确定复数或单词分离)。但是,如果您的读者也是法国人,您可能希望开始向数据中添加法语文本,或者创建一组不同的数据—一个英语,另一个法语..

你会希望搜索引擎区分单数和复数,不要被“the”、“what”和“And”这样的“stop”词所困扰。

分析和测试

最后, 分析学 。您希望跟踪输入最多的前 10 个查询。然后,测试这 10 大查询和其他分析指标,看看您对结果是否满意。还有,避免提供 没有结果 。查看您的热门搜索是没有返回结果,还是只返回少量结果。并跟踪 用户点击量和

最后,用你所有的 分析报告 ,以及 AB 测试 ,来分析提升你的搜索性能。

结论——超越搜索

匹配文本是一个关键的起点。为此,您需要预测用户的查询和表达方式,然后组织数据以匹配最常见的查询词。正如我们所见,简单的文本匹配并不能解决所有问题。您还需要过滤、排名、属性优先级、处理错别字、同义词和其他基于语言的特征等功能,以便让搜索引擎能够从字里行间读出意思。下一步是超越搜索 的 ,看看你如何能够 深化你与个性化 的关联,销售,浏览,发现和推荐。**

作为增长动力的文化

原文:https://www.algolia.com/blog/algolia/culture-growth-driver/

今天对阿尔戈利亚来说是一个特殊的日子。在被glass door and Battery Ventures选为最值得工作的私有云公司不到一个月之后,我们被杂志评为最佳工作场所之一

当我们获得 Glassdoor 奖时,我发现自己对朋友们说(只是半开玩笑地)这是真正让我感动的罕见奖项之一。这是对我们辛勤工作的认可,也是对我们不断投资建设我们热爱的公司的认可。

今天 Inc .杂志的奖项更是锦上添花!这一切都要归功于我们团队中的优秀员工,以及他们为让公司和我们所有人变得更好而做出的不懈努力。

早餐文化吃攻略

每天都有公司倒闭。即使是大公司,拥有由最有能力的个人精心设计的最先进的战略,也会经常被打乱——尤其是科技公司(想想美国在线、黑莓、诺基亚、雅虎..).避免这种命运的最佳方式是建立一个能够驾驭颠覆浪潮的团队,一个能够挑战自我的团队,一个能够不断走出舒适区的团队,最重要的是,一个永不自满的团队。你的下一个创新很可能已经在你团队中某个人的脑海里,而不是你的 CEO。这个人需要感受到前进的力量。

这正是我们建立文化第一公司的原因。

预测每一个挑战是不可能的,但有意识地设计你的文化并建立正确的肌肉来应对它们是可能的。

文化作为增长战略

对于文化与增长,人们通常认为你必须做出选择。你会冒险牺牲文化来发展你的业务吗?或者你会冒险牺牲你的生意来保存你的文化吗?

就增长而言,过去的一年对我们来说意义重大。2017 年,我们跨越了 2000 万美元的 ARR 里程碑,在纽约、亚特兰大和伦敦开设了新的办事处,我们的全球团队增加了 100 多人,并为我们的高管团队引入了新的领导层。随着这种增长,在文化上走一些捷径的诱惑很大:比如在我们文化优先的招聘流程中偷工减料,减少我们许多团队和办公室之间的见面时间,或者没有为员工满意度和增长投入足够的管理时间。

我的观点是,牺牲文化可能确实在短期内有所帮助,但它正在创造文化和人民的债务,我们最终将不得不偿还。要么为了短期利润而创造一种违背我们价值观的文化,最终让我们失望并失去让我们来到这里的优秀团队,要么因为后来的脱离和流动而导致增长放缓。

我只是认为,如果我们没有对我们想要建立的公司类型有明确的目标,我们就不会有今天的成就。这有助于我们吸引和培养人才,正是这些人才让我们成为今天的我们。这是一个以创新和使我们所做的一切都成为一流而自豪的团队,因为我们日复一日地参与、表达并对我们的价值观负责。

让文化成为你成长的力量,而不是让你慢下来的东西。

Algolia - one of the best private cloud company to work

I have a philosophy… if you hire the right people and empower them, then magic will happen.

让我们不要自满

我们为从 Glassdoor and Inc .获得的认可感到骄傲和谦卑,但我们还有很多工作要做。

我们还没有做到,我们知道这一点。和车队一起庆祝感觉很好,但是我们继续向前看,而不是向后看。更多的挑战等待着我们。我们成长得越快,这些挑战就越快落在我们肩上。

文化永远不会“终结”。我们希望继续建立一种赋权、多元化和包容的文化。无论我们未来的规模如何,我们都希望团队成员在工作生活中有意义。

今天,我们有一套强有力的核心价值观,为公司所有人所共享和珍视。这是一个很好的基础,但我们需要更多。我们正在创建运营原则以简化我们的日常决策,并推出新的多元化和包容性计划。

随着我们不断发展,我们的目标很简单——我们希望确保我们正在建设的公司是我们明天和未来几年想要为之工作的公司。

原载于 2018 年 5 月 23 日 阿哥利亚故事

以客户为中心的网站搜索趋势

原文:https://www.algolia.com/blog/ecommerce/customer-centric-site-search-trends/

市场上每天都有新的信息,关于购买什么技术,如何在竞争中定位你的公司,以及发展业务的新途径。让人应接不暇。然而,尽管大肆宣传,商业基本面并没有改变:伟大的公司痴迷于为他们的客户建设。就是这样。

谈到投资以客户为中心的搜索,在《2023 年电子商务搜索趋势报告中有一些明确的趋势。科尔曼·巴夏礼研究公司对 900 名 IT 和商业决策者进行了调查,旨在了解企业如何优先考虑项目和支出 2023。

搜索领域的投资持续同比增长,超过五分之二(42%)的企业投资超过过去 12 个月。在投资搜索的企业中,71%的企业表示,他们对搜索提供的回报相当满意。收入只是搜索改善的领域之一。他们还确定了以客户为中心的价值:

  • 46%表示满足了 客户需求
  • 40%表示改善了 客户体验
  • 36%的受访者表示,这让他们能够提供更加 个性化的体验

我们将在博客中分享我们如何解读这些结果,以及其他零售商如何改善顾客体验和顾客满意度。

search implementation factors

Figure 7 showing the benefits of site search investment and strategy via the 2023 Ecommerce Search Trends report by Coleman Parkes Research and Algolia.

满足客户需求

在线零售商花费了大量的金钱来增加网站的流量,但是如果他们的网站加载时间很短,就会严重影响业绩。更高的网络延迟会降低网站性能,影响客户体验和转化率。根据一些研究,慢速加载网站 每年让零售商损失 26 亿美元 。当涉及到满足全年每天的需求时,构建一个强大的搜索和发现体验可能比看起来有更多的好处。

站点搜索实际上可以帮助降低网站的网络延迟——它可以减轻网站服务器的巨大负担!这是因为搜索不仅支持网站上的搜索栏,还支持动态生成的产品列表页面(PLP)。毕竟,动态 PLP 是查询驱动的。

Algolia 的速度非常快。我们的云架构由全球 100 多个数据中心提供服务,以更贴近您的客户并最大限度地减少页面加载时间。事实上,Algolia CDN 非常好,我们的一些客户将它用作他们网站上所有列表的交付层。

客户体验

从客户的角度来看,搜索结果需要具有相关性。虽然这似乎是显而易见的,但并不容易。关键词搜索引擎很大程度上依赖于手写规则、同义词、网页标签和关键词填充。几乎不可能跟上所有的 长尾查询的可能性 。这是人工智能搜索在 2023 年及以后将产生巨大影响的地方。

long tail volume

人工智能搜索通过为每个查询提供更好的结果来改善客户体验。AI 搜索理解自然语言;它为不同种类的查询提供了更好的答案,如症状搜索、兼容性查询或概念式搜索。就其本身而言,人工智能搜索是改善长尾查询的理想选择。然而,它也为“大脑袋”查询提供了好处,尤其是在与关键字搜索结合使用时。

关键字和向量搜索合在一起是真正的 1+1 = 3。它们共同提高了搜索精度和召回率,通过提供更具代表性或更完整的目录产品集来提供更准确的结果。

配合 人工智能排名 强化学习等功能,自动持续地对结果进行重新排名,将最佳项目推至顶部,人工智能搜索已准备好为客户提供更好的在线体验。

个性化

至少自 2003 年亚马逊发表了一篇关于推荐的论文以来,个性化一直是一个常青的话题。尽管可供选择的个性化模式比以往任何时候都多,但由于数据隐私法规、技术挑战和电子商务堆栈中的许多移动部件,实施起来仍然很困难。然而,在我们的调查中,IT 和业务决策者表示,他们正在寻找各种方式来增强个性化,从购物配置文件到保存物品以备后用。

个性化不仅是业务增长的重要因素,也是当今消费者所期待和想要的。根据埃森哲的调查, 91%接受调查的消费者 表示,他们“更有可能选择那些认可、记得并向他们提供相关优惠和推荐的品牌”个性化是以客户为中心的!

这种在任何地方提供个性化的挑战是 Algolia 与MACH Alliance合作的一个原因——倡导 API 优先的无头服务互操作性,这些服务利用相同的客户和网站数据湖来近乎实时地生成个性化消息和结果。

ux impact

在《2023 年 电子商务搜索趋势报告 中,受访者认为 AI 为个性化提供了最大的好处。人工智能有多种形式。例如,Algolia 等解决方案中内置的新机器学习算法将能够对搜索结果和 PLP 应用个性化规则。当用户键入一个查询时,搜索引擎首先寻找相关性,然后它将重新排列结果,将更好的项目推到顶部,其中更好是指个性化规则、商品销售、排名规则或您定义的其他因素的组合。这发生在一位数毫秒,所以买家不会经历任何滞后。

下一步

大约 88%的买家 在一次糟糕的体验后不会再回到一个网站。每次访问都很重要!注册免费下载今年的 电子商务搜索趋势报告 以获得更多改进现场搜索&发现过程的想法。

客户支持更新,2021 年 11 月

原文:https://www.algolia.com/blog/product/customer-support-update-november-2021/

在 Algolia,我们一直希望为我们的客户提供最好的体验和我们团队的支持。这就是为什么我们一直在努力升级我们的售票系统,以改善您的体验,并更快地获得您需要的帮助。

我们很高兴地宣布,我们将推出一些支持服务改进。

继续阅读,了解更多关于我们的最新更新。

1。联合搜索

我们的 全新支持中心 让您通过 帮助中心搜索文章文档社区帖子 ,以及 学院内容 从语义搜索的角度来看,该搜索还突出显示了“最佳答案”。

奖励 :帮助中心新增 FAQ 文章。我们将根据您的支持请求不断扩大它!

T52

2。查看当前和过去的请求

帮助中心还为您提供了一个查看过去的支持票证并提交新票证的地方。通过帮助中心提交票证是确保您提供了所有必要信息以便我们尽快响应您的请求的最佳方式。

Algolia Customer Support - option to submit a ticket and view ticket history

请注意,您需要登录您的 Algolia 帐户才能查看您的机票历史并提交新机票。 您可以从支持中心的右上角登录。

Algolia Customer Support - Sign in button

您的帐户被锁定,需要提交申请才能重新登录?使用此 账号访问表单

3。更新表格和政策

说到提出请求,我们已经更新了机票申请表,以确保一开始就收集尽可能多的相关信息。

submit a ticket in Algolia Customer Support

最后,我们更新了我们的 支持策略 ,使它们更清晰、更容易比较产品。

客户

原文:https://www.algolia.com/blog/customers/

客户

可组合商务:如何将你的产品目录整合到微信、Google Home 和 Alexa

继续我们的可组合商务系列,我们已经讨论了诸如电子商务产品发现、库存管理和...

使用顺风类定制 Algolia React 组件

原文:https://www.algolia.com/blog/engineering/customizing-algolia-react-components-with-tailwind-classes/

当我上周在 Algolia 的巴黎办公室时,来自我们前端体验团队的 Dhaya Benmessaoud 向我展示了一个在你的 UI 中设计 Algolia 的 React 小部件的很酷的技巧。Algolia 提供了一些现成的搜索体验主题(Algolia 和 Satellite)以及创建自定义主题的能力。最近,前端体验团队增加了第三种方式来设计你的 UI,通过将自定义 CSS 类注入到你的 Algolia React 组件中。

对于使用基于类的 CSS 框架如 BootstrapTailwind 的人来说,这是个好消息!在我的例子中,我使用的是 Algolia 电子商务 UI 模板,它依赖于 Tailwind 的样式。我想从 Algolia 推荐 UI 库中添加一个<TrendingFacets>小部件到我的主页,但是我想使用 Tailwind 类来设计它的样式,以匹配我前端的其余部分。

这是造型前的样子:

Unstyled category list

我肯定能做得更好!为此,我需要为我的组件使用classNames属性。它适用于 Algolia 的所有 React 小部件(包括推荐),并允许您覆盖特定于组件的元素的样式。我们的其他一些前端 API,如 Vanilla JavaScript ( cssClasses)和 Vue ( class-names)已经有这个功能很多年了,现在它可以在 React 中使用,这要感谢最近添加了 React 挂钩的更新。

文档列出了我可以为每个 Algolia 小部件覆盖的元素。例如,下面是一个<SearchBox>小部件的元素:

  • root :小工具的根元素。
  • 表单:表单元素。
  • 输入:输入元素。
  • 提交:提交按钮。
  • 复位:复位按钮。
  • 装载指示器:装载指示器元件。
  • 提交图标:提交图标。
  • 复位图标:复位图标。
  • 加载图标:加载图标。

对于我的<TrendingFacets>小部件,我希望列表在一条水平线中以节省空间,所以我向它的list元素添加了一个flex类。我还将添加一个新的facetItem类,给每个item一个漂亮的胶囊形状,并带有一些简单的悬停样式。这是我的组件在样式化后的样子。

Tailwind styled category list

这是代码:

<TrendingFacets
  classNames={{ list: 'flex', item: 'facetItem' }}
  recommendClient={recommendClient}
  indexName={indexName}
  maxRecommendations={3}
  itemComponent={({ item }) => (
    <a href={item.facetValue}>{item.facetValue}</a>
  )}
  facetName={facetName}
/>

添加classNames来定制 Algolia 窗口小部件的风格是很有意义的,尤其是对于像我这样沉迷于用 CSS 来设计前端的人来说。你可以在 Algolia 文档中阅读更多关于添加自定义 CSS 类到小部件的信息。如果你是 Algolia 的新手,你可以通过注册一个免费等级账户来尝试一下。

如何使用引导式搜索来管理选择超载

原文:https://www.algolia.com/blog/ux/dealing-with-choice-overload-when-designing-navigation-for-ecommerce/

在这篇文章结束时,你会知道为什么大多数网站发现为他们的用户设计导航和过滤策略非常困难,为什么这是一个非常值得解决的问题,以及开始解决它的一种可能的方法。

事实证明,人类完全被过多的选择淹没了。另一方面,过多地限制选择也是一场灾难,这意味着它增加了你根本找不到你想要的东西的可能性。有可以比较的东西是很重要的,但是我们必须能够在头脑中保持这种比较,我们不能同时做许多选择

这就是为什么网络导航和过滤被证明是最难做好的事情之一,但同样最有潜力增加收入。您必须为所有可用的选项创建一个可访问的路径,同时让用户能够控制他们通过哪些路径来到达给定的选项子集。你的工作是用尽可能少的活动/点击,让用户走上他们需要的道路,找到他们想要的产品,同时提供足够的选择。

那么,我们能做些什么来保留足够的选择,同时减轻消费者的负担,使其不至于不堪重负呢?一种选择是提供引导购物体验。这在线下世界并不新鲜。在任何实体店,销售助理都是向导。如果在经济上可行的话,为每位顾客配备一名乐于助人的销售人员理论上应该会增加你拥有的快乐顾客的数量。如果你去一个新的城市,出租车司机可以做你的向导。如果你在餐馆,服务员是你的向导。

原理都是一样的。有人知道大多数可能的选择,至少比你知道得多。你给他们信号,他们解读这些信号,慢慢地把选择减少到你可以管理的子集,然后你就可以舒服地选择了。导游到底在做什么?他们 主动 帮你找到你要找的东西。主动这个词很重要。它将指南与地图之类的东西区分开来。地图是被动的。它为您提供了所有可能的选项,由您自己决定如何浏览它们。这里有一个更完整的例子:想象你独自一人进入一个巨大的跳蚤市场。你正在为你的客厅寻找一块地毯,这个市场有 500 多个摊位。你是做什么的?

第一步如下图所示,这是“类型”问题决策树,沿着每种类型的路径深入下去,可以帮助您找到您需要的单一类型。

guided discovery flow

你到达了地毯。现在重点完全变了。你不再根据产品类型进行提炼。你现在正在提炼单一产品类型的属性,也就是“种类”。这是一个重要的阶段。试探法已经从寻找符合“地毯”定义的东西转移到寻找“合适的”地毯。还是那种地毯。换句话说,类型更类似于类别,因为类别应该是互斥的,它们不应该重叠太多。否则,会给用户造成困难。Kind 更类似于一组过滤器,它们可以相互结合使用。

下一步开始,那种问题。你从对“合适”的定义倒退到地毯所具有的属性或特征。一旦地图制作完成,你就可以在一张地毯上匹配尽可能多的属性。如果价格合适,那么这可能就是你的地毯。

search sorting

Image via rugs.com

那么这里到底发生了什么?你的搜索经历了三个不同的阶段:

  1. 通过仅限于一种类型,即地毯,减少要搜索的产品范围
  2. 将您的喜好转化为该类型的属性,即哪种地毯
  3. 通过比较,尝试找到符合尽可能多属性的地毯

如果是引导式体验,为什么会变得更容易,从这个意义上说这意味着什么?

我们刚刚展示的方法完全是被动的。有问题的网站没有主动帮助客户,让他们做所有的工作。您使用站点的静态功能,通过为您提供过滤产品总数的方法,慢慢减少显示的产品数量。

如何让它变得活跃,或者换句话说,被引导?考虑这一点最简单的方法是,在终端用户需要做出选择的领域,尝试并找到减少认知负荷或总体工作量的方法。

当谈到计算选择时,你认为这一过程中最困难的部分是什么?通常,它是将客户偏好映射到属性,并试图找到最符合属性组合的产品子集的过程。

因此,我们可以推断,到达“类型”的整体导航不是我们需要优化的第一件事。造成最大困难的是“种类”问题。这就是引导式体验的闪光之处。这也是他们真正努力的地方,因为如果你错了,那就没用了。

有几个步骤可以让你设计出最佳的导游体验:

  1. 追踪。人们提炼最多的是每类产品的哪些属性?例如,如果你在销售地毯,你应该跟踪地毯类别中的用户对尺寸、图案和材料的偏好。在产品被点击之前,你应该跟踪他们提炼了什么组合。您应该跟踪细化通常是按照什么顺序选择的。
  2. 面试。假设大小是第一个常见的细化属性。询问人们是什么决定了他们选择的尺码。追踪最受欢迎的决定因素。这有助于您构建地图。
  3. 设计。给用户一个模型,从通常选择的属性中列出最常用的决定因素。例如:
    1. 样式

    2. 维护

    3. 预算
      要求用户选择对他们重要的决定因素,以及他们是否希望添加其他因素。抓住与每个选择的决定因素相关的属性,让他们从每个决定因素中选择相关选项。

    4. 让用户在选择时知道有多少产品符合他们的选择,以及其他可能的属性组合。提供不同的途径,也就是说,如果你将预算增加 X 倍,你将有更多的选择。Airbnb 价格滑块就是一个很好的例子。

    5. 使用丰富的图像和文字描述,让整个过程尽可能具有视觉刺激。确保用户感觉是在制作完美的地毯,而不是从一大堆地毯中挖掘出来。

    6. 反馈。如果你发现绝大多数人在他们的地图上优先考虑一件事,考虑把它作为导航的主要步骤。例如,如果你销售打底裤,并且你发现大多数人首先通过运动来提炼,那么考虑将运动作为打底裤的一个子类,就像在汗湿的贝蒂上看到的那样(下图)。在下面的第二张图片中,你也可以看到类似的概念在 Rugs.com 的运用,他们将不同种类的地毯组合成一个最受欢迎的菜单,例如现代、可洗、波斯等。

这些要点为什么有帮助?我们说过引导体验是艰难的。是真的。你已经接过了寻找的重担,你现在是顾问。因此,如果你没有给用户足够的灵活性来给你足够的/正确的信息,或者如果你把那些可能的选项弄错了,用户可能也不会在意。这些点确保体验足够灵活,可以从用户那里接收足够的数据,但也足够严格,可以通过帮助用户的地图和组合问题来主动减少用户的负担。

总而言之,我们一起看:

  • 有两种不同的搜索模式:按类型和按种类,其中类型涉及高级导航,种类涉及任何特定类型的特定属性
  • 所有搜索都是召回率(广度)和精确度的平衡,也就是说,随着来自用户的意图的每个连续信号,精确度增加,而广度应该减少
  • 认知负荷在分类搜索阶段最多,因此在该阶段获得指导的机会最多
  • 实施良好的引导式体验如何涉及跟踪、访谈、设计、激励和反馈循环

如果你已经建立了自己的引导体验,请告诉我它是如何进行的。我错过了什么?作为消费者,我们对此谈论得越多,我们就能为彼此做得越好。

这篇博客文章的灵感来自 Baymard research 的一篇文章。


1.脚注:

解码围绕物理(混合)购物体验的讨论

原文:https://www.algolia.com/blog/ecommerce/decoding-the-buzz-around-phygital-hybrid-shopping-experiences/

我们的专家将出席 Shoptalk,阐述如何在网上和现实世界的接触点创造成功的零售体验。 顺道拜访阿尔戈利亚的展台(#10018)

ShopTalk's floor plan showing Algolia's booth location

随着 3 月 27 日至 30 日在拉斯维加斯举行的shop talk美国会议的召开,这将是零售业的一次开创性事件,您可以期待它将塑造该行业的 关键对话。我们将在 Algolia 展位(#10018) 上探讨和澄清的最热门话题之一是,如何通过混合购物体验提升你的网站,让用户如梦如幻。

跨越物理和数字领域的个性化购物体验

对于零售行业来说,2022 年将是充满巨大增长潜力的一年。然而,在我们最近的 在线商务趋势调查中,接受调查的 900 名决策者中,只有 20%的人表示他们准备提供符合当今 UX 期望的个性化数字购物体验。能够弥补这一差距使得这一小部分零售商相对于竞争对手而言具有关键优势。

除此之外,过去两年在多个层面上对在线零售业来说都是极具挑战性的。随着新冠肺炎疫情的开始,在线零售商看到客户向在线购物迁移的显著上升。随后,供应链问题和短缺给零售利润以及企业快速服务客户并盈利的能力带来了巨大压力。

准备好真实的、不断发展的 物理 (或混合)体验,为顾客提供相同的对话机会,无论是在店内、网上还是回来,都可以帮助零售商减轻这些挑战的影响。真正的物理化,可以帮助零售商有效地与亚马逊和阿里巴巴这样的在线巨头竞争,也可以帮助较小的利基零售商保持和扩大他们的市场份额。

在 Algolia 展台了解如何快速体验混合动力

在 Algolia 的 Shoptalk 展台,我们的搜索专家将深入研究我们从零售客户那里收集到的趋势、案例研究和知识,其中包括 沃尔格林吉姆沙克、Nuts.com、 拉科斯特

algolia partner event mach alliance drinks Algolia 是创造个性化、强大的电子商务 搜索和发现 体验的全球领导者,受到全球 11,000 多家客户的信赖。在 Algolia 的 headless、API 优先的方法和技术的推动下,领先的零售商如 Lacoste 和 Gymshark 已经经历了显著的增长,例如自从与 Algolia 合作以来,移动转化率增长了 62%,黑色星期五新用户的订单率增长了 150%。

在 Shoptalk 上,我们的专家将带您了解我们如何让您的业务团队能够利用人工智能能力来控制他们的销售策略,从而推动零售接触点的增长,包括:

Algolia partner event MACHtail Mixer

Algolia 从一开始就提供强大的搜索和发现体验,其强大的功能包括速度、键入即搜索和文本相关性。我们的解决方案可以与任何技术堆栈一起工作,旨在最大限度地减少开发时间和精力。所有这些强大的功能使 Algolia 成为仅次于谷歌的第二大搜索引擎, 每周产生超过 300 亿次请求。

“对于像我们这样目录中有超过 25,000 种产品的零售商来说,能够改善每位用户搜索体验的解决方案会带来巨大的价值。结合对个性化算法的完全控制,以及通过实时模拟器和搜索 A/B 测试对其影响的完全透明,Algolia 的内置个性化代表了迪卡侬新加坡 “电子商务项目负责人迪卡侬新加坡Richard mige tte 在数字时代的真正进步

今天就在 shop talk(10018 号展位) 与我们一起预定您的会议

不来拉斯维加斯谈我们的生意?

您仍然可以获得一个 个性化演示 的 阿尔戈利亚的 解决方案和/或让我们的搜索专家 免费审核您网站的搜索 并向您提供他们的建议。

定义在线搜索索引的速度、相关性和功能。

原文:https://www.algolia.com/blog/product/defining-what-a-search-index-is-and-the-speed-and-relevance-of-a-search-engine-index/

一般来说,搜索索引就像是 一本书末尾的索引 ,其中有一个小的、非详尽的单词和主题列表,并附有页码。更准确地说,它是查询 到语料库(一大组在线书籍和文档、产品或电影目录)中内容的 映射。用计算机术语来说,它是一个单词的倒排列表(索引),搜索引擎使用它来查找语料库中每个文档中的每个单词。

但是书索引的比喻实际上是正确的吗?正如所有与技术相关的事情一样,在提供一个主题的概述和深入研究之间很难找到一个好的平衡——同时又不失去意义或你的观众。

过去,我们已经回答了*什么是搜索索引的问题。*以不同的方式:

  • 在最高层次上,我们描述了 一个指数能做什么 ,特别关注它如何改变了我们的网上购物方式
  • 在功能层面,我们举例说明了如何利用 快速索引过程 来驱动许多不同且令人惊讶的场景
  • 在技术层面,我们将 放在我们的搜索引擎索引 中,来描述索引的实际物理结构,以及这种结构如何使我们的搜索引擎能够存储数百万条记录,并且仍然能够在数毫秒内执行搜索

这篇文章涵盖了功能和技术之间的中间地带,定义了我们经常在谷歌、亚马逊和网飞看到的强大搜索索引的功能,并介绍了这些索引如何以如此快的速度执行。

书的比喻:一个搜索索引就像一本书后面的索引

一本传记的书籍索引看起来像这样:

  • 婚姻 :第 30、50-67、246 页
  • :第 2-15 页,第 77-89 页
  • 父亲 :第 10、83-85、150-178 页

搜索索引可以用非常相似的方式表示:

  • 婚姻 - >文件 1、5、400、900
  • 早年生活 - >文件 33、45、98、235
  • 父亲 - >文件 101、345、785

这本书的比喻很有用,因为它强调了一个总的想法,即 索引是一个 从底层内容中分离出来的 对象,也就是用来(方便快捷)** 找到 内容的特定部分 (一本书中的页数,文档集合中的文档)**

用另一个比喻来说,索引像指南针一样帮助我们将一本书导航到一张地图,而指南针取代了浏览地图的需要。同样的,一本书末尾的索引远比为了一个短语而扫描整本书的效率要高得多:它显然节省了你的时间,也更可靠。在上面的例子中,索引引导你可靠地找到传记中讨论主体“早期生活”的确切章节。

但是图书索引和搜索索引一样吗?

*比喻只能到此为止。书中的比喻没有完全抓住 搜索引擎索引 的能力、目的和机制,也没有完全抓住我们的期望。

例如:

  • 一个搜索索引通常会索引一本书或一组内容的 每个单词和部分 。如果一本书的索引包含了书中所有的单词和主题,那么它就太长了。然而,搜索技术强大到足以创建和搜索单词和主题的 穷尽式 索引。
  • 我们期望搜索引擎会向我们展示 每一条 内容,这些内容都提到了我们在输入搜索查询时键入的单词。
  • 搜索索引通常会搜索多本书。这是它最强大的方面之一,可以在瞬间组合和搜索大量内容。内容的例子:公司网站上的产品(网站搜索),图书馆的完整在线目录(每本书里的每一个词),或者网络上所有可抓取的东西(谷歌)。
  • 计算机是宽容的:它允许打字错误和拼写错误,忽略多余的词,如“the”和“is”,并理解多种语言和复杂的语法。
  • 搜索索引是动态的,随着底层内容的每次变化而更新数据。它尽可能快地做到这一点。一些变化预计是实时的( Twitter 的实时索引 、优步、机票预订),其他的是定期的,例如每 5 分钟,或者在一天或一周的过程中几次。
  • 索引提供 相关性——搜索技术中的一个中心话题。对于我们这里的目的,相关性帮助你发现内容、联系和其他你可能没有想到的术语,并把它们按照对你当前的研究有意义的顺序排列。

让我们这么说吧,书籍索引的比喻让你有机会理解索引的作用,但是像上面这样的细节(还有更多)可以帮助你理解搜索引擎索引可以实现的全部潜力,以及它如何改变了我们的生活。

那么,什么是搜索索引呢?

搜索索引可以在两种不同的上下文中使用:

  • 搜索 内容 ,比如书籍、博客、报纸文章、系统日志以及其他任何包含大量文本的“文档”中的文本。这里的期望是每个单词都有价值,因为搜索者正在寻找内容中使用的确切单词和短语。
  • 搜索 对象 ,比如亚马逊上的产品、网飞上的电影、医院里的服务——任何依靠属性来定义它的对象。这里的期望是对象的标题和描述足够准确,以便使用一组合理的关键字的搜索者能够找到该对象。

现在,你还可以通过给书籍贴上主题、主题、作者等标签来搜索书籍。,但如果搜索的根本目标是找到 内容 ,期望是书中的每个单词和句子都是可搜索的。

基于对象的搜索和属性

一个成功的基于对象的搜索(正如我们在这里所定义的)依赖于一组 属性 ,这些属性充分地描述了对象,因此搜索者可以使用一组合理的精选关键词找到他们想要的东西。关键字可以是一个或多个单词,甚至可以是第一个单词的前几个字符。例如,在寻找电影《星球大战》时,用户可能只需要键入“Star”;但如果搜索引擎将搜索算法建立在人气上(即在第一个结果中偏向热门影片),那么“st”应该足以找到大片 St ar Wars。

数量属性

如果你想找到一部电影,你很可能只需要几个属性,比如标题、描述、演员、工作人员、年份和其他一些属性。如果你想执行一个更一般的 re 搜索 ,你可以添加像主题、对话、交叉引用和附加背景信息这样的属性。然而,属性列表可能会变得很大。例如,汽车有 1000 多种属性——使用的材料、每个零件的名称、类型和年份、所有者历史、工厂和维修历史、速度等等。

所有对象的共同点是 关键词 的概念。关键字是内容所有者在构建对象属性时使用的词语,如标题、品牌、作者、年份和价格。或者从另一个角度来看:关键词是搜索引擎用来将索引中的词与搜索者的查询相匹配的“词”。

创建索引

如上所述,搜索引擎识别与用户查询(关键词)相匹配的文档(书籍、网页、产品)。为此,它不能扫描每个文档。所以它使用一个索引,要么是每个单词的详尽索引,要么是包含最重要描述子集的基于属性的索引。

在用户搜索 之前,创建一个 索引。它是对底层内容的预扫描。它也在服务器的一个单独的部分。例如,在基于内容的场景中,搜索引擎预扫描每个文档,并将所有的 唯一的 单词保存在索引中。正如我们在上一节(有趣的)中所描述的,许多搜索引擎以“倒排索引”的方式构建它们的索引。

不同种类的指标——具有准确性和相关性的排序结果

搜索索引是有顺序的。对于像谷歌和亚马逊这样的在线搜索,搜索结果通常是按照“最佳”而不是“准确”的匹配排序的。

在那些上下文中,不仅仅是关于 准确的 结果。如果用户输入“布拉德”,出现了布拉德·皮特,这并不意味着它是准确的。其他的结果将包括布拉德·戴维斯或布莱德 y 剧院。它们都以不同的方式相关,但没有一个可以被认为是“准确的”。一个输入“布拉德”的用户可能会选择去布拉德·皮特的维基百科页面,另一个可能会去布拉德·皮特的 IMDB 页面。准确性并没有真正抓住这些选择的意义。

它是关于给定用户如何感觉到 正确的结果,或者结果 如何匹配搜索者的意图 。回到指南针的比喻:指南针通过结合准确性和相关性来帮助我们导航:指南针给我们北方和南方的准确性;但它也给了我们相关性,为我们指明了目的地的大致方向,帮助我们将我们的意图与我们对物理世界的了解相匹配,以达到我们的目的地。 另一方面,我们期望 GPS 系统精确不相关。

想象一下,一名银行职员查看了你的记录,发现你欠银行一些钱。银行员工的搜索结果最好完全准确。同样,当商店员工或顾客寻找精确的产品时,他们对相关性不感兴趣:他们依赖准确、确切的产品标识符。

这并不是说通过相关性搜索不包含“准确性”的一个方面。比如有人输入“圆珠笔”,准确率就是找到所有有“圆珠笔”字样属性的产品。然而,准确性让位于相关性:相关性是首先显示哪支圆珠笔。

解释这种差异的一个更技术性的方法是考虑数据库和搜索索引之间的差异。类似数据库的索引(以银行为例)以准确性为中心——确保精确匹配被正确排序并详尽无遗。像 Google 这样基于搜索索引的搜索更加灵活,文本匹配是文本准确性和相关性的混合(优化你的内容,我们称之为 SEO(搜索引擎优化))。

类似于谷歌,我们在亚马逊和网飞看到的网站搜索,以及在由 Algolia 提供搜索的网站上,依赖于结构化属性集排名系统的组合,该系统基于流行度、趋势、喜欢和企业的产品推广需求。

搜索引擎服务器上的搜索索引

好的,让我们打开引擎盖。一个 搜索引擎索引 被保存在一个能够快速检索的结构中。我们称这种结构为 倒索引 。需要注意的一点是,索引是单独保存在服务器上的,与数据保存在不同的位置。

虽然有许多类型的倒排索引,有许多细微差别,但下图总结了这一思想:

inverted index

如你所见,用 一个倒排索引,搜索引擎倒排逻辑。因此,它不是阅读(扫描)文档来查找单词,而是颠倒这个过程,使用 单词 来查找文档。这里有一个倒排指数的例子:

  • 土豚 - >文档 1、5、400、900
  • 阿米巴 - >文档 101、345、785
  • 动物 - >文件 33、45、98、235

……等等。假设 999 个文档中有 10,000 个唯一单词。

上图中,搜索引擎搜索倒排索引的逻辑遵循这个过程找到“土豚”:

  • 索引有一行 26 个字母和 10 个数字。这一行下面是所有单词的倒置树。第一行、第一列包含以“a”开头的每个单词,下一列以“b”开头,依此类推。
  • 当你输入“a”时,你会得到每个以“a”开头的单词,然后删除每隔一列。
  • 这大概去掉了 90%的单词,所以引擎浮出水面的地方少了很多。
  • 你输入“aa ”,这将删除几乎所有剩余的单词。你可能只剩下不到 1%的原始列表。
  • 您键入“aaa ”,这将删除列表中所有剩余的单词:没有包含以“aaa”开头的单词的文档。
  • 因此,您从查询中删除“a ”,并添加“r”以获得“aar ”,只有一个词出现“aardvark ”,这将引导您找到 4 个包含 aardvarks 信息的文档。

一组文档中的每个单词就是这样存储在索引中的。对于没有前缀的中间词查询来说,情况变得更复杂,但是您已经明白了。

仅此而已……嗯,还有一个 lot 更详细。如果你对更多感兴趣,可以看看 Algolia CTO 关于 的文章。*

在尊重客户隐私的同时创造个性化体验

原文:https://www.algolia.com/blog/ai/deliver-a-valuable-personalized-shopping-experience-while-respecting-customer-privacy/

如今,一切都是关于个性化购物—你可以通过提供直接针对消费者偏好和需求的产品和用户体验来获得更高的收入和客户忠诚度。

科技可以推动这种成功。

最好的技术创造了快速简单的用户界面、吸引人的产品页面、流畅的结账流程等等。

better tech 使用人工智能来个性化在线购物体验。 个性化购物涉及到对顾客需求非常个性化和非侵入性的理解。

人工智能驱动的个性化购物需要收集 个人(非私人)数据 ,这些数据用于机器学习(ML)以开发人工智能(AI)模型。

最成功的网上商家都知道:

  • 哪些功能可以提供个性化的购物体验
  • 如何在不侵犯客户信任和隐私的情况下创造这些功能

隐私和利润并不矛盾 。相反,提供机器驱动的推荐和尊重隐私的个性化导航是一个双赢的提议。

personalized-shopping-stats

来源销售力量

我们所说的个性化购物是指什么?

以下是个性化购物体验的特点:

在登录页面、产品和类别页面以及购买屏幕上显示搜索结果和产品建议——源自用户活动分析,有助于辨别相似性、偏好和未来兴趣。

根据用户和群组档案显示基于产品或类别的建议,这些建议来自用户活动分析以及目录中的产品关系。

  • 动态关联与趋势

根据过去 24 小时或上周出现的最畅销、最受关注和其他此类客户活动信号,根据当前用户和行业趋势调整体验。

通过个性化的电子邮件、短信和时事通讯联系您的客户,根据客户最近的购买情况和总体偏好提供个性化信息。

personalized-shopping-stats

来源安座

让我们举一个来自在线体育零售商的真实例子。

以下是这些个性化购物功能的作用:

  • 鼓励你的用户浏览相关的运动项目;例如,引导他们探索相关的类别页面(马拉松运动员或运动鞋)。
  • 鼓励他们超越运动鞋,去发现其他运动项目(秒表、水瓶、运动裤),甚至超越运动,开始考虑正装鞋、炊具,甚至家居装修。
  • 将跑步者分组到同一个档案中,从而结合许多跑步者的行动来微调推荐。

收集什么样的个人资料才是正确的资料?

有很多种信号和数据点可以用来发现购买模式。这一切都始于以分析数据的形式捕捉用户行为。

关键是:

  • 只捕捉到了 的分析
  • 将分析结果输入不同的模型和算法,产生对未来合理和可能的预测

analytics

以下是需要收集的正确分析的非详尽列表:

  • 查看产品特征
  • 产品页面内的多次点击
  • 点击搜索结果和横幅
  • 购买或添加至愿望清单
  • 使用常用关键字执行某些搜索
  • 对产品进行评论或评级
  • 捕捉数据,如:
    • 消费者与网站互动的时间(不只是坐在静止的屏幕上,而是实际滚动和点击内容)
    • 他们花多长时间观看类似产品
    • 发现趋势,允许您根据过去 10 或 24 小时内的购买模式动态改变相关性和建议
  • 自动化 A/B 测试

尊重隐私听起来不可能吗?虚假的承诺?

捕捉分析事件本身并没有什么侵犯性。例如,在上面的跑步者的例子中,可以在不知道跑步者的姓名、地址或任何其他识别细节的情况下发现模式。像你结婚了吗,你的性别是什么,你在休息日做什么,等等这样的私人问题是不需要问的。

但是系统很容易越界——例如,当系统使用已登录客户的私人信息时。但这正是匿名化数据的用武之地,用一个匿名号码取代真实身份(姓名或电子邮件)。通过这种方式,没有人可以使用或滥用数据来找出用户的真实身份。

人们想要 不带任何附加条件的个性化体验。积极的隐私模式会增加你的客户群。

人们不希望 觉得自己被人监视或跟踪。他们想私下浏览和购物。

征求同意。 人们不希望感觉自己被人监视或跟踪。他们想私下浏览和购物。他们想成为设定界限并随时说“停止”的人。

永远不要突破客户信任的界限。低估隐私重要性的企业将会失去他们的顾客。

尊重客户隐私为您的企业增值

隐私不是一种约束。虽然这可能看起来违背直觉,但通过收集少量但明智的个人数据来尊重隐私对企业更有利。顾客想要个性化的体验。

personalized-experiences

来源原因原因

  • 有限的个人信息保证了数据质量。

你不需要多余的数据。这是一个基本的机器学习规则——只给你的系统提供最丰富、最可靠的数据。垃圾进,垃圾出。高质量的输入会带来最相关的结果。大数据不是个性化的基础。你只需要少量的智能数据。

  • 透明激发信任和忠诚。

与秘密获取私人信息相比,告诉用户你在收集什么数据以及为什么收集,你会获得更多的信任。

  • 在不知道一个人的身份的情况下仍能实现皈依。

要个性化体验,你只需要知道一个用户的行为。了解行为也不需要知道用户的姓名和地址或者他们的衣柜里有什么。您只对获取购买和查看习惯感兴趣,即他们点击、查看和购买了什么。

  • 删除用户身份可以基于行为而不是人进行更清晰的分析。

不知道身份导致富有成效的归纳。将具有相似购买模式的人分组有助于他们更全面地了解购物时可以做些什么。同样,你不需要在个人资料中知道每个人的名字来帮助他们进行智能和个性化的购买。分组应基于尊重隐私的数据收集,结合习惯和偏好,而不是身份。

遗言——不要不自量力。给人们选择权。

留给个人选择的空间。

不必要的过度侵犯隐私,开始让你的客户感到不舒服。这时顾客就退出了。

今天的客户在掌控之中。只做必要的事情来创造合理但不压倒性的个性化体验。

不要忘记——你总是要给用户留出空间,让他们探索自己偏好之外的东西。

无论您的客户选择加入还是退出,人工智能都可以推动他们的搜索和发现体验。一个成功的在线零售策略在使用和不使用收集个人数据的情况下都为机会和发现留有余地。

有兴趣了解更多关于个性化购物的信息吗?查看我们的完整电子书。或者直接参加现场演示免费启动

设计搜索体验——第 1 部分:Orange 和他们的手机

原文:https://www.algolia.com/blog/engineering/designing-a-search-experience-part-1-orange-a-tech-company-famous-for-their-jphones/

突击测验!什么是“产品”?

这个问题难倒你了吗?还是看起来…太简单了?不管怎样,这是我们应该进一步探索的事情,因为没有一个明确的定义。你可能会立即想到这样的事情:

产品 (名词):生产出来的东西;作为商品销售的东西——来自韦氏词典

这是一个很好的开始!但是作为开发人员和商务人员,我们开始遇到这个定义没有涵盖的奇怪的边缘情况。

例如,我的一个同事最近买了一双靴子——事实上是这双靴子。如果你点击那个链接,它会把你带到沃尔玛网站上这些靴子的产品页面。现在,如果我们假设这个页面代表一个产品,让我问你几个后续问题:

  1. 每款靴子都是自己的产品吗?
  2. 如果这些同样的靴子没有鞋带出售,它们会是不同的产品吗?
  3. 每一个鞋码都是新产品吗?

根据我们乏味的字典定义,这三个问题的答案都是肯定的,因为它们都是被生产出来的不同物体。然而,它们都有一些细微差别:

  1. 你可以争辩说,靴子不是单独销售的,因此它们不是单独的产品,而是一个整体。
  2. 如果该公司出售这种靴子的系带和无系带版本,那么你可以说该公司实际上认为这些版本是独立的产品。
  3. 每种鞋号都会改变靴子的生产过程,所以看起来应该有不同的产品——然而,沃尔玛似乎将鞋号列为单一产品的一个属性。

显然,我们需要一个更好的定义。这是我想提出的一个观点:

产品

这个定义似乎更合适,因为当你真正钻研细节时,产品被定义为不同于其他产品。我们把所有的鞋码放在一个产品中,因为它们彼此之间的相似程度远远超过了它们与沃尔玛产品数据库中其他产品的相似程度。他们只是觉得喜欢单一产品的版本,而不是不同的产品,因为实际上是其他产品的东西是非常不同的。

这里有一个直观的例子。当你看到这些产品时,它们之间的距离大致代表了它们的差异,你在哪里画出产品的界限?

Shoes products circles example

Photos by JACK REDGATE, Jill Wellington, and EVG Kowalievska

很明显,你会把它们画在这里:

Shoes products circles example with line separating them

Photos by JACK REDGATE, Jill Wellington, and EVG Kowalievska

这与搜索有很大的关联,我们在 Algolia 是这方面的专家。当开发这些产品的搜索体验时,每家公司都必须问一些关于这些边界会是什么样子的问题——例如,我们的客户会搜索什么属性?我们输入到 Algolia 的可搜索产品需要是独立的,所以如果人们要在搜索查询中包括他们的鞋号,那么至少在这种情况下,我们需要将所有这些鞋号作为单独的产品对待。

在搜索领域,根据业务需求,单个产品版本之间的一些差异变得更加相关。那些簇不再像我以前画的那样整洁了。我们的视觉空间可以看起来更像这样:

Shoes products circles example sizes as new products

Photos by JACK REDGATE, Jill Wellington, and EVG Kowalievska

现在你在哪里划线?

为手机设计

让我们想象一个完全假设的公司(姑且称之为 Orange)生产智能手机(姑且称之为 jPhones)。jPhones 有许多不同的版本:

  • Orange 生产 jPhones 已经有一段时间了,所以我们现在是第 13 版。他们仍然出售最近的几个版本。
  • 你可以买到不同的颜色,不同的价格。有些手机比其他手机更有价值,因为它们的颜色更稀有。
  • jPhones 也有普通尺寸和加大尺寸,除此之外没有其他区别。
  • 你还可以在 128、256 和 512 GB 之间选择手机的存储空间。

Orange 在使他们的产品数据库健壮方面投入了很多努力,但是在搜索方面,他们没有给我们太多的工作,正如我们前面讨论的那样,搜索有一套不同的要求。现在,他们让你和我为 jPhones 建立一个搜索索引,将这些选项考虑在内。他们给了我们这个初始 JSON 来修改:

[
	{
		"title": "jPhone",
		"editions": [
			"13",
			"12",
			"11"
		],
		"color": [
			"Aluminum",
			"Sparkly Green",
			"Maroon",
			"Moonlight",
			"Blackout",
			"Deep Sea Blue"
		],
		"sizes": [
			"Regular",
			"XL"
		],
		"storageSpace": [
			"128GB",
			"256GB",
			"512GB"
		]
	}
] 

让我们从一个接一个地检查每个选项开始,看看它们如何影响什么最终成为产品属性,什么最终值得成为它自己的产品。

版本

当人们搜索 jPhones 时,他们可能会在搜索中包括该版本。例如,他们知道只要搜索jphone就会得到非常广泛的结果,所以他们会搜索jphone 13

这对我们的搜索索引有什么影响?嗯,用户不太可能会搜索比他们期望的产品清单更具体的东西。换句话说,通过搜索jphone 13,他们期望得到一个 jPhone 13 的结果,而不是一个允许他们以后选择 13 的普通 jPhone 结果。因此,在我们的搜索索引中,我们需要将版本分成不同的可搜索产品。现在我们搜索索引的 JSON 看起来像这样:

[
	{
		"title": "jPhone 13",
		"color": [
			"Aluminum",
			"Sparkly Green",
			"Maroon",
			"Moonlight",
			"Blackout",
			"Deep Sea Blue"
		],
		"sizes": [
			"Regular",
			"XL"
		],
		"storageSpace": [
			"128GB",
			"256GB",
			"512GB"
		]
	},
	{
		"title": "jPhone 13",
		"color": [
			"Aluminum",
			"Sparkly Green",
			"Maroon",
			"Moonlight",
			"Blackout",
			"Deep Sea Blue"
		],
		"sizes": [
			"Regular",
			"XL"
		],
		"storageSpace": [
			"128GB",
			"256GB",
			"512GB"
		]
	},
	{
		"title": "jPhone 12",
		"color": [
			"Aluminum",
			"Sparkly Green",
			"Maroon",
			"Moonlight",
			"Blackout",
			"Deep Sea Blue"
		],
		"sizes": [
			"Regular",
			"XL"
		],
		"storageSpace": [
			"128GB",
			"256GB",
			"512GB"
		]
	},
	{
		"title": "jPhone 11",
		"color": [
			"Aluminum",
			"Sparkly Green",
			"Maroon",
			"Moonlight",
			"Blackout",
			"Deep Sea Blue"
		],
		"sizes": [
			"Regular",
			"XL"
		],
		"storageSpace": [
			"128GB",
			"256GB",
			"512GB"
		]
	}
] 

颜色

到颜色上!这是一个棘手的问题。穿靴子的同事和我谈了一会儿,他对此持观望态度。你觉得应该是什么?每种颜色应该是一个单独的产品,还是应该是一个产品的选项?也许在继续之前,停下来思考一下这两种选择的后果是一个很好的练习。

有你的选择吗?让这变得棘手的是,你可以为任何一方提出论据。一方面,颜色并不是非常重要,它们不会对生产或订单执行过程产生太大的影响。可以说它们只是稍微改变价格的表面变化。另一方面,由于稀有性,客户群对一些颜色的整体评价高于其他颜色,偏好可能会导致一些潜在客户专门搜索sparkly green jphone 13,而不是更通用的选项。

后一种说法似乎更有说服力,不是吗?通常,搜索结果中的最佳实践是尽可能具体到您期望的合理的具体消费者,在这种情况下,Orange 可能会期望大量消费者专门搜索他们最喜欢的颜色,或者社区认为更有价值的颜色。也许你会想起一个现实生活中的公司,听起来有点像 Orange(尽管我们的意图是创建一个完全虚构的例子),它没有实现这个特别的建议。作为该领域领先的搜索专家,我们 Algolia 谦卑地提出,该特定公司应该 A/B 测试他们的搜索索引版本,将不同的颜色分成不同的产品,看看会发生什么!如果你在看和读,我们愿意打赌——你知道你是谁。

在拆分颜色之后,这是我们新的 JSON(缩写,因为对于文章形式来说太长了):

[
	{
		"title": "jPhone 13",
		"color": "Aluminum",
		"sizes": [
			"Regular",
			"XL"
		],
		"storageSpace": [
			"128GB",
			"256GB",
			"512GB"
		]
	},
	...
	{
		"title": "jPhone 13",
		"color": "Deep Sea Blue",
		"sizes": [
			"Regular",
			"XL"
		],
		"storageSpace": [
			"128GB",
			"256GB",
			"512GB"
		]
	},
	...
	{
		"title": "jPhone 13",
		"color": "Maroon",
		"sizes": [
			"Regular",
			"XL"
		],
		"storageSpace": [
			"128GB",
			"256GB",
			"512GB"
		]
	},
	...
	{
		"title": "jPhone 12",
		"color": "Moonlight",
		"sizes": [
			"Regular",
			"XL"
		],
		"storageSpace": [
			"128GB",
			"256GB",
			"512GB"
		]
	}
] 

尺寸

在我们的虚构世界中,除了物理尺寸,普通手机和 XL 手机之间没有其他区别,我们可以想象,由于生产过程几乎相同,除了更大的外壳,价格也是如此。在这种情况下,你觉得在搜索的时候,手机的大小是否足以成为一个重要因素,以保证为不同大小的手机创建单独的搜索记录?

有趣的是,我们可以像讨论颜色一样讨论尺寸。一方面,尺寸并不十分重要,它们不会对生产或订单执行流程产生太大影响。可以说它们只是表面上的改变,只不过这次它们没有修改价格。另一方面,如果 XL 选项对他们特别重要,客户群可能会专门搜索它(对一些人来说是这样,比如关节炎患者或视力不好的人)。

现在哪种观点看起来更有说服力?是不是感觉更像是五五开?这里有一个有趣的例子:你能向一个明确搜索其中一个选项的客户推销吗?当我们谈论版本(如果有人搜索一部旧的 jPhone,他们可能会选择那部旧的,也许是出于经济原因)或颜色(他们想要那个sparkly green jphone 13)时,这是不太可能的。但是从尺寸来看,我们可以把 XL 卖给那些没有明确搜索 XL 的人,或者把普通尺寸的 jPhone 卖给那些搜索 XL 的人,这似乎也不是不合理的。如果我们给客户选择页面尺寸的选项,而不是为每个尺寸创建独立的可搜索页面,也许我们会有一个性能更好的产品页面。出于这个原因,我倾向于保持 JSON 的原样,将大小作为可搜索产品的一个属性。

存储空间

也许你已经注意到了,但是我们正在按照相关性递减的顺序回顾这些手机上的细节。这并不是说没有人关心存储空间,但是你真的对你的新手机的存储容量死心塌地吗?Orange 认为存储空间应该只是结账流程中的一个选项,而不是为每个存储空间选项都提供专用的可搜索页面,这不是没有道理的。

回想一下我们上一次关于不同手机尺寸的争论:我们能把一部 512 GB 的手机卖给一个明确搜索 256 GB 的人吗?绝对的!这种情况经常发生,尤其是如果价格差异很小的话。即使这不是一个小的价格差异,如果我们把这些选项放在一起,即使有人专门搜索特定的价值,我们也可能会增加销售。事实证明,在这种情况下,在搜索排名中保留一个不太严格相关,但更具商业意义的结果是有好处的。

那么是什么造就了一个产品呢?

最后,就搜索而言,你的产品应该在不影响商业目标的前提下尽可能的具体和细分。我们的逻辑推理对上面假设的智能手机的四个属性给出了肯定是、可能是、可能不是和肯定不是的答案,但这些答案绝对不是通用的——像 Orange 这样的技术公司将会有非常不同的商业目标要记住,比如说,与制造汽车工具的公司相比,后者的搜索查询通常更加具体。

如果您想看到我们与汽车工具公司(姑且称之为 Clip-On)一起走过同样的过程,并证明这个框架成立,请查看本系列的第二部分

在那之前,

安托万和阿尔戈利亚船员

设计搜索体验——第 2 部分:Clip-On 及其工具

原文:https://www.algolia.com/blog/engineering/designing-a-search-experience-part-2-clip-on-an-automotive-tools-company-with-an-extensive-catalog/

在这个系列的第一部分中,我们分析了一个名为 Orange 的完全虚构的智能手机制造商如何将他们的 jPhones 组织成一个有凝聚力的搜索索引。让我们看看如何将同样的逻辑应用于不同的行业——这里我们写的是一个虚构的汽车工具经销商,我们称之为 Clip-On。您将看到这种方法如何考虑业务需求,并在这个过程中创建最佳的搜索体验。

概括一下,什么是产品?上次我们在这个问题上花了不少时间。这有点难以准确回答,但我们得出的结论是,产品是一个项目、服务或一类项目或服务,区别于其他产品(其他项目、服务或类别……)。还记得第一部分的这张图片吗?

Shoes products circles example with line separating them

Photos by JACK REDGATE, Jill Wellington, and EVG Kowalievska

我们在它们所在的地方画了边界,因为感觉它们应该在那里自然分开。这家公司销售的商品(在这种情况下,不同类型的靴子)自然会被归入某些可定义的类别。

然而,这些定义并不通用!我们在智能手机上测试了这一点,结果表明,手机的颜色对最终搜索索引的影响与它是哪一年的版本一样。这可能感觉有点违反直觉,所以绝对查看那篇文章以获得完整的推理。简而言之,在搜索索引的背景下,每个产品都是可搜索的。这应该是不言自明的,但它有一个奇怪的副作用,如果一些客户可能会专门搜索蓝色 jPhone,蓝色 jPhone 需要成为自己的可搜索产品,以便这些客户找到他们正在寻找的东西。换句话说,色差将 jPhone 分割成单独的产品,就像 jPhone 11 和 jPhone 13 Pro 是不同的产品一样。与此同时,可以说手机尺寸或存储空间等更重要的差异只是作为结账流程中的选项,而不是拥有自己的可搜索产品——毕竟,不太可能有人会专门搜索256GB jPhone

这对我们的新案例研究参与者 Clip-On 来说会是什么样的呢?马上,我可以看到两个主要的新因素:

  1. 当搜索工具时,查询变得更加具体。用户不只是搜索wrench。他们搜寻1/4in 12 point steel usa wrench。突然间,我们的搜索索引中必须包含更多的东西,这样潜在客户才能准确找到他们想要的东西。
  2. 此外,产品目录也更加多样化。我们不只是销售一堆可以用大致相同的方式描述的智能手机。现在我们销售扳手和锤子、钻头和螺丝刀、凿子和钳子、钢丝钳和研磨机、棘轮和抛光机等等。我们必须对搜索索引中实际包含的内容进行更多的思考,因为整个“索引”部分(Algolia 缓存您的产品数据库以进行近乎即时的实时查找)要求每个产品的属性一致。

因此,让我们挑选两种产品——比方说一把扳手和一对剥线钳——并在考虑这些新因素的情况下思考搜索索引的创建过程。

工具设计——扳手和剥线钳

我们如何制作这样一个扳手的模型?

10 mm 12-Point Metric Combo Wrench

Photo by Pixabay

第一个也可能是最有价值的测量是头部尺寸(这决定了扳手可以转动多大的螺母)。我们还应该存储手柄的长度,或者整个扳手的长度。制造扳手的材料也很重要,因为有时扳手是由普通钢制成的,有时是由更坚固的合金制成的。客户可能还想知道工具是哪家公司制造的(因为我们只是转售它)以及它是在哪个国家制造的。由于我们将得到的搜索查询的特殊性,我们可以假设所有这些属性都是可搜索的。

接下来,我们如何为这些剥线钳建模?

Wire Stripper and Cutter tool against yellow background

Photo by Mika Baumeister

这个工具不仅仅是剥去电线,但是为了演示的目的,我们只是保持模型简单。我们可以存储工具的物理尺寸,但是这些数字的效用相当有限,尤其是在搜索的环境中。谁会专门去寻找正好 9.72 英寸长的剥线钳呢?相反,就像我们对扳手所做的那样,让我们来分析哪些测量实际上是有用的。在这种情况下,工具中心下方最初几个圆孔的尺寸决定了工具可以有效剥离的焊线直径范围。从开发者的角度来看,这似乎是一件奇怪的重要事情,但这就是为什么我们不孤立地研究搜索。

但至于其他属性——它们不是和扳手上的一样吗?实际上,每个工具都将共享一些属性,如materialmanufacturercountryOfOrigin。这些属性可以出现在搜索索引中的每个产品上。所以我们已经知道如何处理这些:只需将它们放在产品 JSON 中,就像我们对 jPhones 上的color所做的那样。

但是我们将如何处理不同产品之间变化的属性呢?这一部分相当棘手,但重要的是要记住我们在这里的范围相当狭窄。我们假设您有一个产品数据库,它实际上用数据丰富了您的产品页面,因此当我们从搜索索引中取出一些内容时,我们实际上并没有丢弃这些数据—它总是可以从数据库中查询到的。我们在这里的范围仅限于搜索,所以我们可以做出一些决定,如果我们谈论的是长期数据存储,这些决定可能是不好的做法。说了这么多,再来说说序列化。

如果我们制作一个单一的、可搜索的字符串,其中包含我们特定于产品的属性,但以人类可读的方式匹配我们的用户可能合理搜索的内容,会怎么样?例如,以上面我们的扳手和剥线钳模型的 JSON 版本为例:

[
	{
		"name": "10 mm 12-Point Metric Combo Wrench",
		"manufacturer": "PeopleWhoMakeWrenches, Inc.",
		"countryOfOrigin": "USA",
		"material": "chrome"
	},
	{
		"name": "Wire Stripper and Cutter",
		"manufacturer": "BPlusTools Corp.",
		"countryOfOrigin": "USA",
		"material": "steel"
	}
] 

显然,一些信息,尤其是扳手上的信息,已经融入到名称或标题中,但是我们如何处理其他特定于产品的数据呢?

同样,如果您将这些产品存储在您的数据库中,这是一种不好的做法,但是我们只是创建一个搜索索引,所以规则会有一些变化。让我们创建一个名为specs的新属性,并给它一个产品定制规格的序列化版本。

[
	{
		"name": "10 mm 12-Point Metric Combo Wrench",
		"manufacturer": "PeopleWhoMakeWrenches, Inc.",
		"countryOfOrigin": "USA",
		"material": "chrome",
		"specs": "10mm head size, 9in handle length"
	},
	{
		"name": "Wire Stripper and Cutter",
		"manufacturer": "BPlusTools Corp.",
		"countryOfOrigin": "USA",
		"material": "steel",
		"specs": "Can cut 10 gauge, 12 gauge, 14 gauge, 16 gauge, 18 gauge, 20 gauge, and 22 gauge wire"
	}
] 

有必要更具体地强调可能的搜索关键词以及它们可能自然组合在一起的方式。比如很多人会搜索10mm不带空格,有的人可能会搜索10 mm带空格。在扳手的名称中以某种方式使用它,在specs属性中以另一种方式使用它,将确保我们匹配两种情况,尽管 Algolia 足够聪明,即使我们不采取这一步骤,也能让我们接近预期的行为。对于剥线器重复多次的gauge也是如此。如果有人搜索工具的特定规格或规格范围,我们最有可能以这种方式匹配他们的搜索。

注意:这可能看起来很奇怪,但是我们从来没有向用户展示过这个字符串!有时我们会先入为主地认为我们搜索的所有东西都是可显示的信息,但这不一定是真的!我们的搜索索引可以(也应该)在很大程度上为将对我们的搜索结果进行排名的人工智能量身定制。我们在这里追求功能性——如果有必要,我们实际向用户展示的内容可以从我们的产品数据库中提取。

结论

那么我们在这个系列中学到了什么呢(如果你还没有看完第一部分,一定要看完?最重要的是,你的搜索索引和它包含的产品不应该像数据库中的产品一样被对待。我们在这里列出的方法是分析可能的搜索查询,并将这些知识分解为如何将可搜索的产品彼此分开,为用户创造最流畅的搜索体验,并使开发人员的生活变得更加轻松。我敢肯定,即使你不在 Orange 或 Clip-On 工作,你也能明白这一点如何以及为什么适用于你:从你的公司买东西的欲望和结账按钮之间的摩擦越少,你的公司赚的钱就越多。听起来现在是开始使用 Algolia 的时候了,对吗?

嘿,既然仔细考虑你的搜索索引的构建意味着收入的增加,也许你有理由要求你的上级在发薪日奖励你一点……如果没有,也许你会考虑加入我在 Algolia 的工作?保重,感谢阅读!

数字专家系列 Harry Rosen 的有效数字转型

原文:https://www.algolia.com/blog/ecommerce/digital-expert-series-harry-rosen/

发现阿哥利亚的数字专家系列

数字专家系列是由 Algolia 主办的一个 30 分钟的快速会议,让您与在全球领先企业中成功推动数字化转型战略的高绩效人士面对面交流。

3 月 16 日, 加拿大领先的奢侈品男装零售商之一 Harry Rosen 的数字产品和体验总监 Tovi Heilbronn, 与我们分享了 Harry Rosen 和 Algolia 如何携手推动公司实现有效的数字化转型。您可以在此查看本节课的 视频回放 。Harry Rosen 从业近 70 年,拥有 100 多名员工,遍布 15 个物理接触点和 3 个数字接触点。

以下是会议中讨论的主要主题的要点,随后是观众 Q & A.

  • **关于愿景—**哈里·罗森的理念是推出引领我们社区的领导者、远见者和创意者的男装。因此,我们认为自己在信心方面做得很好——也就是说,让那些努力做到最好的人(我们将帮助他们)真正做到最好。

  • **关于商业挑战—**Harry Rosen 在任何给定时间都有大约 10,000 种产品在线,分布在 50 个类别和三个不同的数字渠道中。所以我们有一个非常广泛和深入的目录。我们的产品本身往往具有很强的季节性,所以很少有产品从一个季节延续到下一个季节。此外,我们的库存水平通常较低,但速度较快。因此,作为一家企业,我们不断面临挑战,通过策展、宣传我们的品牌和产品展示来改进我们的产品发现。所有这些都需要有好的数据、好的属性和好的工具来支持。

  • **关于数字化转型的路线图—**我们的转型主要集中在四个方面:技术、人员和流程,以及我们必须与之合作的供应商。我们仍在使用非常陈旧的技术,无法满足客户的期望和不断变化的业务需求。因此,在技术方面,我们难以扩展我们的基础设施,这反过来又影响了新功能的开发,因为代码基础非常脆弱。由于这种非常僵化的技术生态系统,我们无法与外部解决方案集成。 在人员和流程方面也存在类似的挑战。我们有非常封闭的内部思维,这削弱了我们的执行能力。许多职能部门在日常工作中并没有真正思考他们的工作如何影响数字客户体验。最后,就供应商而言,我们需要在我们的成功中共同投资的供应商。因此,无论我们构建什么样的解决方案,都必须解决所有这些问题。

  • **关于数字化转型领导者必须自问的问题—**在考虑构建功能时,许多领导者只考虑到该功能是否有效?所以这是非常运营驱动的。在 Harry Rosen,我们从来没有触及这样一个领域:这能让我们的客户兴奋吗?这是显著的吗?不一样吗?因此,很明显,当我们开始这个数字化转型之旅时,我们希望追求更高水平的体验和功能,这将使我们能够跨越物理和数字渠道,打破当前的束缚,而搜索将是成功秘诀的一个非常重要的因素。

  • **评估正确的解决方案—**对于 Harry Rosen 来说,重要的是要进行重大的结构性变革,而不仅仅是迭代式变革。我们希望让企业用户真正处于主导地位,这样他们就有能力真正调整结果并进行营销,从而真正推动企业沿着数字成熟度曲线发展。此外,这需要在不经常向开发部门寻求支持的情况下完成。此外,我们需要问自己(我们提议的)解决方案是否准备好与我们的业务同步扩展。最后,透明度。我们是否有一个强大的仪表板工具,让我们能够敏捷、灵活地配置各种部件,并且理解数据告诉我们什么。因此,这不仅仅是为了拥有市场上最好的技术,Algolia 的解决方案满足了这一点,也是为了从我们客户的角度,而不仅仅是从我们的业务或技术团队的角度,强化为 Harry Rosen 提供最佳合作伙伴的理念。

  • **关于成功里程碑和未来之路—**我们看到的一些重大增长成功包括交易量增长 68%,转化率大幅提高,平均订单价值增长 18%。Algolia 的解决方案现在部署在所有三个哈里罗森数字渠道,包括旗舰店 HarryRosen.com,在线折扣/折扣选项 Final Cut 和客户应用程序人字纹。在 Algolia 的无头电子商务解决方案的帮助下,Harry Rosen 希望扩展的未来领域包括:改善客户的全渠道购买体验,提高个性化程度,在技术堆栈中实现更紧密的集成,以及部署语音搜索。

错过了这个环节?查看Tovi 真知灼见的完整视频回放 随观众 Q & A 或观看往期 Algolia 的数字专家系列

Otrium 如何与 Algolia 合作优化客户体验

原文:https://www.algolia.com/blog/ecommerce/digital-expert-series-otrium/

发现阿哥利亚的数字专家系列

Otrium 集团产品经理 Maartje Spooren 向我们讲述了该公司如何利用 Algolia 转变其在线搜索和发现体验,并帮助顾客找到他们想要的衣服。

otri um 拥有 300 万注册会员和来自 10 个领域 300 多个品牌的产品,自 2015 年以来一直是电子商务的领导者,最近又将其欧洲业务扩展到全球市场。

观看完整的网上研讨会,并在此 处提问&或继续阅读精彩内容。

https://blog-api.algolia.com/wp-content/uploads/2022/07/otrium-algolia-webinar-video-screenshot-1.png

  • **论愿景——**Maartje 分享道,Otrium 的驾驶理念一直是所有服装都要穿。我们的创始人希望确保时装不会作为滞销品留在仓库里。为了继续服务于这一目标,我们的重点是改善顾客的体验,以便他们能够找到他们正在寻找的时尚。我们希望在所有接触点提供绝对最佳的购物体验。

  • **关于商业挑战—**我们每周都会推出新的品牌和款式。这对我们的组织和购物者的导航都是一个挑战。最重要的是,我们正在快速发展,并向新市场扩张。我们有 10 个不同的领域,加上网络和移动应用,每个领域都有自己的战略。此外,我们以多种语言运营。我们现有的平台要求我们的开发人员做太多的手工工作,并阻止其他利益相关者做出改变。最糟糕的是,我们正在与搜索相关性作斗争。搜索“红色连衣裙”并不只是找到红色的连衣裙,而是找到了其他红色的衣服和其他颜色的连衣裙!总的来说,我们需要一个以更智能、更直观的方式为客户服务的平台。我们需要一些不同的团队可以轻松适应新产品和新活动的东西,并与我们一起成长。

  • **关于数字化转型路线图—**与 Algolia 合作让我们专注于一些特定需求。我们自己的 Otrium 产品排名逻辑相当复杂,对我们来说很有价值,所以我们希望保留它,并将其与 Algolia 的动态产品重新排名结合起来,以获得最佳性能。来自 Algolia 的更好的相关性使我们有能力和灵活性来推动特定品牌或类别的销售,并考虑其他数据点,如库存可用性、新鲜度和季节性。Algolia 允许我们实现其他搜索功能,而不必自己构建,包括自动完成、允许输入错误,甚至同义词支持。在后端,Algolia 仪表盘非常直观,我们的销售团队、品牌经理和营销团队可以根据市场、季节和品牌需求轻松调整它们。

  • **关于数字化转型领导者必须扪心自问的问题—**事先与所有利益相关方讨论,找出搜索工具、产品排名、产品列表页面或个性化功能可能缺少的特性或优势,这一点很重要。我们与所有利益相关方举行了头脑风暴会议,以获取信息,分享想法,并找出我们现在和未来需要什么。除了与自己的团队合作,还有更多值得赢得的东西,所以要弄清楚除了严格满足你的基本要求之外,供应商还能提供什么。对我们来说,Algolia 高效地满足了我们所有的需求,并提供了必要的发展灵活性。除了提高性能,我们知道我们可以依靠 Algolia 提供事后服务和支持。这是一家已经证明了自己的公司。

  • **评估正确的解决方案—**沟通和信任非常重要。我们真的很感谢 Algolia 围绕即插即用解决方案的可能性提出的完全透明和现实的目标。Algolia 提供了现实的时间表、现实的规划和实施支持。毫无意外——Algolia 分阶段处理了我们所有的复杂性,并快速交付了我们需要的实现。我们在仅两个月就上线了第一批搜索改进,包括所有产品属性、品牌数据、类别数据、搜索功能的全面整合,以及搜索覆盖的重新设计。

  • **关于成功的里程碑和未来的道路—**我们看到更少的搜索的转化率增加了——证明我们的搜索相关性显著提高了。我们的错别字容忍度很好,我们能够为不同拼写和语言的顾客提供服务。我们还能够通过推荐替代品牌来吸引那些搜索我们还没有的品牌的购物者。搜索在更多的会话中被使用,这些购物者保持参与。我们的企业用户也从中受益,他们利用数据获得见解,并将这些见解应用于搜索查询。我们的下一步是增强个性化。我们已经有了自己建立的个性化商店,但我们将创建一个由 Algolia 支持的个性化策略,并在我们所有的网站上保持一致。

您是否错过了本次会议?查看Maartje 演讲的完整视频回放,有幻灯片和观众 Q & A,这里 ,或者观看 Algolia 的数字专家系列中的前几期。

模糊搜索不仅仅是纠正打字错误

原文:https://www.algolia.com/blog/engineering/discover-what-fuzzy-search-is-with-fuzzy-matching/

术语 模糊搜索 有几个意思,都开启了 近似匹配 的思路。对该术语最常见的理解涉及 模糊字符串匹配 ,其中搜索引擎匹配与 不匹配的单词,确切地说是 。典型的例子是拼写错误,拼写错误的查询会出现拼写正确的结果。但是,除了纠正错别字之外,还有更多模糊性 ,你将会看到。例如,它还可以纠正表述不当的查询,识别口语词汇,扩展前缀,或者在查询和被搜索的内容之间建立松散的类别关系。

本文中描述的模糊匹配使搜索引擎能够应用一些(稍微)不精确的匹配技术来确保它返回所有相关结果。从这个意义上说,关联不是一门精确的科学。

搜索相关性,一般来说

搜索的起点是 文本匹配 ,将查询的 精确的 字符、字母、单词匹配到数据集中的记录。假设你搜索一艘“船”,搜索引擎会返回所有包含“船”这个词的记录。不是“独木舟”或“游船”。

文本匹配大有帮助。有了好的数据,查询“boat”将返回每个相关的记录,只要它包含单词“boat”,例如,在标题、描述和类别中。通过更智能的数据,当你搜索一艘“船”时,搜索引擎可以返回任何漂浮的东西,以及划船课程或邮轮假期。

但是,如果单词“boat”没有出现在记录中,即使数据包含与 boat 相关的信息,该怎么办呢?这就是同义词出现的地方。但如果有人想找到“独木舟”并合理地拼写成“卡努”呢?如果不允许输入错误,搜索引擎将不会返回任何结果。

模糊匹配是为了增强相关性,使相关性和整体搜索体验更加直观。当做得好的时候,模糊匹配无缝地集成了项,而 没有 项,这样做将会严重丧失机会。像做拼图一样,模糊搜索收集 相似的 棋子,帮助你定位 确切的 棋子。此外,因为人们在搜索 时 定义了 他们需要什么 ,模糊搜索基于相似性调出 选项 ,就像在点最好的饭菜之前先尝一尝。

Algolia(允许输入错误的模糊搜索)、Elastic(模糊搜索)、Coveo(模糊搜索)和 Constructor.io(模糊搜索规则)等搜索工具提供模糊匹配。他们都以不同的方式处理这个问题。我们将讨论 Algolia 的各种技术。

模糊搜索的定义&模糊匹配

什么是模糊 搜索

近似的 字符串匹配与 精确的 字符串匹配相对。模糊搜索匹配两个或更多的词,即使有错别字或拼写错误。模糊搜索解决了笨拙的手指、赶时间和粗心的打字者、移动用户以及世界上每种语言的拼写的复杂性。模糊搜索还可以在匹配用户生成的数据中发挥作用,这通常是不可靠的,因为用户会对相同的单词拼写错误并使用替代或本地化的拼写。这也可以包括基于 音标和 音的匹配。

其他词进行模糊搜索: 模糊或近似字符串匹配

例子:

  • 输入" helo ",查找带有" hello "的记录
  • 输入“帮助”,查找有帮助和你好的记录

参见下面的更多例子&如何做到这一点。

什么是模糊 匹配

扩展了搜索的模糊性,包括根据 相似性 查找信息。模糊匹配是一个宽泛的术语,所以我们将只谈论基于语言的相似性,如同义词、语法(复数)、动词变化、名词词尾等。)、基于字典的技术以及其他启发式或 NLP 方法。下面,我们还将包括搜索引擎通常使用的相似性,如部分单词、短语或查询匹配,以及过滤器的使用。

举例:

  • 键入“裤子”,找到裤子、长裤、休闲裤( 同义词 )
  • 键入“be”,查找甲壳虫、、前缀搜索、 )

查看更多示例&这是如何做到的,如下。

“模糊”的其他用法

  • 模糊集 根据 共有特征对词语(和物体)进行分组。 例如,一个美式足球、橄榄球和一个鸡蛋的形状使这些物品或多或少有些相似(长方形),但足球和橄榄球更接近,因为它们也具有弹跳和运动的特性(尽管有勺子里的鸡蛋游戏)。
  • 模糊逻辑 基于 相对接近度 构建逻辑关系,而不是像真和假这样的二进制关系(两个对象匹配的基础是两者都“高”,而不是具有完全相同的高度)。

注意,我们将排除任何基于语义、机器学习或统计技术(如 TF-IDF)的模糊匹配。

使用错别字公差进行模糊搜索

错别字容忍 允许用户在打字时出错,但仍能找到他们要找的记录。这是通过匹配拼写相近的单词来完成的。

到底什么是错别字?

  • 一个单词中少了一个字母,“strm”→“storm”
  • 一封无关的信,“stoorm”→“storm”
  • 倒字母:“风暴”→“风暴”
  • 替换字母:“storl”→“storm”

拼写距离(damer au–Levenshtein 距离)算法

Algolia 的错别字容差算法基于距离,遵循damer au–Levenshtein 距离算法。距离是指键入的单词与其在索引中的精确匹配之间的拼写差异。距离有一个精确的含义:它是将一个单词转换成另一个单词所需的最少操作次数(字符添加、删除、替换或换位)。完美匹配是距离= 0。当存在完全匹配,或者距离很小(一个或两个字母输入错误)时,则进行匹配并将记录添加到结果中。

例如,如果引擎收到类似“strm”的单词,这可能意味着“storm”或“strum”(距离= 1 /一个字母不正确),或者“star”或“warm”(距离= 2 /两个字母不正确)。

距离建立了一个耐受阈值。阈值为 2:当一个单词有 3 个或更多的错误时,它是“不可容忍的”(不包括在结果中)。

更多基于错别字容忍度的模糊搜索示例

下面是几个例子,说明 Algolia 如何计算转换一个单词所需的操作,以找到带有“Michael”的记录:

| 迈克尔 | 0 个错别字 |
| 米凯尔 | 1 个错别字(替换:h → k) |
| 米凯尔 | 1 个错别字(删除:h) |
| 米克海尔 | 1 个错别字(加法:k) |
| 迈克尔 | 1 个错别字(换位:一个⇄ e) |
| 米克尔 | 2 个错别字(替换:h → k,添加:l) |
| 提查尔 | 2 个错别字(替换:m → T,第一个字母) |
| tickael | 3 个错别字(替换:m → T,首字母,替换 h → k) |

排名和错别字公差

就相关性而言:所有基于拼写差异的模糊匹配都被认为不如精确匹配相关。因此,距离为 0 的记录(即完全匹配的记录)的排名(排序)高于有拼写错误的记录。同样,有 1 个错别字的记录比有 2 个错别字的记录排名更高。

用同义词进行模糊匹配

模糊匹配应该使用户能够边说边写,并允许他们使用自己的词汇。实现这一点的一种方法是使用同义词。

同义词 告诉引擎哪些单词和表达式被认为是相等的——例如,pants =长裤。因此,搜索“裤子”将返回“裤子” “裤子”,搜索“裤子”也将返回“裤子”和“裤子”。

同义词可以是字典驱动的。你可以使用同义词词典。然而,基于词库的搜索算法是不可用的,因为它会返回太多相似的结果。每个单词在同义词库中都有多个同义词,这对于作者很有用,但对于查询一组非常特定的数据却不太有用。例如,“slacks”可能有几个意思(懒惰、散漫、不活跃),每一个都有几个同义词。但是在一家服装店的索引中,与“休闲裤”相关的同义词只有“裤子”和“长裤”。

最后,搜索引擎可以使用机器学习来检测一段时间内常见的同义词,从而建立起一个相关同义词 的动态列表

其他用于模糊匹配的方法

部分词匹配带前缀搜索

前缀匹配 是 Algolia 的 as-you-type 搜索体验的核心。它使引擎能够基于部分单词开始匹配记录。

例如,只要用户键入“a”、“ap”、“apr”,就会返回包含“杏子”的记录。在显示结果之前,引擎不需要等待全词匹配。

通过在单词中间搜索进行灵活的字符串匹配("包含")

可以设置一个查询,根据记录属性的 字位 对记录进行匹配和排序。换句话说,匹配可以从属性的中间开始。

  • 查询“ 徒步 ”匹配记录:“用于 徒步 和旅游的背包”。

部分短语搭配可选词

通常,为了使记录匹配,它必须匹配查询中的所有单词。通过创建一个 可选单词 的列表,可以匹配只匹配部分单词的记录。

  • 查询“ 背包徒步 ”匹配只卖背包的商店中的记录。商店可能想从查询中删除单词“backpacks ”(因此,使其成为可选单词),因为他们不会在产品名称中使用“backpack ”,但如果有人碰巧在查询中包含它,他们也不想错过好结果。

如果没有结果就把话去掉

如果完整的短语没有返回结果,搜索引擎可以启动 移除单词

  • 查询“ 徒步背包重衣 ”,没有记录匹配(字数太多),所以引擎去掉“重衣”,找到徒步用的背包。

基于鲁棒滤波的模糊分组&刻面

过滤 是所有搜索引擎的基础,也是过滤的前端面。向数据中添加特征(如品牌、流派)对于任何搜索、浏览和发现体验都至关重要。基于上述模糊分组,使用用户生成的类别和您自己对数据的充分理解来标记记录会创建更丰富的结果组合。

此外,“与”和“或”的过滤语法扩展了内容的分组,允许引擎组合具有多个相似性和差异性的记录。

可选滤镜&滤镜打分

可选筛选 的行为类似于普通筛选,这意味着它返回与查询和筛选都匹配的记录。但是,它也会返回与筛选器不匹配的记录。这种影响体现在排序上:匹配过滤器的记录比不匹配过滤器的记录排序更高。如果使用负筛选,则与筛选匹配的项目的排名低于其他记录。

F 过滤评分 允许您引入更多记录,但控制排名,使模糊匹配的排名低于精确匹配。

如此..你如何控制所有这些模糊的搜索和匹配

添加模糊逻辑虽然强大,但也有一些风险。它可能会返回 太多的结果 供用户筛选,或者它可能会返回 意外的结果 可能会破坏用户心目中结果的相关性。

限制信息膨胀的影响是搜索引擎的工作。例如,通过给予精确匹配更高的优先级,确保精确匹配显示在结果的顶部,在模糊匹配之上:

  • 在拼写错误的情况下,精确匹配被认为比不精确匹配更相关(即使对用户来说拼写错误很明显)。
  • 对于同义词,精确匹配比同义词匹配更相关(即使查询中的单词有多种含义,同义词将是更好的选择)。

本质上,引擎通过在精确匹配后显示模糊匹配来对冲模糊算法的赌注。

也有许多 UI 模式来管理这一点。例如,谷歌和其他搜索引擎会在搜索栏下方添加“建议拼写”。或者他们提供了一个 自动完成查询-建议 功能,当用户键入时,他们可以从下拉列表中选择建议的查询(和类别)。

但正确的解决方案是表面之下的解决方案,对用户完全透明,搜索引擎返回的结果让用户产生一种直观的感觉,即显示的项目是最好和最相关的结果——即使不完全匹配查询的文本。

通过更好的移动体验提高忠诚度

原文:https://www.algolia.com/blog/ux/drive-loyalty-better-mobile-experiences/

如今,消费者在寻找信息、媒体内容和产品时,希望获得即时、顺畅的谷歌和亚马逊式体验。他们需要直观的体验,无论数字界面如何,都能提供他们想要的东西,而且他们现在就想要。这些都是“现在的时刻”。今天,这是决定客户是否参与、订阅或购买某个企业的因素。出色的移动体验是你提高忠诚度的方式。

multichannel experiences

今年 7 月,我们发布了 Algolia Summer '19,支持各种规模的企业通过任何渠道(包括移动设备)提供快速、定制和个性化的体验。

今天,随着我们最新移动用户界面库的正式发布,我们希望加倍强调在您的移动应用中获得出色体验的重要性。

消费者关注的都是应用

手机正在吞噬世界已经不是什么新闻了。由于我们的智能手机已经成为精彩的技术,消费者能够在旅途中完成日常任务,从通信到查看新闻到银行业务,到观看他们最喜欢的节目到购物。

然而,一个细微的差别很少被打破——移动网络与移动应用。正如我们将在下面讨论的那样,实际上这是没有争议的——公司应该在这两方面都进行投资。但是,强调移动应用在消费者的旅程中变得多么重要是很重要的。

统计显示,85%的消费者更喜欢手机应用程序而不是手机网站。此外,移动应用的转化率为 21%,而移动网站的转化率为 6%。专注于电子商务,我们看到移动应用程序用户比网站用户多花20 倍的时间购物。

这一切都来自于哪些受众正在使用特定的移动应用程序,以及移动应用程序允许企业向其用户提供什么样的体验。

手机应用是忠诚度的关键

customer loyalty

您的每一项数字资产都在您的用户旅程中扮演着至关重要的角色,在设计每一项资产的用户体验时,都应该考虑到它在这一旅程中的角色。

通常你的桌面和移动网站是你获取新用户的地方,这要归功于精心策划的付费获取活动、SEO 策略等。这些用户将在这里发现你的产品、服务、视频、播客等。为了与你的用户建立第一次有意义的联系,这些属性的体验应该为转换而优化。

如果这种用户体验很吸引人,很有可能你的用户会希望更多地参与到你的公司中来。这就是最先进的移动应用程序至关重要的地方:

  • **直接访问您的内容:**当您的用户将寻找您的特定内容时,为他们提供一个移动应用程序可以让他们直接沉浸在您提供的内容中,只需在主屏幕上点击一下。他们不必打开他们的移动网络浏览器,记住你的网址并输入它,或者搜索你的品牌,冒着被竞争对手的广告打败的风险。

  • **更多身临其境的体验:**移动应用让您有机会创建更流畅的流程,使用创新设计,提供新型交互,如语音搜索,并允许您的用户立即从一种内容类型切换到另一种内容类型。他们给你的选择在网络上即使不是不可能,也是极其困难的。

  • **高级个性化:**移动应用程序用户很可能会在他们的应用程序中保持登录,并允许使用地理位置。它允许企业为他们的移动应用程序用户提供深度个性化、无摩擦的体验,这将使他们更加投入。此外,本地搜索的增长速度比整体移动搜索快 50%,这将带来更多的相关性和转化率。

  • **通知:**通过移动应用程序,用户可以决定通过通知来了解你的最新交易、突发新闻、他们最喜欢的剧集的新一季。这是一个保持用户参与的无与伦比的渠道。

世界领先品牌已经利用这些优势来吸引用户使用他们的移动应用,并建立品牌忠诚度。例如,Macy's 通过提供应用程序专属优惠、提前使用以及增强的店内体验,使他们的应用程序成为购物者的必备品。

为了更好地实现移动应用的承诺,你需要确定应用程序的所有关键组件。

借助出色的应用内搜索和发现功能,留住并取悦您的移动应用用户

正如我们所见,一旦用户对你的应用程序感到满意,他们就会高度关注你的品牌。但是让某人安装你的应用程序远不是一件容易的事情——它需要比仅仅点击一个链接更多的努力。所以你很可能会花费大量的资源来吸引你的受众使用你的移动应用。

如果手机应用程序的体验很差,用户会简单地卸载它,让他们重新安装你的应用程序比让他们再次登陆你的网站更困难。这当然意味着错失机会,以及更高的客户获取成本!

正如我们在介绍中提到的,消费者习惯并期待即时、无摩擦的体验,尤其是在搜索和发现方面。在移动应用上也是如此。当他们失望时,他们会毫不犹豫地表达他们的沮丧。

近卫军

这是最差的 app。没有 WiFi 它无法工作,每当我搜索任何东西时,它只是冻结或告诉我“出了问题”,☹️,如果这些问题能够得到解决就太好了。尽管有更新,但它们已经持续了很长时间。

1/5–3 个月前的评级”

可怕的用户界面!

UFC 应用程序迫使我加入 ESPN+来查看最新内容&这个应用程序使我无法搜索、导航和访问我付费的内容。请寻找新的第三方应用程序开发者。如果没有,我就不再试图跟随终极格斗锦标赛了!

评级 1/5–1 个月前”

好消息是,用户也认可很棒的体验,并会同样对此直言不讳。

优秀的 App!

Macy's 确实做了出色的工作,不仅改进了这个应用程序,使其更加可导航、高效和用户友好,而且在试图找到特定产品时,还创建了一个更加无缝的搜索结果流程。手放下伟大的应用程序!

评分 5/5–1 个月前”

重大新闻资源

一段时间以来,我开始相信 CNET 会给我带来科技新闻。应用程序有一个伟大的格式和搜索过去的文章功能。对我在 CNET 的经历非常满意。

评分 5/5–4 个月前”

但是构建那些优秀的移动应用程序体验是困难的。那么,如何超越用户的期望呢?

介绍 Algolia 的新即时搜索移动用户界面库

几年前,我们推出了突破性的 UI 组件库,允许公司将 Algolia 的高级搜索和发现功能集成到他们的移动应用程序中。虽然这是朝着正确方向迈出的伟大的第一步,但这些库不够灵活,无法适应每种用例,也无法完美地适应所有应用程序界面的外观。

正如我们上面提到的,为了最大限度地发挥它们的潜力,移动应用程序应该是完美的,并提供卓越的用户体验。

这就是为什么我们今天宣布我们的 InstantSearch Android & iOS 库的全新版本,它克服了以前版本的局限性。

这个版本提供了许多新的小部件,允许您完全定制 UI,并且更容易集成到您的项目中。

默认情况下,我们为您提供各种组件,同时由于其分离的架构,您可以保持对库的完全控制。

InstantSearch 的这个新版本专注于解决搜索的业务挑战:

  • 过滤器管理和网络资源优化
  • 自动更新用户界面
  • 接口业务逻辑的处理

这使你可以专注于你的应用程序的外观和感觉,以获得让你的用户满意的用户体验,因为 InstantSearch 会处理繁琐的任务和任何特定于 Algolia 的事情。

mobile experiences

由于这种新的架构,您可以大大减少创建搜索界面所需的代码量。要了解更多关于我们新的即时搜索库的技术能力,请访问我们的 widget showcase

卓越的用户体验随时随地满足用户需求

现在,您应该能够构建一流的移动应用程序,让您的用户感到愉悦,并提高他们对您品牌的忠诚度。但是,移动应用程序只是旅程的一部分。如果你想在竞争中保持领先,你别无选择,只能为每个频道精心设计无摩擦的体验。

我们为您的多渠道体验提供了更多提示和最佳实践。观看我们的Algolia 2019 年夏季网络研讨会,了解如何创建跨平台的惊人体验。如果你想和搜索专家交谈,点击这里。与此同时,我们希望听到你的手机 UX 提示。给我们留下评论或推文。

DX Matters -为文档创建伟大的搜索

原文:https://www.algolia.com/blog/engineering/dx-matters-creating-great-search-documentation/

D 开发者 e X 经验,被称为 DX ,是构建优秀软件的关键,因为它帮助你的开发者用户充分利用你的软件。

好的 DX 的一部分是 通过文档搜索, 不仅作为查找信息的手段,而且作为构建技术内容的工具。在本文中,我们向您展示了一个简单的项目——Algolia 的免费文档搜索平台——如何解决开源社区中的一个常见难题:搜索和结构化文档。我们展示了文档搜索的积极影响以及开发它的成本。

我们还重点对比了广泛使用的***【Ctrl+F】***的值

最后,我们提出一些关于如何让 DocSearch 更有帮助的想法。

让开发人员轻松编写文档

开发者社区发展迅速。它们的影响更广更强。我们想用我们的搜索技术来帮助开发者施展他们的魔法,让这个世界变得更美好。是时候关注一个合适的 DX 了。

这就是 Algolia 和它的 DocSearch 工具的用武之地:通过边学边做的体验让搜索变得生动起来。

搜索解决了一个常见的问题:每个开发人员在需要学习或使用新技术时都需要使用文档。搜索给一个项目带来了爱。但是大多数项目资源有限,或者他们缺乏为文档创建良好搜索体验的知识。他们专注于构建一个令人惊叹的工具。DocSearch 让他们的文档变得活灵活现——免费且开箱即用。

DocSearch 在社区中受到了热烈欢迎。**它每月自豪地帮助 230 万独立用户。**它是自助式和可定制的,是一种完整的开箱即用体验。它适用于任何软件,如 Stripe、React 和 jQuery。你的用户将浏览即时搜索结果,而不是猜测或翻阅页面。它还捕获对了解用户的行为和需求至关重要的分析。你现在是数据驱动,以产生伟大的文件。

但是 DocSearch 也提高了现代文档的标准,它标准化了一种结构良好的文档方法。这是通过它的爬行机制来实现的,它用爬行机制来给你的网站添加搜索。抓取文档要求内容遵循一定的结构。

随着时间的推移,我们还改进了 DocSearch。在搜索和构建内容的过程中,我们遇到了一些基本的和永恒的开发者问题。最大的问题是选择空格还是制表符来缩进页面。当我们将 DocSearch 集成到 jQuery 时,这是唯一的负面反馈。但是我们解决了这个问题, 多亏了一个简单的公关 :

为什么 Ctrl-F 不够用?

当人们可以很容易地使用 Ctrl-F 时,为什么要用 DocSearch 走那么远?原因有很多:

  • 你将搜索整个文档网站,而不仅仅是一个下载页面。
  • 边学边做的体验。即时搜索结果和分类下拉框使用户不仅可以搜索,还可以浏览、发现和学习。我们已经注意到,由于在搜索中所学到的东西,人们会重新措辞、纠正和删除他们最初的搜索。
  • 速度。从一页跳到另一页,快速找到你需要的东西。毫秒很重要。
  • 错别字宽容。我们的搜索纠正了错误的查询和打字错误。当你搜索未知概念或技术时,这是关键
  • 平局决胜算法。Algolia 的这一独特概念帮助维护者更好地重定向他们的用户,以互动的方式帮助他们的用户。更不需要支持!
  • 分析学。我们的搜索帮助您了解您的用户在做什么。

让我们看看它是如何工作的

我们每年 24H 都会对 1600 多个文档搜索网站进行爬网,以保持搜索与其内容同步。这一过程需要强大而安全的基础设施。我们使用可扩展的基础架构,因为我们才刚刚起步。这就是库伯内特介入的地方。Kubernetes (K8s)是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。它现在是 DocSearch 每天抓取 1600 多个文档网站的基础。如果您想了解更多关于所选架构的详细信息,请联系我们🙂

所有这些都是有代价的。当然,这个项目需要一个强大而可靠的代码库。这一切都是从葡萄牙波尔图的一个度假/异地开始的。这是一个经典的故事,我们将在另一篇博客中解释。像每个项目一样,时间是关键。我们的团队有一个主要的座右铭:自动化!我们甚至建立了一个完整的工具来收集关于项目的公共数据,以便提供最佳的定制帮助。这也是一个很好的博客,正在发展中。为了正确地自动化,我们需要重构我们工具的每一部分。这一点非常关键,帮助我们更快、更强、更远地提供搜索体验。

DX 甚至关系到我们的交付方式。我们帮助每一个向我们伸出援手的合规项目。然而,我们注意到,帮助大项目的最佳方式是主动伸出援手。我们正在雇人来帮助我们。DocSearch 的未来用户只需点击“合并”按钮,就能看到生动的“即学即用”体验。

下一步为 DX

我们项目的稳定状态鼓励我们走得更远。我们总是想展示我们对社区的巨大爱。路会很长,很神奇。我们期待着它,并且我们已经为 DocSearch 定义了一些未来的补充。

  • 更好的分析。
  • 用户界面的新版本(v3)。
  • 实时:仅在触发时(即内容发生变化时)抓取网站。
  • 仪表板:借助 UI 仪表板,让我们的用户创建自己的配置。
  • 改进并公开我们的文档搜索中心。

快乐编码和编写伟大的文档!

给零售商的建议,以正确的方式开始 2019 年

原文:https://www.algolia.com/blog/ecommerce/e-commerce-2019-tips/

看看去年的趋势,特别是我们落后的领域,总是很好地表明我们可以向前迈进。互联网零售商 2018 年关于网站搜索和关键绩效指标的调查——有史以来第一次研究搜索和业务绩效之间的相关性——是对塑造电子商务行业用户体验的趋势的简洁概括。

我们在下面一个漂亮的信息图表中总结了要点;以下是我们 2019 年的收获:

  • 最起码,要了解有多少网站访问者使用网站搜索。你可能会发现你的网站的转化率和跳出率是显著相关的。
  • 理解并定义受网站搜索影响的关键 KPI:每次访问的收入,搜索后在网站上停留的时间等。开始测量和测试。
  • 从搜索用户体验的主要方面来评价你的网站,尤其是那些影响性能目标的方面:速度、相关性、导航的简易性、个性化。然后看看这篇由 UX 星球撰写的关于高级搜索用户体验的文章。
  • 确定你的网站在搜索成熟度模型中的位置。你至少要计划好今天最先进的零售商在哪里。
  • 改变优先顺序,确保你走在潮流的前面。

我们希望您会喜欢下面的信息图。点击此处,下载包含顶级零售商详细统计数据、技巧和趋势的完整调查。

Infographic - Tips for Retailers

电子商务个性化:陷阱、权衡和解决方案

原文:https://www.algolia.com/blog/ecommerce/e-commerce-personalization-pitfalls-tradeoffs-solutions/

我们都知道一般的站点体验不再适用。为不同的个人兴趣和需求量身打造出色的用户体验需要付出很多——但很容易出错。执行不当的个性化尝试会导致收入损失、信任损失和客户流失。

在这篇博客文章中,我们将向您展示如何思考和实现电子商务个性化,从而更长久地吸引人们的注意力,提高参与度,并建立客户忠诚度。

个性化中的隐性与显性意图

一种非常常见的个性化方法是跟踪行为数据点,并建立个人资料和细分。大多数个性化解决方案通过关注隐式个性化来做到这一点:响应用户在导航时的特定行为。他们通常会应用以下技术之一:

  1. 根据用户配置文件定制页面布局和设计(更改页面的某些元素)
  2. 有针对性的覆盖和通知(例如,当您打算离开网站而不购买时,在应用程序或通过触发消息或看到折扣)
  3. 推荐(例如,当你点击你感兴趣的视频或产品时,你会看到类似或补充项目的侧边栏)

e-commerce personalization methods based on implicit intent

隐式个性化的风险在于它是高度规定性的,很容易误判访问者的目标。在没有直接询问并得到明确答案的情况下,你只是简单地推断出用户的需求,并给出你希望相关的内容。

比方说,我上周买了一套园艺工具作为生日礼物送给我阿姨。如果本周亚马逊推荐一系列园艺工具,那它就不再与我相关了。最终,背景很重要,这使得个性化更多的是实时了解个人,而不是仅仅依赖于细分和描述。

84%的客户表示,被当作一个人而不是一个数字来对待,对于赢得业务非常重要,处理隐含和明确的意图,并在两者之间取得恰当的平衡,比以往任何时候都更重要。

搜索:明确意图的途径

用户希望他们的问题能从他们在网站上使用的界面中得到回答,这个界面就是搜索栏。用户可以在搜索栏中自由输入他们想要的内容,并表达出明确的意图。

当我们在搜索中考虑用户意图时,一切都是为了理解相关性。

我们来看一个个性化的网购体验。如果用户输入:“鸡尾酒会的晚礼服”,我们需要计算包含上下文的相关性,然后将它与我们从看到的行为模式中得出的隐含意图结合起来:例如,点击,他们将东西添加到愿望列表的方式,等等。在排名策略中混合这些个性化信号,并将它们与销售排名或受欢迎程度等业务指标相结合,是成功个性化的关键。

如果你正在实施电子商务个性化,在其中,搜索营销( searchandising )策略——比方说,如果你正在按关键词推广商品——我们需要确保在你融入个性化结果时,这一策略仍然有效。换句话说,你需要平衡用户想要看到的结果和你作为企业想要展示的结果。所有这些都需要建立在自然语言处理能力的基础上,比如允许输入错误和同义词。

例如,如果用户键入“sports”(复数),搜索引擎应该理解复数并返回“sport”(单数)的结果。一旦我们处理了文本相关性部分,就可以根据流行度指标进行排名了。五星审查项目将被提升到显示第一。如果用户是电影迷,排名高的纪录片将首先显示。如果你是一个运动鞋迷,那么我们想向你展示一些排名很高的鞋子,比如鞋子 a。然后也许在展示你可能感兴趣的其他运动鞋之前,把鞋子 B 放在第二位。

personalized shopping experience for shoes

旁注:Algolia 让你在实施之前在我们的个性化模拟器中测试这些策略。

电子商务个性化:从理解到实施

你如何从理解它和把问题作为一个概念来欣赏,到准备好一个个性化的解决方案来正确地实现它而不造成损害,知道做错了比根本不做更糟。

准备就是要了解你的用户,了解你的业务,并承认我们正处于算法和个性化发展的一个阶段,在这个阶段,我们的工作还不完整。

在你追随个性化潮流之前,这里有一些需要考虑的事情。

适合你的(子)行业吗?

虽然个性化有很多潜在的好处,但并不适合每个人。网站个性化背后的技术,正如今天存在的那样,并不适合每一种使用情况。

例如,个性化是视频流媒体网站的必然需求。当然,个性化购物体验已经成为电子商务网站的常态。在其他行业,用例并不简单。

时机到了吗?

当试图确定个性化对你的网站的影响时,问问你自己:

  1. 你对你的用户了解多少?你能推断出他们的一些背景吗?随着时间的推移,他们是否有强烈的、一致的偏好?
  2. 个性化会改变对你来说重要的指标吗?如果你想增加购物车的大小或在网站上的时间,那么个性化会非常有帮助。如果你的目标是将用户推向一个特定的转换点,那么它可能不是满足你需求的正确策略。

你能描绘出你的用户的正确形象吗?

个性化的核心是获取行为信号并推断意图,然后使用创建的图片进行预测。但是你的推荐只能和你描绘的那个用户的图片一样好。问题是,现有的颜料只能描绘出这个人的一小部分真实身份。

购买偏好源于用户的外部环境(情境因素)和内部环境(个人偏好、信仰和亲缘关系)。一个人的内部环境总是会随着收入等级的变化、年龄的变化等等而变化。随着时间的推移,你仍然可以跟踪其中的一些信号。

**更难的是从外部环境中获取信号。**例如,如果一位顾客正在寻找结婚鞋,在他们购买后继续向他们展示结婚鞋是没有用的。

为了解决这个问题,你最好的办法是尝试识别用户对你的不同种类的产品或服务的亲和力,这些产品或服务不会受到外部环境的太大影响。审视一下你的业务,寻找你的产品中用户可以随着时间的推移获得一致偏好的部分。在我们的婚礼购物者的例子中,虽然继续向他们展示婚礼鞋没有用,但向他们展示他们表示偏好的品牌的鞋是有用的。

能否满足信任和透明的需求?

消费者正变得越来越适应公司如何在线收集和使用他们的数据。你需要一个个性化的解决方案来建立用户的信任,而不是破坏它。你可以通过透明度做到这一点——向用户展示你在收集什么,以及收集的原因。当用户看到你收集的数据和你推荐某些选项的原因时,他们不仅会感到更安全,还可以通过他们的反馈帮助你完善搜索。让他们有机会在他们的用户资料中选择不个性化,确保那些留下来的人真正接受这个概念。

你是你衡量的人

给你的网站添加个性化会对销售、客户满意度和其他重要指标产生影响。如果做错了,它会扰乱你的生意,所以在一个可控的环境中建立个性化。你想从简单开始,慢慢迭代,提炼,变得更好。

为了更好地指导和跟踪这一过程,选择一个接近你底线的北极星指标,看看指针如何随时间变化。对于媒体企业来说,主要成功标准可能是观看时间或跳出率。随着电子商务的个性化,它可以是结帐,活动购物车,或转换率

你应该 A/B 测试你的个性化策略,并创建反馈循环来学习和不断迭代。你永远不能简单地相信算法:你需要某种形式的人工干预,以及在必要时进行干预的能力。创建一个结构化的测试程序是至关重要的,这样如果事情变糟了,你可以随时恢复。

总之…

个性化很难。无论你已经选择了你的电子商务个性化工具,还是正在考虑,重要的是你有正确的基础和思考方式。

与此同时,对于一些电子商务个性化的正确例子,请查看 Shopify 的 4 个超级个性化的例子,Sailthru 的零售个性化指数,以及一个独特的使用案例和一系列有趣的指标来跟踪,迪卡侬新加坡如何通过个性化将转化率提高 50%

电子商务搜索和关键绩效指标的统计数据超过 40%—

原文:https://www.algolia.com/blog/ecommerce/e-commerce-search-and-kpis-statistics/

好奇站点搜索对于电子商务有多重要?别再看了。我们收集了一些关于网站搜索最有趣和最重要的统计数据,以及它对电子商务关键 KPI 的直接或间接影响。

事不宜迟…

网站搜索:您的电子商务物业之门

超过 45 亿的全球互联网用户在网上搜索任何东西,87%的购物者从网上开始他们的产品搜索。

64%的人使用搜索来解决“我想买的时刻”

零售网站上 43%的用户直接去搜索栏

使用搜索的消费者购买的可能性是的 2.4 倍。搜索者也带来了更多的收入,与不使用搜索的人相比,在移动和桌面上的花费多了 2.6 倍。

34%的用户试图搜索非产品内容

多达 30% 的电子商务访问者使用内部网站搜索,我们都已经看到了这一点:网站搜索者转化的可能性是其他人的 2-3 倍。

39%的购买者会受到相关搜索的影响。

12%的用户在不满意的搜索后会转向竞争对手的网站。

整体产品搜索体验中的挫折导致了不可接受的流失和流失程度:根据 Forrester 的数据,流失和流失的比例高达 68%。

20%使用搜索的人继续改进他们的搜索(提交另一个搜索),21%的人从搜索结果中退出了网站。

61%的网站性能低于可接受的搜索性能,这与用户的实际搜索行为和期望不一致(15%的网站搜索查询类型性能“不佳”)。

72%的网站完全达不到网站搜索的预期。

显然,我们需要更好的电子商务搜索引擎。

做对了,站点搜索会让转化率飙升

使用现场搜索并找到他们想要的东西的人的转化率几乎翻了一倍。

当访问者进行搜索时,亚马逊的转化率飙升了 6 倍(2% → 12%)。沃尔玛 1.1%的转化率通过搜索达到 2.9%,增长了 2.4 倍。对于 Etsy 来说,网站搜索将转化率提高了 3 倍。

通过网站搜索的转化率比平均水平高 50%。

与基本搜索功能相比,拥有高级搜索功能的零售商的桌面转换率高出两倍。

案例研究表明网站搜索优化提高了 43%的转化率

[搜索]访客转换率为 4.63%,而网站的平均转换率为 2.77%,是的 1.8 倍。

50%的零售商表示,他们看到网站搜索技术的直接结果是 T2 的收入增加。(对于拥有高级网站搜索功能的公司,这一比例高达 93%)。

自动完成功能可以将销售额和转化率提高 24%

在一些网站上,搜索业务大约占总收入的 40%。

了解 Lacoste 如何利用网站搜索将转化率提高 37%

电子商务搜索顶级 KPI

53%具有高级搜索功能的零售商已经定义了站点搜索的 KPI,相比之下,只有 13%的零售商具有基本站点搜索功能。

2018 年,受网站搜索影响最大的 KPI是每次访问收入(52.4%)、搜索后在网站上的时间(51.5%)和最高反弹搜索(39.8%)。

2020 年最常见的站点搜索 KPI有:来自搜索的转化率,来自搜索词的点击率,排除返回零结果的搜索。

拥有网站搜索的前三大功能——营销、产品、全渠道——应该注意。60%的高级搜索公司给这些功能工具来管理和优化没有它的站点搜索

额外奖励: 5 份可操作的内部网站搜索分析报告

个性化和电子商务搜索

59%的网购者认为在个性化零售店更容易找到更有趣的产品。

当个性化和专有客户数据整合后,收入增长 6%至 10%

48%的消费者在体验个性化时会花更多的钱。

59%的客户表示基于过去互动的定制参与对于赢得业务非常重要。

个性化、相关性和过滤/分面是对商业利益最大的三大网站搜索功能。

51%的消费者表示,如果内容个性化,他们更有可能购买某个品牌的产品。

了解迪卡侬如何将个性化搜索查询的转化率提高了 50%。

移动电子商务搜索

在“我想购买”的时刻,最常用的设备是移动设备,占 65%

手机应用程序购物者花费的时间比网站用户多 20 倍。

53%的移动用户会离开一个加载时间超过三秒的网站

更好的 UX 将移动设备对 Cdiscount 销售额的贡献提高了 50%

更好的 UX 为 ClubMed 增加了20%的移动流量和 80%的移动收入

语音搜索

52%的语音助手用户表示,他们每天使用几次语音技术,或者几乎每天都使用,相比之下,在 COVID 爆发之前,这一比例为 46%。

大约 36%的消费者拥有智能音箱。

91%的公司在语音方面进行了大量投资。

76%接受调查的公司报告称从语音和聊天活动中获得了可观的收益

40%的千禧一代在购买前通过语音研究产品。

71%的用户更喜欢通过语音搜索,而不是使用键盘。

美国成年人在车内使用语音助手的人数(1.14 亿)是在车外使用智能扬声器的人数(5780 万)的近两倍。

外卖

尽管有转化的潜力,但只有 15%的公司拥有专门用于优化网站搜索的资源,只有 7%的公司报告从网站搜索数据中学习并在其他业务领域使用这些数据。

但是这些公司的 KPI 也非常好。

关键要点:设置你的 站点搜索 KPI,开始 衡量你的搜索相应分配你的投资

电子商务假期计划:让你的搜索进入记录季

原文:https://www.algolia.com/blog/ecommerce/ecommerce-holiday-planning/

对于零售团队来说,这个假期没有什么是正常的——甚至不是“新常态”。今年前 3 个月,美国电子商务经历了 10 年的增长,我们的一些客户的搜索查询量增长了 600%以上。

【T2ecommerce-growth-2020-chart

这篇博文的目的是给你一个可行的清单,这样你就可以:

1)避免因无搜索结果或其他搜索事故而导致的网站废弃,以及
2)对那些准备好的人来说,从这个有望成为非凡假期的季节中获利。

别让搜索成为停机的原因

你已经准备好了所有的电子商务系统:数字支付、CRM、订单处理、CMS……只是为了在你的客户最需要你的时候进行故障切换:寻找或发现完美的节日礼物。

无论您是处理自己的搜索基础设施,还是信任搜索提供商,您都应该确保您的系统准备好处理可能会出现的巨大负载增长。我们自己的一些最佳实践:

  • 将搜索流量置于索引之上,以最快的速度向客户提供结果
  • 当出现持续的使用高峰时,在流量增加的区域部署额外的硬件
  • 自动缩短查询处理时间,以便在有限的使用高峰期间处理更大的负载

让您的搜索全渠道就绪

全渠道购物者花费更多,购物次数增加一倍。甚至在 COVID 袭击欧洲和美洲之前,66%的互联网用户使用手机或平板电脑购买,使用智能扬声器和语音助手进行购物的人数同比增长了 165%。

构建移动体验不仅仅意味着拥有一个响应迅速的网站。例如,移动平台上的许多困难来自显示空间的极端限制。

Cost of poor mobile performance

一个常见的错误是想要像在桌面上一样显示手边的所有数据。从了解购物者如何浏览你的目录开始。例如,对于视觉上选择的项目,如鞋子或衣服,您可以将搜索结果显示为放大的图片。

Mobile search results example

要了解更多关于移动 UX 的提示,请查看本深度指南。

对话式搜索——与技术互动并以自然对话的形式获得回应的过程——充当上下文相关和个性化互动的渠道。虽然这为人们如何购物开辟了一个新的可能性,但与传统的文本搜索相比,成功的语音搜索从根本上来说更具挑战性。它需要显著更高的相关性,并且结果必须以消费者看来的思维速度交付,模仿自然语言对话发生的速度和风格。

更多关于构建全渠道搜索和发现的信息,请查看这份指南

简而言之:跨渠道的无缝搜索和发现至关重要。

保持库存最新

尽管零售商适应了新冠肺炎和就地安置的初始库存冲击,但库存将继续波动,因为消费模式和额外个人购买的转变速度超过了制造业和供应链的调整速度。一些库存商品不可避免地会卖光,其他商品的需求会比预期的高。这可能会导致可怕的“商品售完”屏幕,不仅会导致您的客户反弹,还会浪费屏幕空间来购买不会产生任何销售的产品。

节日期间的交易量和频率可能意味着每天都有数百万次产品数据库更新。将您的搜索整合到销售点或库存管理系统,以实时或接近实时地更新每种商品的可用性。

如果你还没有,摆脱过时的“选择一个地点”和“物品将如何被接收”的模式。相反:

  1. Develop a great UX to locate items:

      • 显示库存商品最近位置的位置数据
      • 一个网飞风格的界面,可以一次查看多个位置的结果

    Great search UX with location data

  2. 一个动态用户界面,在一个界面中显示所有可用的购买方式:店内、提货或发货

提前购买购物者的愿望清单上的商品

你提供的产品是你最大的资产之一,所以要确保它能满足客户的需求。使用您的搜索分析来发现您的购物者在假期前搜索的商品,最重要的是,他们正在搜索但没有找到的商品。使用这些见解来调整您的目录和计划交易,或改善您的广告和搜索引擎优化策略。

知道自己想要什么产品的购物者可能会进行精确的搜索,以了解你是否出售这些产品或类似的商品。你可以通过推荐已保存的搜索和搜索提醒,引导他们在你的网站上找到合适的报价。他们会有再次光顾你的商店的动机(或者你会有一个强有力的理由去 ping 他们)。

在搜索结果中利用您的内容

你和你的购物者产生关于你所卖产品的有价值的内容,包括博客帖子、指南、产品评论和社交媒体帖子。这些内容可以影响顾客的购买决定,并使你成为所在领域的权威。在与视觉内容互动的消费者中,市场转化率增长了 111%。

https://www . algolia . com/doc/guides/solutions/gallery/federated-search/

1.不要犹豫,在你的网上商店或搜索结果中,把内容放在产品页面旁边。

user generated content in federated search results

2。链接相关商品以增加购物车容量和客户总价值:

linking related items in ecommerce checkout

https://www . algolia . com/doc/guides/solutions/gallery/related-items/

更加积极主动地推销商品

与实体店不同,你可以一键甚至自动地重新组织你的店面。用它!

购物者会寻找最好的交易,所以在你的搜索结果排名中使用折扣率。通过首先排列销售时间有限的产品来制造稀缺性。有一个大优惠,但仍想保持你的利润?首先对相关查询进行排名,然后在你的排名逻辑中加入你的折扣后利润。可以玩的参数是无穷无尽的。重要的是能够根据对你的顾客和你来说什么是重要的来配置你的搜索排名逻辑。

Visual merchandising with a site search tool

不管你喜不喜欢,你都会错过一些趋势,发现你希望有更多促销的高销售报价。现在还不晚!调整您的搜索结果排名逻辑,以促进您最畅销的产品,并捕捉更多的销售。

抢购结束后…

将第一次购物者转变为忠诚顾客

通过你的网站搜索,你的顾客真的会和你说话。利用这些宝贵的见解!他们在寻找什么是你没有提供的?哪些搜索结果的转化率最高?人们是如何浏览你的商店的?他们在寻找电视时是否按特定品牌进行了筛选?所有这些数据都可以帮助你改进明年的产品和向顾客展示的方式。

在整个假日季节,你将获得新的购物者,这要归功于你在特定产品上无与伦比的优惠,以及广告力度的加大。如果他们喜欢整体体验,他们可能会再次光顾你的商店。因此,当事情平静下来时,反思一下哪些进展顺利,哪些进展不顺利,并开始为您的用户体验规划长期投资。研究报告称,在 UX 投资的每 1 美元会产生 2 到 100 美元的回报。

我们有更多的网站搜索技巧和最佳实践,以及如何让您的在线商店更具竞争力的观点。

保持联系!

电子商务或市场网站:哪个最适合你的企业?

原文:https://www.algolia.com/blog/ecommerce/ecommerce-or-marketplace-website-which-is-best-for-your-business/

越来越多的美国消费者在网上消费。 预计 2020 年底电子商务将增长 40%预计 2020 年全球数字买家将达到。 仅 2020 年 7 月至 9 月,人们就在网上 零售商处消费了 1994.4 亿美元。然而,网上购物者是一群挑剔的人:据麦肯锡&公司、 称,用户会在 2 到 3 秒钟后放弃一个糟糕的网站,转而选择竞争对手。

鉴于这些统计数据,对你的潜在客户来说,尽快找到他们想要的东西比以往任何时候都更重要。一个令人惊叹的电子商务或市场网站可以让在线购物者快速轻松地找到他们想要的东西。问题是,为了获得最高收入,你应该使用哪种平台:电子商务还是市场网站?

电子商务和市场网站的区别

最初,确定电子商务网站和市场网站之间的区别可能很棘手;像亚马逊和沃尔玛这样的巨头使用这两种类型的网站。区别的最简单方法是,是一家公司在专门的网站上销售产品(例如,Staples 或 Nordstrom),还是多家卖家在 Ebay、Etsy 或 Creative Market 等数字市场网站上提供各自的产品。

电子商务与市场:比较

这两个电子商务市场网站都为您的业务提供了潜在的改变游戏规则的机会,但是确定哪个平台可以提供更大的回报取决于您的业务优先级。下面是初步区别一目了然:

**| 电子商务 | 市场 |
| 销售企业所有者的一套产品 | 销售来自不同厂商的多种产品组合 |
| 设置需要时间和精力 | 可以非常快速简单地设置 |
| 没有初始流量或访客 | 如果个人卖家有以下情况,则可能存在初始流量 |
| 你可以完全控制业务——你可以决定列表的数量和频率,并个性化体验 | 你全权负责——你管理各种类别和商品的列表、产品组合、营销和客户服务 |
| 在产品营销方面,你可以直接接触到潜在客户 | 您可能能够也可能不能在现场搜索之外营销产品 |

选择电子商务的三个关键原因

  1. 端到端控制。
  2. 能够提供个性化体验。 如果你确切地知道你的目标市场是谁,他们在寻找什么,那么定制你的网站的外观和感觉,以及提供个性化的购物体验会更容易。
  3. 直接接触顾客。做销售是伟大的。将那次销售转化为多次销售——并将那个客户转化为以后的回头客——要好得多。对你的客户进行营销对增加销售至关重要,拥有管理整个漏斗中所有接触点的能力,以及购物和履行体验,可以在品牌认知度、客户忠诚度和购买频率方面产生很大影响。

选择商场的三个关键原因

**1. 成为趋势的一部分。 在全球范围内,2019 年超过 50%的电子商务销售额是通过在线市场完成的,每年为经济贡献 1.7 万亿美元——这一数字在未来 5 年内可能会大幅增长。随着人们既能成为卖家又能成为买家,这个空间的规模和交易的频率将会增加。此外,更年轻的购物者,如 Z 世代,在购买时往往更不知道品牌,选择优先考虑他们正在寻找的商品类型,而不是他们在哪里购买。
2. 对 kickstart 的资本密集度较低。不需要购买、储存和运输任何库存,市场提供了一个低成本的选择,让你的网站在很短的时间内建立并运行起来。
3. 更容易规模化。 如果你想专注于快速增长你的销售额,网上市场是有意义的。你将有机会在各种各样的类别中实现更大的销量,并且你将能够不断地迭代。利用 市场网站搜索 ,你可以确定你的理想客户,最终目标是确定你的产品与市场的完美匹配,相应地调整和增加你的库存,并将你的增长集中在你网站上最大的销售机会上。

搜索和发现在中的位置

提供产品是一回事,但让用户在你的网站上准确、快速地找到他们想要的是另一回事。

这就是 优化站点搜索 的用武之地。无论你使用的是电子商务还是市场网站,Algolia 都能帮上忙。作为现场搜索技术的行业领导者,我们提供了一套全面的解决方案来帮助您更好地调整您的内容以满足用户的需求。我们的解决方案可以帮助您专注于加速对话、提高参与度、培养客户忠诚度,以及成功优化大规模搜索。

您网站的后续步骤

当你决定是要推出一个电子商务网站还是一个市场网站时,是时候让你的网站建立并运行起来了——并开始销售。

有关 Algolia 的 电子商务市场 选项的更多信息,无需进一步搜索。注册一个永远免费的账户 。了解更好的搜索工具如何为您的客户提供更好的用户体验,并更有效地提高您的利润!****

电子商务搜索和发现:有何不同?

原文:https://www.algolia.com/blog/ecommerce/ecommerce-site-search-and-discovery/

寻找和发现有什么区别,为什么重要?

Algolia 专注于为用户提供无缝、高质量的搜索和发现网络体验,旨在增加互联网上的内容和产品可发现性。然而,有些人觉得“搜索和发现”这个短语有点令人费解,因为这两个词似乎是同义词。他们想知道为什么我们把这两个词都包括在内来泛指完整的体验。

让我们快速看一下这些概念对人们的在线行为意味着什么,以及为什么这两种活动在提高网站可用性方面是独特而有价值的。

这一切意味着什么

让我们从思考负面空间开始:什么 不是 的搜寻和发现?

当你在一个电子商务网站上发现了一件特定的商品,并准备付款时,我相信你会同意你既不是在搜索也不是在发现。

但是,如果你要在结账时提供你的信用卡号码,根据指标,你会看到“买了这个的人也买了……”,你可能喜欢的其他商品?如果你确实喜欢其中的一件物品,并把它放在你的购物车里,难道你没有“发现”什么吗?

让我们打开在线词典,查找这两个搜索词:

搜寻 意思是“仔细或彻底地调查或查看,努力寻找或发现某物。”

发现 意为“使知道或可见;第一次获得视力或知识

啊哦。基于这些定义,搜索似乎只不过是发现的一部分。发现不就是搜索的最后一步吗?是的。这些活动肯定可以重叠。

然而,它们确实略有不同。搜索完全是一种主动的追求,而发现也可以是被动的——当你在做其他事情时偶然发生的事情(例如,搜索)。

此外,“第一次”发现的语言是关键。当你在搜索的时候,你明确知道你在找什么或者它可能在哪里,但是当你在发现的时候,你不知道你在找什么或者在哪里找到它,因为你从来没有见过它。

简而言之:

搜索是由一个 更高级别的特定意图 和一个 更窄的精确程度来告知的。

发现是由一个 更高层次的一般意向 和一个 更广程度的精确所告知的。

好的,我们就要到了。如果有人非常精确地寻找某样东西,他们就是在搜索。如果他们第一次了解某件事,如果这件事以任何方式与他们的意图相关,那么他们就是在发现。

发现新世界

在 15 世纪晚期,在我们有精确的地图之前,人们不知道地球上有多少陆地,陆地块在哪里,以及它们是如何形成的。欧洲探险者开始探索大陆块和他们遇到的任何东西。一旦第一次看到一块陆地;人们再也找不到它了。够直接了。

现在让我们看看发现在网络上是如何工作的。搜索产品的人可能会意外发现其他商品。例如,他们可能偶然发现一个新品牌,并将其作为自己的品牌。他们可能会非常喜欢它,以至于在那次愉快的发现经历之后,他们再也不会去寻找另一个品牌。

想象一下你正在执行一项自己的任务:你有一个重要的夜晚要出去,却什么也没穿。你在笔记本电脑上打开一个浏览器标签,或者进行移动搜索,然后进入你最喜欢的在线商店或时装市场的电子商务主页。

你看到了什么?除了电子商务网站搜索框之外,可能还有几行产品和一个大的商品集合广告。类别下拉菜单,一些流行系列,一些促销活动。

首页

与搜索栏呼应,这些吸引眼球的东西都在那里做什么?你猜对了:帮你发现东西。优化您的探索之旅。激起你的兴趣。它们不是基于你的搜索意图或关于你的数据,也许你是第一次了解它们。

你能想到电子商务主页中有哪些 而不是 的元素来帮助发现吗?有一些次要的非产品电子商务网站元素,如脚注和免责声明,但很明显,搜索和发现是几乎所有与用户体验相关的事情的核心。

好吧,你需要那套衣服。你看在线零售商网站的顶部。你点击分类菜单,查看过滤选项,选择你的性别,然后点击“牛仔裤”,你就会进入一个分类页面。

现在你既处于特定产品搜索模式,又处于开放的发现模式,因为你在寻找特定的东西,但也愿意寻找新的产品类型。你想发现一个国家,但你不确定哪个国家可能可用。

当我开始在 Algolia 工作时,最让我大开眼界的时刻是当我明白一个网站或移动平台的应用程序在多大程度上可以由搜索功能和发现技术驱动,这可以带来更好的用户体验,并最终带来更高的转化率。我不知道搜索分析可以如此包罗万象。

令人敬畏的算法的力量

例如,你现在已经到达分类登陆页面,里面有牛仔裤的产品名称、描述、图片等等。这实际上是一个搜索结果页面,由 Algolia 发送一个空搜索,带有类似“性别:X 和类别:牛仔裤”的过滤器。不过,牛仔裤并不是你看到的唯一由 Algolia 提供的东西。还有一些商品销售:一个横幅和一些按产品类型组织的精选牛仔裤;也许是品牌或者风格。

这些系列是根据你独特的喜好量身定制的。您的搜索结果页面已经根据您的客户群和早期购物行为(如果适用)进行了调整,以帮助您锁定您喜欢的品牌、颜色和风格的相关产品。事实上,轮播的布局和设计甚至可以根据关于你是谁的网站搜索数据进行调整!

回到你的牛仔裤。你想更具体地说明你的偏好。你调整多面搜索价格滑块以反映你的预算,并选择一种风格进行调查。这些简单的动作为电子商务搜索引擎提供了关于如何回应和提供相关结果的关键见解,无论是即时还是在你未来的访问中。

你点击一条好看的牛仔裤,进入产品页面,查看照片和规格。嘿,这是你的国家了,你可以自由探索。

你问自己:“这些是我想要的牛仔裤吗?”也许在你花 150 美元买下它之前,你觉得它不够黑,其他买家的评论也不像你想在电子商务网站上看到的那样精彩。

你意识到自己想要相似但又略有不同的东西。您已经从所有这些发现活动中缩小了相关产品的范围,现在大部分都切换到了搜索模式。在此阶段,什么可以帮助简化您的客户体验?

小工具来救援

Algolia 的一款产品是 推荐 ,里面有一个“相关产品”的 widget。这就是接下来你可能会看到的:类似的产品——款式相同但颜色不同的牛仔裤,或者是裁剪过的而不是全长的,甚至是同一品牌的裤子。你检查了其中的一些项目。

瞧,你找到了完全合适的牛仔裤。想想看:这是一个相当惊人的壮举。搜索引擎没花多长时间(15 分钟?),但它从考虑你的广泛意图和应用你的改进转变为根据它对你的意图的了解更具预测性和更有帮助。

然而,这还没有结束。当你点击“添加到购物车”,你会看到另一个转盘,“经常一起购买。”是的,另一个 Algolia 部件的手工制品。这一个把你的注意力集中在相关的产品上,你可以搭配那些新的牛仔裤来创造完美的外观。它向你展示了衬衫、鞋子和皮带的搭配。这些建议基于您的购买历史以及其他人放入购物车的具体产品组合。更多有趣的事情等着你去发现。

这个提炼现场搜索发现的过程当然不是完美的。例如,如果爱上你的牛仔裤后,你决定也想要一件夹克,你可以通过浏览夹克的类别来重新开始搜索体验。如果你这样做了,开关就会翻转,搜索引擎会根据你的广泛意图重新了解你,然后切换到提供相关结果。

尽管如此,你难道不承认这个电子商务网站的搜索过程是 相当接近 的完美吗?

你发现了什么

祝贺您——您现在理解了“搜索和发现”的含义,并且您可能对这些元素在电子商务网站上协同工作的力量印象深刻,这些元素可以准确地引导人们找到他们想要的东西,并优化用户体验。

我给你们留下一些外卖:

  • 搜索和发现平台为网络应用提供的支持远比你想象的要多
  • 搜索功能和发现功能以有趣且互补的方式交织在一起,优化了用户体验
  • 电子商务商店的 高级搜索和发现平台 可以使用机器学习来收集和分析一段时间内用户偏好的网站搜索数据,使购物者下次进行电子商务网站搜索时能够更快地找到东西

感谢您与我一起探索搜索和发现,以及它如何影响客户体验! 我们欢迎您就搜索和发现或我们的 Algolia 搜索和发现平台提出任何问题

2023 年电子商务网站搜索趋势

原文:https://www.algolia.com/blog/ecommerce/ecommerce-site-search-trends-2023/

我很高兴分享我们的 电子商务网站搜索趋势 2023 报告 !我们调查了 900 名 IT 和商业专业人士,以更好地了解全球零售商计划如何利用搜索&发现技术进行创新,从而开启新的收入机会。

产品搜索和发现是电子商务客户体验不可或缺的一部分。这是一个强大的解决方案,可以释放更多的转换机会,并导致回头客;它还能提高忠诚度,并最终增加收入。

该调查由科尔曼巴夏礼 的独立市场研究人员与 Algolia 联合进行。

搜索投资趋势

ecommerce search trends report cover

在过去两年的新冠肺炎疫情中,电子商务和零售业的领导者不得不竞相满足需求。首先,出现了满足在线业务激增的大规模热潮,然后随着限制的放松,转向更强大的混合(也称为全渠道或多渠道)运营,如“网上购物,店内提货”(BOPIS)。随着全球通胀率攀升和 2023 年经济衰退的逼近,很难确切知道商业将走向何方。

Ecommerce search trends strategy

然而,从我们的调查结果来看,显而易见的是,搜索和发现已经带来了强劲的、可重复的收入。事实上,超过 50%接受调查的零售专业人士指出搜索是收入的驱动力,71%的人表示他们对搜索带来的收入感到满意或非常满意。在过去的两年里,公司不仅加快了对搜索技术的投资,而且 7.8%的公司表示他们计划进一步扩大投资。

搜索和发现技术影响的不仅仅是收入,它还会影响个性化、全渠道销售等等。下面,我仅概述了本报告中确定的几种方式。

搜索会对收入、个性化和整体客户体验产生重大影响

是的,搜索可以极大地影响收入,但还有更多。决策者认为,其他领域,如个性化和客户体验,也会受到很大影响。搜索结果、推荐和浏览页面的个性化可以增加新文本&电子邮件、社交商务和购物车个性化项目的回头客和客户忠诚度。

搜索技术可以帮助你影响你的混合业务

搜索技术与混合(或多渠道)业务有一些有趣的重叠——实体零售和在线电子商务的结合。越来越多的公司正在尝试提供完全整合的搜索体验,使在线搜索质量与店内购物体验相匹配——同时还配有实时库存状态。例如,客户可以在网上搜索产品、可用的确切数量及其在商店中的确切位置(过道和货架)。虽然希望利用搜索的混合业务仍处于早期阶段,但仍有大量的上升空间和创新空间。

黑色星期五准备就绪

对于黑色星期五的准备情况,接受调查的 IT 和业务决策者都表示,他们希望搜索和发现技术能够帮助他们扩展和自动化商品销售等劳动密集型工作流。利润比以往任何时候都薄。公司需要最大化每项产品投资和每个员工的生产力。搜索技术是按规模构建的,新的销售功能承诺在黑色星期五等特殊销售期间提供智能优化功能。

全渠道销售会对数据、个性化和客户体验产生巨大影响

大约一半接受调查的公司表示,他们已经实施了某种形式的全渠道销售。全渠道需要付出巨大的努力,但可以为能够利用这些数据的公司带来回报。当购物者浏览和浏览不同的网站时,搜索技术可以利用这些数据提供更好的个性化客户体验。

超过一半的内部搜索开发人员认识到,他们无法让搜索发展得足够快

购买与构建——是自己构建搜索功能更好,还是使用搜索服务(如 Algolia)更好,还是引入系统集成商更好?根据调查结果,IT 和业务决策者都表示他们内部创新速度不够快。通过选择 SaaS 产品,零售商将受益于快速实施和持续更新以及最新的功能(如人工智能),而不会出现任何中断。

声音铺天盖地?你并不孤单…现在开始还不晚

大约 50%的受访公司表示他们感到落后——他们在这些技术上投资不够。即使他们有,他们也不认为他们能跟上技术的变化。投资尖端技术来扩展您的优势永远不会太迟,尤其是与能够提供最新特性和功能的提供商合作。

拿到你的副本

这些只是今年报告中的一些发现。《2023 年电子商务搜索趋势报告》 现已提供下载。

2023 年电子商务趋势:个性化

原文:https://www.algolia.com/blog/ecommerce/ecommerce-trends-for-2023-personalization/

Algolia 赞助了由科尔曼·巴夏礼研究公司制作和撰写的 2023 年电子商务网站搜索趋势报告 。该报告基于对 900 名 IT 和商业决策者的调查,讲述了公司今年计划如何投资于搜索相关技术,包括电子商务个性化。

绝大多数受访者认可搜索对创收的重要性。他们还确定了它将如何影响许多渠道的个性化,包括文本和电子邮件通信、社交商务和购物车程序。

个性化是客户体验的一个重要组成部分,但还可以引入更多功能来最大化潜在回报。例如,近四分之三(73%)的人说他们已经实现了“相关产品”功能,这是最常见的个性化类型。除此之外,不到一半的人实现了任何其他类型的个性化。

personalization survey

许多受访者告诉科尔曼·巴夏礼研究公司,他们已经实现了一些个性化功能,如为客户提供设计个性化购物档案的方法,以开始接收个性化报价,43%的受访者表示他们根据搜索或购买的商品提供产品推荐。

personalization chart

许多受访者表示他们才刚刚开始。例如,56%的人说他们计划实施“保存项目以备后用”计划,42%的人说他们将很快提供短信订阅计划。

这只是提供个性化体验的冰山一角。大多数电子商务公司面临的挑战是利用他们拥有的第一方数据来构建个性化程序。

个性化是由数据驱动的

这并不是一个全新的战斗口号——Gartner 在 2018 年发布了其首个个性化幻方图,亚马逊在 2003 年发布了一篇 论文 进行推荐,而网飞在 2009 年以其【100 万美元赏金 写了一个更好的个性化推荐算法。

个性化对消费者来说也很重要: 91%的人说 他们“更有可能去那些认可、记得并向他们提供相关优惠和推荐的品牌购物”对于卖家来说,个性化可以带来高达 25%的收入提升,更不用说更高的客户和品牌忠诚度了。

搜索技术和个性化有什么关系?实际上,很多。

  • 现场搜索结果可以个性化
  • 推荐也一样,现在可以由你的搜索引擎提供商提供支持
  • 搜索相关数据是提供个性化结果的基础
  • 用于网站搜索的机器学习正在推动许多创新
  • 搜索数据可以为用户简档提供高度相关的意图信号

数据驱动的个性化

对于任何打算投资个性化的企业来说,它都是从数据开始的。

你收集的顾客和访客的人口统计学和心理学数据越多,你的个性化就越复杂。这包括如下数据:

  • 位置(地理)
  • 年龄
  • 性别
  • 以往购买记录
  • 网站搜索历史
  • 浏览过的页面
  • 社交媒体喜欢
  • 会员状态(如果您有会员或奖励计划)

它还可以包括浏览器和查看偏好等上下文数据、点击的电子邮件、奖励计划积分、点击的广告等非现场信息。

大中型电子商务公司已经开始投资构建数据湖,以存储、分析和利用全渠道营销接触点的客户数据,实现实时个性化。即使你没有投资于数据湖,许多电子商务平台自己也存储了足够的数据,可以用于个性化。

还有其他已经拥有大量客户数据的系统,例如您的搜索解决方案!您的搜索引擎正在生成和存储大量有价值的数据,这些数据可用于个性化和其他程序。它包括最近查看的类别和产品、最近的搜索、购买等内容。

您可以利用您的数据以多种方式实施个性化:

  • 搜索
  • 建议
  • 浏览
  • 相关产品
  • 动态重新排名

您为搜索设置的相同个性化规则可以在任何地方实施。例如,在 Algolia 中,您可以使用产品仪表板为每个事件或属性分配值或权重,这反过来会提升搜索排名和动态目录和产品列表页面(PLP)中的个性化结果。

例如,EyeBuyDirect 网站上的购物者享受一致的、 个性化体验

eyebuydirect site personalization

当用户浏览到“女性眼镜”分类页面时,搜索结果会根据每个用户的独特偏好进行放大,例如镜架样式/形状或材料。偏好可以根据过去的购买或浏览历史来确定。它可以针对任何属性进行优化,这将因用例而异。当客户搜索、浏览网站或查看类别时,可以显示个性化的结果。一次制定规则,到处部署。

您还可以在推荐中添加个性化内容。推荐可以是一对多、一对一或两者的混合。例如,它可以包括“购买了 x 的客户也购买了 y”或“因为 购买了 x 和 y,我们认为您也会喜欢 z”。

在 EyeBuyDirect 的情况下, 早期结果显示 :

  • 通过搜索、更多浏览和个性化服务,收入增加 4%
  • 根据产品建议,转化率提高 1–1.5%

另一个例子:通过使用 Algolia 的推荐 ,一个推荐引擎,客户能够带动一个收入提升 120 万美元。

Algolia 等解决方案中内置的新机器学习算法也将 动态重新排列 搜索查询结果,并应用个性化规则。这发生在个位数毫秒。当用户键入一个查询时,搜索引擎首先寻找相关性,然后它将应用重新排名来将更好的结果推到顶部——其中 更好 指的是个性化规则、商品销售、排名规则或其他因素的组合。

结论

从推荐到个性化搜索结果,用户体验创新有巨大的机会来推动收入和客户忠诚度。机器学习的进步已经扬起了风帆——个性化解决方案正在加速发展,比以往任何时候都更加强大。

这些个性化算法的背后是不同的机器学习技术,这些技术可以利用多次访问会话甚至单次首次用户会话的数据,识别预测的意图,并提供可清晰测量的个性化结果。 如果你想了解更多,你可以从下载免费的 2023 年电子商务搜索趋势 开始。

ecommerce state of search report

电子商务

原文:https://www.algolia.com/blog/ecommerce/

电子商务

打造身临其境的购物体验:通过 Adobe Experience Manager 和任何商务平台使用 Algolia 搜索

将 Algolia 添加到 AEM 商务体验中,可让零售商充分利用其内容,丰富购买体验...

全球联盟总监- Algolia

使用搜索增加网上药店销售的八种创新方法

原文:https://www.algolia.com/blog/ecommerce/eight-innovative-ways-to-increase-online-pharmacy-sales-using-search/

发达国家和发展中国家的药店销售都在增长,新冠肺炎疫情带来了消费者对非处方药和健康产品的新一轮在线需求。

在大多数国家,电子商务药店网站的数字广告仍然受到严格监管,这使得药店数字资产的出色用户体验对于转化和留住用户至关重要。

零售商知道 高级网站搜索可以使转换率翻倍 ,有效的搜索在电子商务药房平台上尤为关键,因为购物者可能知道他们想要什么。当搜索在一个药店网站上被很好地设计和优化时,它可以成为游戏规则的改变者。

提高网上药店销售额的成熟思路

为了向您的药店网站客户提供吸引人的体验,您可以微调许多搜索组件和 UX 行为。您的搜索栏的设计和功能、搜索结果页面的布局和功能、您的搜索过滤器和方面—您可以为您的药房网站优化所有这些。

让我们来看看 6 个在线药房网站,它们共同实施了 8 种创新工具来定制搜索功能,并有效地让用户获得他们需要的信息。

1。法国的 Easyparapharmacie:自动完成或查询建议

自动完成查询建议 (也称为预测搜索或自动建议)在用户键入查询时实时为其提供搜索建议。这些建议与他们的查询或网站上流行的其他查询相关,旨在加快搜索过程并提高点击率。

当用户在easyparpharmacie搜索栏中输入查询时,他们会得到特定的产品建议以及更广泛的类别建议和查询建议。为了帮助用户快速识别最佳选项,搜索查询在搜索结果中被加粗。

ecommerce-search-pharma-5

https://www . algolia . com/doc/guides/solutions/gallery/predictive-search-suggestions/

2。美国的沃尔格林:通过症状和有效成分促进搜索

网上药店购物者可能知道他们正在寻找的产品的品牌或商业名称。当他们去实体药店时,他们可能会向药剂师描述他们的症状或列举他们需要的药物中的活性成分,并寻求最佳产品的指导。同样,药店电子商务平台应该允许客户根据他们的症状或他们需要的活性成分进行搜索。沃尔格林在这方面做得很好:无论用户在 沃尔格林 搜索栏中输入“发烧”或“对乙酰氨基酚”,他们都会得到相关的结果。

ecommerce-search-pharma-8

3。在德国购买 Apotheke:用 microcopy 提高可用性

Microcopy 是帮助网站用户导航和使用界面的简短文本。Microcopy 通过确保用户了解不同的搜索组件,以及如何使用它们来找到他们想要的东西,提高了电子商务药房 网站的可用性

商店 Apotheke 在其搜索栏中包括 microcopy,以告知用户他们输入症状、制造商、产品等的搜索将会产生结果。

ecommerce-search-pharma-2

4。哥伦比亚的 Farmatodo:在允许输入错误的情况下确保搜索成功

错别字容忍允许用户在输入查询时犯错误,但仍能得到他们想要的结果。这项功能的工作原理是考虑拼写相似的单词。这个功能在网上药店搜索体验中非常重要,原因有二。首先,药物和活性成分的名称往往很长或很复杂,消费者不知道如何拼写。第二,使用移动设备搜索药店产品的人不可避免地会输入错别字。

Farmatodo 在其搜索体验中采用了错别字容忍,以帮助用户快速找到正确的结果。以商品名为 Xarelto 的利伐沙班为例,它是世界上销量最高的 10 种药物之一。搜索它的人经常输入“rivoxaban”。但是有了错别字容忍,Farmatodo 就可以正确解释这些拼错的查询,并返回相关结果。

ecommerce-search-pharma-3

5。德国的 Apotheke 商店:展示包装选项

一些药店顾客需要不同类型包装的药品。电子商务药店可能会在搜索结果中显示所有可能的包装选项,这会降低可读性,让用户不知所措。

Shop Apotheke 利用其搜索解决方案,允许用户直接在搜索结果页面上为每个结果选择任何可用的打包选项。

ecommerce-search-pharma-9

6。英国的靴子:使搜索结果适应季节性和特殊情况

根据一年中的不同时间,用户的需求可能会发生变化。例如,人们可能在春天寻找抗过敏药,在冬天寻找抗流感的药物。此外,新冠肺炎疫情带来了大量的新需求。

Boots 调整其搜索结果以反映用户的情况相关需求。例如,随着新冠肺炎的出现,如果用户在靴子搜索栏中输入“面膜”,结果首先显示的是防护面膜,然后是美容和护肤面膜。

ecommerce-search-pharma-4

7。法国的 Santédiscount:使用联合搜索提供综合结果

购买药店产品的人通常对这些产品的信息感兴趣,比如是否服用某种药物的建议以及该药物如何起作用的评论。使用 联合搜索 ,您可以在一个易于使用的界面中为用户提供除产品本身之外的各种类型的搜索结果,例如,产品文档、产品使用指南和关于产品的已发布文章。这可以为网上药店带来多项好处。

https://www . algolia . com/doc/guides/solutions/gallery/federated-search/

santédiscount网站上,输入几个按键就向客户呈现了相关产品、顶级制造商、有用类别和相关文章的综合列表。提前获得“所有事实”可以大大减少用户搜索信息所花费的时间。联合搜索还可以改善客户对网上药店的看法,因为他们开始意识到数据监管背后的思想水平。

ecommerce-search-pharma-7

8。在德国购物 Apotheke:在搜索结果中包含商品销售

与实体药店一样,网上药店可以利用数字体验,尤其是搜索结果,来推广打折产品和自有品牌商品,甚至向批发商出售赞助商品。数字用户期待这种类型的销售,并可能使用它来帮助他们发现受欢迎的促销和交易。

店铺的李艾科 网站上,批发商可以付费将自己的产品列在指定位置进行相关查询。此外,李艾科商店可以推广其自有品牌产品作为第一结果。由于这些产品在搜索中的地位提高,它们大大增加了公司的收入。

ecommerce-search-pharma-6

设计一种搜索用户体验,轻松引导人们找到药店产品

为你的网上药店设计搜索 UX 时,你必须考虑用户旅程和探索过程的每一步。为了提供用户期望的服务水平,可以考虑与一家 搜索即服务 合作伙伴合作,该合作伙伴可以以灵活和可定制的方式提供您需要的所有行业标准功能。

阅读我们的电子书Searchandising:提高转化率的 9 个最佳实践 了解如何优化您的在线药店搜索体验。

Elasticsearch 替代方案可以叠加吗?

原文:https://www.algolia.com/blog/product/elastic-search-alternative/

如果你现在正在看这个页面,你已经知道为你的网站配备一个出色的搜索和发现体验的重要性。如果你正在考虑像 Elasticsearch 这样的开源选项,你可能需要一个灵活的解决方案来适应你的特定用例。

虽然 Elasticsearch 是一个 RESTful 搜索和分析引擎,确实涵盖了各种各样的用例,但并不是每个企业都有开发人员的实力和知识来让它在高水平上运行。

另一方面,Algolia 是一个托管的 搜索即服务 解决方案,专注于即时、相关和个性化的搜索和发现体验。

所以,问题仍然是:Elasticsearch 或 Algolia 适合你吗?在本帖中,我们将通过 3 个主要问题来引导你完成这个过程:

  • 对于你的用户:你想建立什么样的体验?
  • 对于您的业务:谁将与您的解决方案互动?
  • 对你的开发者来说:你打算在这个过程中投入多少时间和资源?

为用户

在网站上实施搜索的最终目标是改善整体用户体验,最终推动转化率、销售额、停留时间和其他 KPI。让我们看看 Elasticsearch 和 Algolia 是如何帮助你为用户打造搜索体验的。

使用 Elasticsearch,您将需要从头开始构建您的搜索界面,这允许您对界面进行策划和微调,以便为您的用户提供最佳服务。Elasticsearch 通常最适合于 文档搜索目的 ,但是通过一些专业知识,它可以适合任何范围的用例。

不幸的是,设计和实现最适合用户的功能可能需要大量的工作和技术知识,而大多数开发团队并不具备这些。即使对于有技术能力和时间的团队来说,构建、测试和启动搜索界面也需要几个月的时间。如果你使用 Elasticsearch 来构建面向用户的搜索,请确保所有的商业利益相关者都知道,你还需要一段时间才能为用户提供出色的搜索体验,并收获你辛勤工作的成果。

Algolia 如何为用户工作

Algolia 的设计从基础到动力体验都推动了转变。Algolia 使用内置功能,如个性化、多语言功能、打字错误容限和同义词支持,为每个用户提供最佳结果。

Algolia 在几个方面改善了用户的搜索体验:

  • 让你的用户更快达到他们的目标。使用 联合搜索 可以容忍输入错误并给出随输入搜索的结果,搜索体验更加直观,用户从一开始就参与搜索。
  • 满足用户需求,不受平台限制。 通过 其他关键平台和服务的集成,在移动设备、web 甚至语音助手等各种设备上部署无缝一致的体验。
  • 在用户层面个性化体验。利用用户在各种设备上与你的平台的互动,进一步个性化他们每次回到你的网站的体验。

在用户所在的地方与他们会面并实现强大的搜索最终会提高转化率、搜索使用率并降低跳出率。

为商家

业务团队可能不会陷入搜索解决方案的日常运营中,但他们会关注搜索如何支持业务目标。让我们来看看 Elasticsearch 和 Algolia 如何支持您的业务团队的优先事项。

Elasticsearch 如何为业务团队工作 乍一看,elastic search 看起来很有吸引力,因为初始价格很低。但是,总拥有成本远远高于初始成本。当您考虑到构建界面、维护搜索引擎、添加新功能、支持和排除引擎故障等成本时,构建搜索引擎的终生成本要高得多。

此外,有了 Elasticsearch,搜索仍然是业务团队的黑匣子。业务团队可能不了解为什么项目和产品会有这样的排名。业务团队必须依靠开发人员来解释排名算法、更改算法或添加新的排名因素。虽然在任何搜索实现中,业务-开发人员的关系都需要是牢固的,但在使用开源搜索引擎时,这种关系必须是牢固的 【尤其是 】。

要从 Elasticsearch 数据中获得业务洞察力,您需要另一种数据可视化工具。无论是 Kibana(弹性堆栈的一部分),还是另一种数据可视化工具,请确保将您的分析工具的成本计入构建引擎的总成本。

Algolia 如何为业务团队工作

Algolia 可以帮助您更好地了解用户的需求,并改进您的搜索界面,从而更好地推动业务成果。

  • 赋予业务团队调整排名因素和相关性策略的权力。Algolia 排名公式可以帮助任何用户快速理解为什么一个结果的排名高于另一个结果。此外,业务用户和技术用户可以根据相关性策略和业务优先级调整和微调排名。

  • 分析你的搜索数据来改进你的网站。用户每次在你的网站上搜索,都会产生 有价值且可操作的数据 。使用 Algolia 内置的 分析仪表板 ,您可以快速了解您的搜索执行情况,包括识别比其他人执行得更好的查询和您网站上错过的机会。网站搜索分析包含在 Algolia 中,无需额外费用。

  • 利用机会,用巧妙的商品推销来推销你的产品。 使用 Algolia 的 内置销售工具、 让您的非技术用户充分利用他们对您业务的了解,让他们推广最佳内容并完善自己的策略。

T38

为工程师

对于许多公司来说,设计网站搜索的责任将落在开发团队身上。您会希望开发人员的体验尽可能的顺畅,为您的工程师创造最快的整体成长路径。让我们看看这两个选项,看看它们将为您的开发人员创造什么样的体验。

开发者如何使用 Elasticsearch?

工程师们将不得不做很多繁重的工作,来让一个基于弹性搜索的搜索界面离地运行。幸运的是,Elasticsearch 在线开发者社区非常活跃。这个社区对你的工程师来说是一个很好的资源,甚至可以为特性开发做出贡献。

然而,对于许多团队来说,Elasticsearch 对工程团队的好处可能仅限于此。设计一个可用的、特定于案例的搜索界面是一个耗时的过程,需要很多搜索方面的专业知识,而许多开发团队并不具备这些专业知识。由于在开源平台上构建允许大量的灵活性,一个有搜索经验的开发者可能会以不同的方式处理它;如果主要开发人员离开,组织可能需要“重新学习”如何构建和维护引擎。持续的监控、维护、故障排除和创新工作可能会利用您的团队所不具备的能力。

Elasticsearch 通常最适合拥有大型、高技能开发团队的组织,这些团队以前从事过搜索引擎的开发,并将拥有持续的资源来维护搜索引擎。

开发者如何与 Algolia 合作?

Algolia 专为开发人员而设计。我们的 丰富的文档库 包括从启动和运行 Algolia 到为每个平台构建复杂的搜索 UI 的所有技术指南。

Algolia 在几个关键方面支持开发人员:

  • 借助高可用性基础设施提高正常运行时间。 Algolia 构建在安全可靠的基础设施之上,我们提供行业领先的 99.999% SLA(适用于具有 1000 倍折扣政策的精选计划)。 当前 API 状态 始终可在 Algolia 网站上获得。

  • 使用我们的前端库加快您的实施时间。使用我们的 即时搜索库 快速实现无缝体验,推动用户转换。所有用户都可以通过云即时获得创新和更新,无需额外费用。

  • 获取任何平台或用例的灵感。Algolia 社区 提供了一个来自 Algolia 用户和 Algolia 团队的项目库,帮助您开始使用您已经使用的任何框架、平台或编程语言。

  • 利用内置的安全性。 受益于内置 安全性的解决方案 ,这将节省您宝贵的时间,使您的团队能够专注于其他业务需求。

推动业务增长并对阿洛利亚产生影响

最终,在 Elasticsearch 和 Algolia 之间作出决定归结为是否 建立或购买 你的搜索引擎。如果你有一个核心产品或服务需要关注,考虑把搜索留给 Algolia 的搜索专家。

Algolia 会影响业务的方方面面,从最终用户到业务团队,再到开发人员。阅读更多关于 Forrester 如何评估 Algolia 的总体经济影响 的信息,看看 Algolia 能对你的业务产生的影响。

Endeca 迁移-为什么是现在,为什么是 Algolia

原文:https://www.algolia.com/blog/product/endeca-migration-why-now-why-algolia/

Oracle 的 Endeca 已经多年没有更新或支持,现在已经走到了生命的尽头。这让你的企业面临风险。加入其他行业领导者的行列,将您的搜索和发现转移到像 Algolia 这样的现代解决方案中。

几年前,当企业实施 Endeca 时,它是市场上最好的。值得称赞的是,二十多年来,Endeca 为领先的零售商、制造商和其他企业的搜索和发现体验提供了动力。然而今天,我们有一个 Endeca,多年来没有积极维护,更新或现代化。我们有一个 Endeca,现在正处于其生命的尽头。这使您的业务数据基础架构、安全性等面临风险。

在传统的、未优化的、不受支持的平台上实施搜索不仅会对您的利润产生负面影响,还会使您的安全和操作系统更加脆弱,增加您的责任。其他公司缺乏创新,迫使公司转向更现代的平台和解决方案。Algolia 的现代搜索和发现平台是 Endeca 的理想替代品。

请继续阅读,详细了解我们一流的搜索和发现平台,以及迁移到该平台如何让您的企业在各方面保持竞争力、安全性和优化性。

为什么迁移?离开 Endeca,获得现代强大的网络和用户体验的好处

在考虑从 Endeca 平台升级时,权衡对您的搜索和发现解决方案的影响、重新实施的技术债务以及对您的总拥有成本(TCO)的长期影响会很有帮助。大多数 Endeca 解决方案在其生命周期内都经过了优化,以提供出色的速度和可靠性,为用户设定了很高的标准。但是,如果不能保持速度和相关性,搜索和浏览体验的成功率都会下降。

SaaS(软件即服务)解决方案通过消除升级、基础设施和安全性的技术工作,已经牢固地确立了它们的价值。重要的是要知道 SaaS 解决方案能够满足并超越您当前的能力。Algolia 在一个由三台服务器组成的 集群 上托管所有客户,该集群位于至少两个独立的数据中心,并提供业界领先的 99.999 高级服务级别协议( SLA ),该协议可扩展为一个 全球实施 ,并包括针对关键日期的 峰值保护 作为值得信赖的合作伙伴,安托利亚提供业界领先的 安全 再加上合作伙伴的 高级支持 和安心。

此外,该行业不仅增加了性能改进,还增加了人工智能,以更好地理解用户的意图并个性化结果。新功能对业务非常有益,但包括捕捉信号和转换现有数据以利用人工智能模型的工作——更不用说构建、运行和维护自己的人工智能模型了。Algolia 消耗了大多数企业实施 今天捕获的信号 ,只要有足够的事件,AI 就可以处理大多数数据集。

许多组织正在考虑优化索引功能的需求(有时称为实时索引,尽管没有搜索解决方案是真正实时的),尤其是在考虑历史搜索或在线商店提货时(BOPIS)。许多解决方案能够进行单个或批量 API 调用来更新记录,但这可能无法扩展到部分记录由不同系统拥有的企业解决方案(如库存管理、电子商务管理和内容管理一起操作)。Algolia 允许多个系统在 并行 中运行,并通过额外的 优化 ,在这些场景中实现处理大型数据管道的最佳能力。

当考虑重新实施的提升时,降低 TCO 的最大好处之一是支持前端和后端实施的客户端库。Algolia 提供了一组丰富的 客户端库UI 组件 ,这些组件完全可定制,可以显著提高您的开发人员现在和未来的价值实现时间(TTV)。

请务必考虑您利用 Endeca 的所有功能,以及新解决方案是否支持这些功能。Algolia 不提供数据转换或体验管理功能,但可以连接到提供这些功能的其他同类最佳解决方案。

虽然新解决方案中可能不包括某些功能,但请考虑提供的新功能,并权衡利弊。Algolia 通过 可视化编辑器AB 测试 提供了一个业务用户友好的仪表板和高级商品销售工具,使任何团队的利益相关者都能够进行更改并优化您的搜索。

要了解迁移到 Algolia 的更多特性、优势和步骤,请查看我们免费的 Endeca 到 Algolia 迁移指南

Algolia 非常适合帮助您的企业实现数字化转型,并在市场中保持竞争力。企业伙伴关系、可靠性和技术能力与降低开发人员的总体拥有成本和解放销售人员所需的工具相结合。

准备好开始了吗? 今天就免费注册 ,亲身体验 Algolia 如何帮助您更好地维护和扩展您的搜索体验。

工程

原文:https://www.algolia.com/blog/engineering/

工程

一言为定!Algolia DevCon 2022 回顾

9 月 14 日和 15 日,Algolia 举办了我们的首次开发者大会。这是两天的演讲、演示和...

高级开发商关系工程师

编码竞赛:提交展示 Algolia 的项目并赢得智能手机

原文:https://www.algolia.com/blog/engineering/enter-algolia-coding-contest/

我们知道你们中的许多人一直在使用 Algolia API 构建出色的实现。我们希望看到更多这样的东西,这就是为什么我们决定举办一场 编码竞赛

参与很简单:

  • 使用 Algolia 构建一个项目,从下面列出的三个类别中选择
  • 将您的提交放入 GitHub 库
  • 将您的项目发送至coding contest(at)algolia . com

所有提交的截止时间为太平洋标准时间 5 月 5 日星期三晚上 11:59。

奖品

激动人心的消息!对于每个类别,获胜者将获得以下奖励之一:

  • 在 iPhone 12 64 Gb /三星 S21 128 Gb/OPPO Find X3 Neo 256 Gb 之间选择一款智能手机
  • 或者一张价值 800 美元的亚马逊礼品卡。

除此之外,每位参与者都有资格获得一张 1 个月的优惠券,免费使用 Algolia。请发送电子邮件至 codingcontest[at]algolia.com,并在主题行中注明“优惠券请求”。

项目要求

使用 Algolia 建立一个搜索界面。它可以用于移动或网络。你可以将它集成到现有的网站或应用程序中,或者为比赛创建一个简单的独立界面。

如果你不熟悉 Algolia,我们建议你遵循我们的 快速入门指南 ,它将帮助你(a)向 Algolia 发送数据和(b)构建 UI。你也可以使用我们的 互动教程 来达到同样的目的。

此外,您可以随意使用 Algolia 的任何功能:方面、解决方案、分页、菜单等等。查看我们的 解决方案页面 中的教程文档,并查看我们的 灵感库 看看你能构建什么。

根据编码竞赛官方规则,我们不会接受展示暴力、色情、虐待或任何形式的仇恨言论的项目。

标准

为了评估提交的项目,我们考虑了:

  • 功能性: 你的代码干净吗,运行得好吗?
  • 用户体验: 一旦你有了功能,现在就是设计界面的时候了。功能在屏幕上放置得好吗?它们的样式好看吗?创意或新颖度加分!

重要说明: 您只能提交 一个 项目。从以下三个类别中选择一个:

您的项目–选择一个

第一类

使用 StrapiAlgoliaAPI 构建项目。您还可以为这个项目包含您想要的任何其他 API 或工具。是你发挥创造力的时候了!

第二类

如果你不熟悉 Strapi,我们为你提供了一个更广泛的选择:使用 Algolia api 构建一个项目,加上你喜欢的这个项目的任何其他 API 或工具。

再次强调,要有创意!如有疑问,请参考我们的 文档

第三类

使用预制的 Codesandbox 构建 Algolia 实现。

参见 规则这里的

常见问题

  • Algolia 能为我提供这个项目的免费计划吗?

是的。Algolia 向所有新用户提供永久免费计划。我们还为每位参与者提供 1 个月的优惠券,以感谢您参加比赛。如果您对优惠券感兴趣,请 给我们发一封电子邮件 到 codingcontest(at)algolia.com,在主题行中注明“优惠券请求”。

  • 这个项目可以免费使用 Strapi 吗?

是的。Strapi 为每个人提供免费的社区计划。

  • 我可以参加几个类别吗?

不行,按照编码大赛官方规则,你只能参加 3 个类别中的一个。

  • 结果什么时候公布?

Algolia 评审团将在提交材料的最后一天后的两周内进行审议。

  • 我如何知道我是我所属类别的获胜者?

您将收到来自 Algolia 团队的电子邮件。他们会就奖品和如何组织运输与您联系。

  • 如果我有一些问题要问组织者,应该发送到哪里?

请将它们发送到 coding contest[at]algolia . com _

  • 已经在使用 Algolia 的网站/应用可以提交吗?

不,这个比赛的目标是让你创造新的东西。我们希望竞赛对每个在 5 月 5 日之前完成项目的参与者都是公平的。然而,你肯定可以从你之前使用 Algolia 的一个项目中获得灵感!

  • 代码必须是公共的吗,或者我可以提交一个私有的库吗?

您可以提交一个私人存储库,但是当您在 codingcontest[at]algolia.com 电子邮件地址上提交时,我们会要求您允许评审团成员访问。

编码大赛官方规则

编码大赛的官方规则有 这里有 。通过参加编码竞赛,您同意 Algolia 编码竞赛 官方规则

企业技术正在蓬勃发展

原文:https://www.algolia.com/blog/algolia/enterprise-tech-alive-well-thriving/

技术创新仍然是全球经济增长的主要驱动力。正是这种创新影响了消费者体验和企业生产力。虽然世界各地都在发生各种类型的创新,但可以理解的是,大多数与技术公司相关的新闻标题都属于 B2C 类别。从谷歌,到 Pinterest,到 Airbnb,到优步和 Lyft,这些公司对日常消费者的生活产生了直接影响——从搜索,到社交媒体,到家庭和乘车共享。

通常较少被提及的是那些企业 B2B 技术公司,它们使其他企业能够提供引人入胜的在线客户体验或提高工作场所的生产率。

今天,我们很荣幸 Algolia 被命名为企业科技 30 强,这是一份新报告,通过对来自 55 家风险投资公司的 73 名投资者的投票,确定并认可了企业科技领域最有前途的私营公司,这些公司“自 2016 年 1 月 1 日以来,共投资了 115 家企业科技独角兽中的 95 家,包括融资和退出。”

Enterprise Tech 30 是 Wing Venture Capital 的 Rajeev Chand 和 Peter Wagner 的创意,它源于一种新的方法,即根据风险投资者自己看到的情况来确定有前途的企业技术公司名单。与大学橄榄球赛中的教练民意调查类似,Enterprise Tech 30 调查了经验丰富的知情技术投资者,调查了哪些公司是领先的企业技术初创公司。

Rajeev、Peter 和 Wing 的团队(包括 Brendan Baker 和 Lizzy Labeeuw-Anderson)在过去 6 个多月的时间里发展了这一理念,并通过制定指导原则(制度化、详尽、协作和中立)、改进方法、研究要调查的投资者、构建 3,600 家私营公司的世界,以及实际进行调查和分析,最终产生了首届 Enterprise Tech 30,从而实现了这一理念。

在中期类别中,Algolia 既谦卑又自豪地获得投资者群体的认可,并与其他颠覆性和创新性的成长期技术公司联系在一起

祝贺首届企业科技 30 强中的所有公司。这些公司代表了包括 SaaS、数据和分析基础设施、自动化和现代软件开发在内的各个领域,很明显,企业技术是充满活力的,而且表现良好,最好的还在后面。

要查看完整报告的副本,请点击此处

如何成功过渡到无头架构

原文:https://www.algolia.com/blog/product/essential-building-blocks-retailers-consider-when-moving-from-monolith-to-headless-architecture/

拥有同类最佳构建模块的无头技术堆栈有利于拥有多种战略能力的电子商务公司,而这些能力是他们依靠传统整体架构时不太可能实现的。从一个巨石到无头建筑 有很多原因。 这些优势包括为特定使用案例或需求构建和定制电子商务平台解决方案的灵活性,推出新产品和服务的速度,以及为客户提供最佳体验的能力,无论平台或设备如何。这一转变开启了未来的战略增长机遇。

为了释放无头架构的优势,企业需要规划其数字化转型,并考虑创建最先进的电子商务平台解决方案所需的每个基本构件。

移动到无头架构需要哪些构建块?

根据 马赫联盟 的说法,一个典型的电子商务网站的无头架构会有以下积木:

mach alliance headless

在该图中,每个模块代表一个基本的电子商务功能,而不一定是一个独立的工具。可能有几个工具具有重叠的功能或解决方案。在选择最佳组件时,我们希望关注的是哪些功能能够为您的特定用例提供最大价值,以及如何将它们有效地结合在一起,以确保您的电子商务业务不断实现其业务目标。

前端——架构的第一个元素是前端框架。这是表示层,它将把您的电子商务平台用户界面呈现在您的客户面前,以提供最佳的数字用户体验

API 层–API 层是您所有构建模块的接入点。

体验管理

  • CMS–内容管理系统允许您的营销团队将内容放在网站的特定位置。例如,他们可以在销售活动的新类别登录页面的顶部放置促销英雄图像。
  • 营销活动–营销活动管理工具允许营销团队推广产品和活动,并跟踪每个营销活动的成功率和指标。例如,他们可以通过电子邮件营销为现有客户推出推荐计划,然后测量通过推荐计划获得的新客户的百分比。另一个例子是通过博客、社交媒体或视频流创建有价值的内容,以吸引相关线索并将其转化为销售额。
  • 忠诚度–有一些工具可以帮助您跟踪和管理您的忠诚度计划,包括购物奖励、折扣代码等等。

云商务

  • 购物车/支付/账户/订单–有工具负责管理执行电子商务交易所需的数据。
  • 促销/营销——这些是构成你营销策略核心的工具(人工或人工智能辅助)。它们帮助您管理产品出现在每个客户群中的优先级,整合您的业务数据,并在您平台的每个领域实施营销策略。此构建模块将帮助您确保以正确的顺序将正确的产品放在正确的客户面前。

了解电子商务行业领导者如何实施营销战略:

如何通过搜索营销增加在线销售

如何通过品类销售提升在线销售

利用人工智能优化用户转化的最佳方式

电子商务个性化的最佳实践

  • 此类工具除了提供人工销售功能外,通常还提供自动化功能,以更好地优化转化率,提高平均订单量和频率。这些工具通常会利用人工智能能力来推动商品 KPI,包括人工智能重新排名、人工智能同义词建议和推荐算法。

  • 搜索——这是一个成功的电子商务平台最关键的组成部分之一。大多数用户会直接去搜索栏寻找产品。你会希望确保每一次击键都能显示正确的搜索结果,并有助于转化和增加公司的收入。

  • 支付——负责您的电子商务平台上的金融交易处理的工具。

执行

  • 个性化–您架构中的一个非常重要的元素,允许您在电子商务平台上个性化每个用户的体验,并确保它符合他们独特的行为和偏好。

  • 优化

  • **定位—**工具,可根据具体内容或体验对客户群进行细分。如果一个内部研究团队发现某个地理区域的女性更喜欢某个特定的产品或内容,就可以创建一个专门的细分市场来瞄准这个特定的群体。例如,澳大利亚和新西兰的鞋类零售商客户将在 12 月看到夏季凉鞋促销,而加拿大的客户群将看到冬季靴子。
  • 分析分析对于持续评估您的营销工作、识别业务机会和趋势以及收集数据见解并与相关内部团队交流非常有用。

数据层

  • PIM–产品信息管理模块允许电子商务公司收集、管理和丰富产品信息,创建产品目录,并将其分发给多个销售和电子商务渠道。PIM 工具能够跨多个渠道导入和管理大量 SKU。
  • OMS OMS 是订单处理和履行数据的唯一真实来源。
  • DAM–数字资产管理工具用于管理、收集、存储、编目和共享内容或数字媒体:图像、视频、品牌材料和文档。
  • 客户–此构件包含您的客户服务信息。您可以利用它和搜索构建块在您的平台上创建卓越的客户体验。

了解电子商务行业领导者如何实施客户服务解决方案来提高品牌忠诚度:

领先的电子商务公司如何通过提供快速、信息丰富的客户服务来提高品牌忠诚度

系统的记录

  • ERP
  • 财务–该构件包含公司用于财务报告、会计、预测和分析的财务工具。

结论

从整体架构到无头或可组合架构的数字化转型是一个必不可少且非常必要的步骤,可以让您的电子商务平台为未来的行业变化和技术进步做好准备。

要了解有关选择和实现最佳可组合构建模块的方法的更多信息,并了解快速、可扩展和灵活架构的优势, 请联系我们的团队 ,或访问以下链接:

可组合商务:如何选择最佳组件来满足您的业务需求

可组合商务:如何提升全渠道产品发现体验

可组合商务:如何构建店内产品搜索亭和商店定位器

可组合商务:如何通过优化库存管理帮助店内销售人员轻松找到产品

可组合商务:如何将你的产品目录整合到微信、Google Home、Alexa

可组合商务如何在黑色星期五和网络周期间刺激消费者消费

posted @ 2024-10-31 16:45  绝不原创的飞龙  阅读(12)  评论(0编辑  收藏  举报