原文:Algolia Blog
后台人工智能推荐
原文: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 包括以下新功能:
-
流行趋势——一套创新的人工智能模型,可根据用户与各种品牌、产品和内容类别以及感兴趣的话题互动时的行为数据来检测新兴趋势,所有这些都为商家和数字内容领导者提供了与访客即时互动的能力。这增加了点击率,降低了跳出率,并通过显示哪些项目或主题是流行的,帮助访问者克服了“害怕错过”的感觉。
-
业务规则——低代码/无代码功能,利用人工智能进行持续改进,激活独特的业务策略——无需开发人员干预。这为品类经销商、在线零售策略师和内容专家提供了更大的灵活性和控制力,以生成与其业务目标相关的强大新推荐,同时获得显著的运营效率和灵活性。 -
混合推荐引擎–这是协同过滤算法和基于内容的过滤算法的结合,共同提高了推荐的相关性和准确性。这种方法克服了“冷启动”问题,因为一旦基于内容的数据被索引,推荐就可以立即呈现给用户。在这个初始阶段或稍后阶段的行为信息的可用性可以进一步帮助微调和丰富推荐的质量。这一新功能将使所有在线供应商能够立即启动并运行,更快地增加用户参与度并提高订单率。

除了这些新的型号和功能,客户已经看到 Algolia 推荐功能的成功,例如:
-
相关产品–这种推荐模型使零售商能够通过分析购物者在会话期间与之互动的商品(例如,点击、加入购物车和/或购买)并根据这种分析推荐类似的产品,来增加转化率和订单。
-
经常一起购买–这种推荐模式通过根据其他购物者在单次购物会话中购买的相同商品,在产品页面或购物车页面上追加销售补充商品,从而增加平均订单价值(AOV)。
Algolia 推荐用例及客户
Algolia 推荐的一个最明显的使用案例是在线零售或电子商务环境,然而推荐在媒体、出版物和各种其他环境中是有益的。无论您选择将它集成到您的主页、产品详情页面还是结账体验中,它都可以帮助用户发现他们可能需要的产品,并确保他们在这个过程中有一个愉快的体验。

像英国最大的运动服装零售商之一 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
艾
什么是认知搜索,它对你的业务意味着什么?
“找不到了。”可悲的是,这个结论仍然是现代企业搜索经验的一部分。但是…
高级搜索引擎优化网络数字营销经理
阿尔戈利亚+海胆。IO
原文:https://www.algolia.com/blog/algolia/algolia-acquires-seaurchin-io/
构建我们的下一波分析
我们将为我们的产品家族引入一个令人兴奋的新成员,并为我们的客户推出新的分析解决方案
我很激动地宣布今天我们的第一个收获:海胆。IO——专注于搜索洞察的实时分析平台。这是我们帮助客户提高用户参与度道路上的一个重要里程碑。我们一直致力于为他们寻找新的机会,创造更直观、更相关、更有益的体验。今天的公告让我们在这个旅程上更近了一步。
为什么是海胆。木卫一?
我们第一次遇到海胆。IO 团队作为他们技术的崇拜者。他们建立了一个独特的平台,可以对用户参与搜索的方式进行细致的了解。他们瞄准的正是我们试图为客户解决的需求。我们很快就意识到,通过合作,我们可以为我们的客户实现更多……并且完成得更快!
由于我们已经在整合海胆的技术,收购使我们能够立即加快我们的分析解决方案的开发。点击阅读更多关于我们新的分析的信息。
我们才刚开始
我们经历了具有里程碑意义的一年——我们每月处理的搜索查询量突破了 400 亿大关,我们的收入、团队和客户都翻了一番。虽然我对车队的成就感到兴奋,但我对未来更感兴趣。给我们的团队带来新技术让我们能够更快地创新,并为我们的社区带来新的解决方案。
我们的使命是为产品开发者提供工具来创造令人惊叹的体验,所以请继续关注下一步!
如何在 DevTools 中检查 Algolia 请求:Algolia 分析器扩展
你在浏览器的开发工具上花了多少时间?拜托,说实话。太多了,不是吗?别担心,我也是——我叫艾曼纽,是阿尔戈利亚公司的工程师。有时候我会花几个小时调试请求和 API 调用,所以我已经和 DevTools 中的 Network 选项卡成了非常非常好的朋友。但是像任何混乱的关系一样,我们有沟通问题:通常我会向它询问一些 API 调用的信息,但是 DevTools 给我的信息不清楚或者不如我期望的那样有用。
然后我有了一个想法。我是开发商,对吧?与其依赖通用工具来适应我非常具体的以 Algolia 为中心的用例,为什么我不能构建一个 Chrome 扩展来帮助我调试 Algolia 请求呢?
我照做了。在高层次上,该扩展在 Chrome DevTools 中添加了一个名为“ Algolia 分析器”的新面板。起初这相当困难——我有扩展的经验,但没有将它们添加到 DevTools 的经验。我找到了正确的文档,但是它们没有为版本 3 清单更新。幸运的是,它基本上是兼容的,但这种一开始就出现的小问题并没有让我充满希望。经过一番欺骗,我终于得到了这个新的定制面板:

我想做的第一件事是创建一个小工具来检查 API 键的访问控制列表。这非常有帮助,因为我们永远不应该在前端 Algolia 应用程序中使用 admin API 键(或任何应用程序,如果我们能帮助它的话)。你只能得到一把万能钥匙,可以解锁 Algolia 的任何功能,包括删除所有内容和为你注册更昂贵的计划——如果放在错误的环境中,这些功能肯定会被滥用。admin 键允许我们创建只具有特定权限的角色和 API 键,并且我们只在应用程序内部使用和。因此,我在这里添加了这个功能,以避免每次我们想要检查给定 API 键的权限时都必须进入我们的 Algolia 仪表板。
为了测试这一点,我去了我的同事 Jaden 为最近一个以 Algolia 为主题的项目制作的网站。它看起来是这样的,显然包含了 API 键:

当然,这里有一些危险的能力,这就是为什么我们不想在前端使用它(或者任何地方,如果可能的话)。想象一下,一些捣乱者看到你用了你的管理键,然后用了你的整个 Algolia 搜索索引。使用默认的搜索 API 键,它应该看起来更像这样:

好多了。
另一个有用的特性:向服务器发出的请求列表:

这是自动更新的,所以它向我们展示了我们的程序是如何与 Algolia 交互的。这个特定的应用程序只有一个初始搜索请求(只是为了显示结果的初始页面),但当你真正开始搜索时,它会上升:

在搜索框中键入四个字符后,您已经进行了五次搜索(在这种情况下,我键入了luke,因此 Algolia 被 ping 为空白请求、l、lu、luk和luke)。结果上方的那些框让我只过滤某些类型的结果,如果您返回奇怪的错误或者如果您正在使用多个 Algolia 应用程序 id,这将非常有用。
如果你点击其中任何一个请求,你会看到一个解释这个请求的窗口:

在最初的描述中,已经有很多我发现自己在调试过程中经常需要的信息。例如,常见的故障诊断问题是“您使用的是最新版本的 __?”,这里我们可以在x-algolia-agent参数中说出所有相关库的确切版本。以前肯定可以在 DevTools 中找到这些信息,但是在 Network 选项卡中这部分看起来是这样的:

很大的进步,对吧?
下面是我们从 Algolia 得到的一个简洁的回复:

当然,我们可以在代码中和更通用的 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、2020 年冬季电网报供企业搜索
企业搜索软件市场买方指南
G2 将企业搜索定义为“对组织内存储的业务数据进行有组织的检索,用户可以在企业数据库中安全地输入和查找数据。”
今年,G2 扩展了这一定义,将“企业搜索软件还可以提供 搜索即服务功能,允许企业安全地向外部来源(如移动应用程序和网站)公开选定的数据和信息源(包括产品目录、视频和营销内容)。通过索引,用户能够搜索这些数据,找到他们正在寻找的 “以支持客户旅程的关键方面,包括研究、发现、购买和/或购后活动。
这是 Algolia 的亮点,它满足了用户的搜索需求,为搜索和发现体验提供动力,将消费者与他们通过网络、手机或语音寻找的内容和服务联系起来。Algolia 使客户能够直观、快速地找到他们想要的东西,并激励他们停留更长时间,进一步参与和深入探索,最终带来更高的点击率和更多的转化。
在企业搜索软件类别中,Algolia 网站搜索在企业搜索产品中获得最高满意度:
- 97%的用户将其评为 4 星或 5 星
*** 94%的用户认为它正朝着正确的方向前进*** 92% 的用户表示他们可能会推荐 Algolia 网站搜索****
****与同类其他产品相比,Algolia 在企业搜索网格报告中获得了认证用户的积极评价,成为领先产品。该报告比较和对比了 Algolia 与其他供应商在用户满意度排名方面的表现,包括:
- 推荐的可能性
- 产品方向
- 商业价值
- 易用性
- 易于设置
- 支架质量。
此外,我们很荣幸 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_ID和API_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-key和x-algolia-application-id添加到用于认证的查询参数中。
东道主
目标主机列表来自searchClient.ts中的getDefaultHosts()函数,我们看到它有read、write和readwrite主机:
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>

当在浏览器中运行时,我们可以看到它在工作,但是,我们看到的一个区别是x-algolia-api-key和x-algolia-application-id认证密钥是在头中发送的,而不是在查询字符串中。我们将记下这一点并使用它,而不是将它们作为查询参数传递。

另一个值得注意的地方是,请求的内容类型(尽管有 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 )。

搜索 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 就准备好了:我们可以搜索对象,按类别过滤它们,并在外部编辑器中打开对象:

势更进一步
异步发送数据
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 全体员工祝您节日快乐,新年再见!🎊
在我们的开源代码交换平台上查看相关解决方案。
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 演讲中被观看次数最多的是什么?
挑战#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 点)

我们确信这个最佳选择并不令人惊讶。在今年的主题演讲中,首席执行官 Bernadette Nixon 和产品团队将带领我们了解 Algolia 对开发人员体验的愿景,并通过一个不断发展的演示展示新功能。
2.演示实验室(太平洋标准时间 9 月 14 日上午 8 点到中午 12 点)
如果没有现场编码会议,开发者大会会是什么样的?Algolia 的工程师将在周三全天主持一系列现场演示,并通过聊天回答问题。Chuck 对推荐演示特别兴奋,它延续了主题演讲中的概念。
3.在一个遥远的世界中扩展文化(太平洋标准时间 9 月 14 日上午 9:50)

构建和导航文化可能很棘手,而且随着越来越多的开发人员转向远程优先的环境,它只会变得越来越复杂。在这次演讲中,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)

什么是开发者体验(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,她建立了一个带有商务的复古奢侈品寄售店原型。JS 、 React Simple Chatbot 和 Algolia 让时尚感触手可及。该店面页面包含一个聊天机器人,作为一个更具交互性的搜索工具,允许用户流畅地描述他们的风格,机器人会推荐一些符合用户特定审美的商品。它的工作原理是从用户发送给聊天机器人的消息中分离出关键词,并将 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 管道
这是事情开始变得真正令人兴奋的地方。考虑以下工作流程:
- 一个数据库包含你的数据。
- 自动脚本每晚运行,根据数据库中的数据生成索引。
- 一个自动脚本将该索引上传到 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 的休假
阿尔戈利亚现在是 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 ,每当用户搜索库存中的商品时,都会添加推荐。他们发现,虽然你想要的产品缺货是一种令人沮丧的体验,但他们可以减少摩擦,改善客户体验,并通过提供用户可能视为替代品的相关产品来获得更好的结果。

实施 Algolia 推荐后,合作社看到:
- 篮子尺寸增加 6%
- 添加到购物篮的商品增加 45%
- 转化率提高 39%
有哪些集阿果推荐分开?
Algolia 因我们提供基于人工智能的解决方案的灵活性而闻名。您可以随时定制您的结果,将它们放在您喜欢的任何地方(无论是信息亭、电子邮件还是您网站上的任何地方),并且在上线之前,您可以通过模拟和评分了解一切的执行情况,以了解为什么会推荐这些内容。
Algolia 允许用户通过“规则”混合机器和人类的学习,以达到最佳效果(目前处于测试阶段)。例如,您可能希望在产品列表页面上显示相关项目。Algolia 不仅使用人工智能来展示您的客户可能选择的类似产品,我们还允许您进一步定制它。也许您希望所有推荐的商品与显示的主要产品颜色相同,也许您希望将促销商品固定在第一个位置,或者您可能希望筛选库存中剩余不到 10 件的所有产品。使用 Algolia 推荐的 ,非技术管理员可以轻松配置所有这些(以及更多)。
如何入门?
1。引入事件数据
注册 Algolia ( 在此免费开始使用 )后,将点击和转换事件带入您的帐户以训练您的模型非常重要。这在 Magento 集成中是现成可用的。更多详情请参考 文档 。在您开始学习时,您可以使用我们的 基于内容的学习模型 ,或者通过. CSV 文件上传过去的事件来加快学习过程。
2。训练你的模特
通过您的 Algolia 仪表盘,您可以选择指数,并根据您的点击和转换数据训练模型。您可以使用规则进一步自定义结果。您也可以使用预览功能来模拟结果。

3。向您的 PDP 页面添加推荐模块
在 Magento 仪表盘上点击几下,您就可以将您的“相关产品”、“经常一起购买”和“趋势”推荐添加到您的产品详情页面或购物车页面。这些推荐可以由开发者进一步定制,包括放置在你的站点的其他区域。

【Algolia 推荐入门简单、有效、值得。感谢阅读并查看我们的 文档 了解更多!
有关如何充分利用您的 Adobe 堆栈中的 Algolia 的更多想法,请查看我们的集成系列的其余部分,其中有关于如何使用 Algolia 与Adobe Experience Manager,Adobe 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
开发更好的搜索体验
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 或应用程序中执行的任务。

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、移动和语音渠道提供搜索和发现“即时消息”。
- 个性化体验当下时刻
借助 Algolia Summer’19,企业用户可以根据获取的客户偏好数据(如点击数据和购买数据)快速创建个性化规则,为客户量身定制搜索结果。通过 Algolia 的新个性化模拟器工具,用户能够调整个性化属性的权重,然后实时可视化最终用户体验,以确保交付预期的结果。
此外,开发人员可以通过集成个性化解决方案,包括 Dynamic Yield 的人工智能支持的 Personalization Anywhere 平台、Target2Sell 的 1 对 1 商务人工智能平台和 Raptor 的智能顾问,构建跨搜索、浏览和电子邮件营销的统一个性化体验。开发人员还可以利用 Algolia 的新用户配置 API,在第三方解决方案中利用 Algolia 生成的用户配置。
- 首创智能语音搜索
随着消费者越来越多地采用语音激活设备,如 Alexa 和 Google Home,以及使用语音在移动设备上快速搜索信息,Algolia Summer’19 进一步增强了语音搜索功能,以帮助企业满足这一增长趋势,并以最相关的结果响应用户请求。
借助 Algolia Summer’19,通过改进的实体匹配,开发人员可以轻松构建语音搜索体验,考虑人们说话和发声方式的差异,以提供更准确的搜索结果。此外,新的预建 JavaScript 语音到文本集成允许开发人员在几分钟内将语音搜索嵌入到浏览器中。这在桌面、iOS 和 Android 上都有效。
- 为“移动”搜索提供动力
随着“移动、永远在线”消费者的移动设备激增,通过简单、直观的移动搜索传递即时信息变得至关重要。借助全新的预构建移动 UI 库,Algolia Summer’19 为开发人员提供了更大的灵活性,以控制移动用户体验、实施移动优化菜单和过滤,并为移动网站和应用集成其搜索用户界面的品牌。
开发人员现在还可以在 14 种不同的开发环境中利用 Algolia 的搜索 API,以及用于 Kotlin 的新 API 客户端,kot Lin 是 Android 的新语言选择,为开发移动体验提供了另一种选择。
- 表现更好
最后,要传递 Now Moments,必须以闪电般的速度返回个性化的结果和体验。随着 Algolia Summer '19 的推出,Algolia 通过使用过滤搜索将发现体验提高了 30%,从而继续拓展新的领域。Algolia 还减少了多达 10%的索引时间,使公司能够缩短新内容上线和出现在搜索结果中的时间。
- 非常感谢,以后还会有更多
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
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 允许销售团队在后端过滤搜索结果,例如,确保当用户寻找特定商品时,只显示选定品牌的产品。【T2

-
提升和锁定项目和类别。一家媒体公司可能希望展示优质内容和免费内容的健康组合,以增加转化率。将优质文章放在分类页面的顶部,或者增加令人兴奋的季节性文章,将鼓励非付费用户最终订阅。
直到今天,这种类型的功能还没有相应的速度、相关性或基础设施来支持现代在线体验。
增强的分析功能可获得更多可见性和洞察力
搜索体验管理的一个关键部分是了解搜索数据的性能。搜索有自己的一套关键绩效指标:搜索量、点击率和转化率等等。我们最新的分析功能让您能够超越定义和跟踪这些关键指标:我们希望您看到您的搜索分析数据中的大画面。
- 趋势报告为您提供来自用户的即时反馈,告诉您他们如何使用您的应用程序
- 比较不同的日期范围
- **多标签过滤:**将分析集中在特定标准上,如设备、客户档案等。
这些特性会给你更好更快的洞察力,更多的控制,甚至更多的方法来评估你的搜索数据。
通过细分和谷歌标签管理器捕捉洞察事件
今天,我们将为您提供两个新的连接器,分别用于 Segment 和 Google Tag Manager,使您能够将事件从您已经跟踪的位置转发到 Algolia。
高级分析需要收集用户发送的信号:
- 他们点击了哪些搜索结果,是在什么时候,从哪个设备上点击的?
- 他们会浏览或添加哪些内容到他们的愿望清单中?
- 他们将什么产品添加到购物车中?
到目前为止,Algolia 只提供了一种收集这类数据的选择:使用我们自己的点击分析。新的连接器允许已经使用 Segment 或 Google Tag Manager 的客户通过简单地将 Algolia 添加为 Segment 的目的地或使用 Algolia Google Tag Manager 模板,将他们的用户行为数据发送到 Algolia Analytics。在这两种情况下,设置都很快,并且需要最少的努力。
网站搜索企业网站
作为消费者,你可能知道浏览企业网站有多难。你可能会访问公司网站,寻找产品、培训、文档、常见问题、投资者信息,甚至是博客文章。在后台,该公司已经花费了数十万美元来制作你想看的内容。然而,似乎不可能找到。
作为一个企业,你知道将所有的营销内容组织成一个最佳的信息架构是多么困难,特别是当现代企业网站必须服务于如此多不同类型的访问者:客户、潜在客户、it 和业务人员…所以你伟大的内容永远不会出现。
我们的网站搜索正在改变这一点,它消除了内容孤岛,让您的访问者准确地找到他们需要的东西,就像他们在谷歌或亚马逊上一样轻松,同时让您的企业打开这个经常被忽视但却强大的商业价值口袋。
由浩浩荡荡的阿尔戈利亚履带驱动
Algolia 爬虫是使站点搜索成为可能的工具,把你的内容统一到一个单一的交付平台。爬虫自动地为你做艰苦的工作:浏览你的网站,提取重要的信息,并且在 Algolia 中无缝地索引数据。
但与市场上的其他爬虫不同,Algolia 爬虫是高度可定制的:
- 您可以爬网多种类型的文件
- 它允许你用商业数据丰富提取的内容,比如谷歌分析数据
- 它带有自己的监控套件
还有更多。关于这一点…
我们希望您了解更多
以上是我们在冬季 20 版本中推出的最重要的功能和更新。有兴趣了解更多关于搜索体验管理或此版本附加组件的信息吗?观看我们的网上技术交流讲座,我们将深入探讨,并为您提供现场演示和客户示例。
阿尔戈利亚
阿哥利亚
增加了商家的收入,Algolia 现在是 Shopify Plus 认证合作伙伴
超过 1,500 家 Shopify 商家的搜索使用率增加,转化率和收入提高,并且能够…
首席战略业务发展官
Algolia 对搜索、发现和零售的 10 个预测
原文:https://www.algolia.com/blog/algolia/algolias-10-predictions-on-search-discovery-and-retail/
外面的温度开始下降,随着零售商准备打折和转移商品,冬季节日展示越来越早出现。这也是一年中我们的顾客为节日旺季做准备的时候。我们想后退一步,寻找明年可能的模式和趋势——我们称之为“预测季”。
作为搜索和发现创新的先驱和 电子商务 玩家的热情技术合作伙伴,我们 Algolia 知道我们有责任展望 2023 年及以后的前景。所以,事不宜迟,下面是我们对搜索、发现和零售业未来的十个预测:
- M & A 势头: 并购一直 相对于疫情之前的水平,今年相当平静 ,因为投资者一直很谨慎,专注于保存资金。我们预计活动将会增加。证据?我们最新收购的Search . io…an M&这一举动帮助我们创建了世界上第一个也是唯一一个在单个 API 中结合关键字和 矢量搜索 的混合搜索引擎。
- 抑制通货膨胀:从商品到汽油的高价格已经把消费者推到了边缘,因为他们不断地重新评估他们的支出预算。消费者不想减少购买(尤其是假期即将来临),所以他们将依靠信贷来度过任何艰难时期。
- 说到通货膨胀,我们看到了零售商专注于其 普通品牌产品 的机会,比如家庭用品、服装和杂货,与名牌相比,这些产品以对通货膨胀有利的价格提供了巨大的价值。
*** 关注搜索成熟度 :没有数据提供相关结果,你不可能有好的 搜索体验 。品牌和零售商在他们的搜索和发现中已经越来越意识到这一差距,并正在努力收集和提炼适当的信息,以提供更好的客户体验,尽可能挤压所有可能的转换…* 机器学习接管 : 机器学习 将接管零售商自动管理库存的方式,通过匹配实时数据来提供和推动更好的决策。随着员工成本的增加和利润率的压力,品牌将依赖于更加自动化的流程。* 混合搜索将占据主导地位 :为了让客户体验更上一层楼,预测意图和上下文含义是吸引消费者并向购物车中添加商品的关键——进入混合搜索。将他们带到与他们的搜索查询略有相似的商品的页面已经不够了,零售商需要不断地 改进他们的搜索能力 以准确地提供客户想要的东西,以及他们可能想要与他们最初购买的商品相匹配的东西——即使他们很难描述他们需要什么。* 混合购物的兴起: 消费者想要他们现在想要的东西,所以网上或店内缺货不会阻止他们今天得到他们需要的东西。 试试网上,店内提货 势头越来越猛,很可能在一年中最繁忙的购物季造成混乱。如果消费者在网上买不到他们想要的东西,他们就会跑到商店去找,这就要求零售商完善他们的全渠道战略。* 视觉搜索提速 :截至 2022 年 8 月, 30%的美国成年人 使用过视觉搜索购物。视觉搜索通过人工智能使用现实生活中的图像来指导用户的搜索查询,而不是文本。智能手机和 Pinterest 等社交媒体平台正在采用这种策略让用户购物——只需拍一张照片或点击你在 feed 中看到的照片,你就会被重定向到有该商品出售的网站。* 在线购物并未消亡 :尽管最近 Meta 和 Instagram 停止了在美国的在线购物计划,但社交商务仍然是零售商的一项资产——尤其是【Tik Tok】。* 语音搜索是发现资产:“Alexa,请把洗发水加到我的购物清单里。”这是一个为顾客提供充足选择的机会,他们可以选择购买哪种洗发水。如果一个品牌针对 语音搜索 进行了优化,那么它应该能够让自己的洗发水产品排在顾客考虑列表的首位。基于发现的查询是品牌认知和购物车转换的重要机会。**
**对于搜索和发现来说,未来是光明而令人兴奋的,每天都有新的功能被构建出来。在过去的几年里,搜索和发现已经越来越接近于希望获得新客户和吸引现有客户的企业的优先事项列表的顶端。2022 年对搜索来说是革命性的一年,我们只会继续前进,让我们搜索信息、产品和娱乐的方式变得更好。
想了解更多关于搜索发现如何让您的组织受益的信息吗?碰上一些神奇的阿洛利亚专家为 做了一个现场演示 。**
了解 Algolia 的压缩算法如何受到闪电和硬币分拣器的启发
在 Algolia,我们存储了大量的数据。在如此大的规模下,效率已经成为我们首要关注的问题——但是我们如何将如此多的输入数据放入一个可以在几毫秒内搜索完的索引中呢?
我们用一种非常有效的叫做树搜索的方法来解决这个难以置信的难题。一开始可能有点难以理解,但如果我们在深入研究之前先使用一些更熟悉的类比,将会很有帮助。
欧元和电子的算法
想象一下我有一个手动硬币分类器(这是一个的广告,如果你想看的话),你可以把硬币丢到一个导轨上。根据硬币运行轨道尺寸的变化,硬币按其大小落入不同的容器中。这种简单的机制不需要复杂的电子设备来读取和理解硬币代表的内容,而是记录它们之间的简单区别——它们的小尺寸差异——并通过在轨道上的几个关键点强制做出某种“决定”来利用它。实际上,你可以想象分拣员“问”硬币,“你够大了吗,可以继续沿着这条路走下去,或者你应该被分开走上一条新的道路?”
闪电是这种算法在实践中的另一个很好的例子,所以让我们浏览一下为什么闪电会有它的形状背后的科学表面。看看下面这幅闪电的图像,记住闪电本质上是一束非常兴奋的电子试图到达一个电子较少的地方:

虽然我们很多人经常看到闪电,但我们可能从未想过这种模式有多奇怪。真的,如果闪电只是电子试图尽可能快地从 A 点到达 B 点,那么它们肯定会沿着直线前进,对吗?为什么闪电会走这么尖的弯?为什么会分裂成树枝?
老实说,这是一门正在发展的科学(我们的科学关注的是另一种不同的云),但一般的解释是闪电不是一次形成的。电子在离云层只有几十米的地方往下跳,停顿片刻,做出某种决定。根据它们周围空气的电导率(这是非常不规则的,因为“空气不是完美的混合物”),电子将“选择”采取不同的方向进行下一次跳跃。正是通过这一过程,它们跳跃到地面,每一步都扭曲甚至分支。虽然它看起来是随机的,但正是因为这个原因,闪电实际上是确定性的——如果我们可以在大致相当于每一步长度的规模上重建相同的空气混合物,我们理论上就可以重建已经存在的闪电。
硬币分拣机和闪电看起来是截然不同的现象,但如果我们剥离细节,它们实际上遵循类似的递归过程:
- 一些物品沿着轨道行进一段距离。
- 他们通过一些特定的方面分析轨道上的每个项目,并决定它是否应该分支到新的路径上。
- 对于轨道的所有新分支,重复步骤 1。
这是一个相当简单的算法,但这使得它非常通用。当谈到闪电时,击中地面的各种闪电的强度映射出它们上方空气的导电性(第二步的神秘“因素”)。硬币分拣机实际上是利用这种效应建造的,因为硬币分拣机的全部意义在于,每个桶中的硬币数量反映了首先进入轨道的硬币大小的差异。
树搜索的工作原理类似
如果我们有一种分支结构,像闪电穿过的空气或硬币滑落的轨迹一样工作,会怎么样?在这个基于节点的结构的每一步,我们都要通过将节点与搜索查询进行匹配来决定下一级的分支。本质上,我们对空气传导率或硬币大小的类比是查询相关性。通过逆向工程我们期望如何遍历这棵树,我们可以建立它!
假设我们的数据集是七个字符串:romane、romanus、romulus、rubens、ruber、rubicon和rubicundus。我们第一次尝试用这些数据构建一个树,将从树的顶层的r开始,然后向下的每个分支将一个字母一个字母地拼出我们的一个可搜索项目,如下图所示:

现在,我们可以将每个字符串指定为每个交叉点上的一系列移动!例如,我们的原始字符串romulus可以描述为第一个分支处的第三个选项,以及其余连接处的第一个选项— 311111。不过,这只是为我们每个字符串节省了一个字符,因为连接点比字符数少了一个。让我们看看是否可以通过横向组合相同的字符来优化这一点,就像我们对第一行中的r所做的那样:

这并没有缩短查询时间,因为遍历树需要同样多的步骤,但是现在已经干净多了!理解起来就容易多了,而且只占用了之前版本 65%左右的存储空间。它还提供了垂直组合节点的可能性:

这个新的、更短的树包含的数据量与前一个树相同,但是遍历起来要快得多——同一个查询romulus只需要我们经过两个交叉点,而不是前六个。当然,这是一个相当人为的例子,存在多种优化途径的情况,但要点就在这里。
树搜索实际上是用于什么
而且这也不仅仅是理论上的事情!树搜索是一项非常知名和常用的技术,您可能每天都在使用它而不会注意到它。像 JPEG 和 MP3 这样的格式包含了树搜索的版本(具体来说是一种叫做霍夫曼编码的相关技术)以获得压缩的好处,这可能是通过手机联系人列表进行搜索的动力。另一个常见的例子是抽象语法树,这是一种保存编程语言标记的树形结构。像let x = 100;这样简单的代码行不会直接由解释器或编译器运行,因为它并不知道如何处理完整形式的字符串。相反,它会把它分解成这样:

像=和;这样的语法细节有助于解决歧义,但它们实际上对代码的功能没有帮助。一旦代码被转换成一个清楚理解的树结构,编译器或解释器遍历树并一次运行或编译一个命令就不再需要这些语法了。
在 Algolia 这里,我们被问了很多问题,我们是如何让我们的搜索工具变得如此之快。真的,乍一看,我们可以整理数百万个数据点——JSON 对象、字符串内容、数字、URL、布尔值——但仍然可以在几毫秒内找到用户想要的东西,这难道不合理吗?嗯,我们不是魔术师;我们用的是树形搜索!
如前所述,我们选择了只有七个相似字符串的例子来展示这种算法的能力。实际上,对于这么小的典型数据集,树搜索几乎不会带来任何改进,因此很难为本文创建一个实用的数据集。随着数据集变大,真正的优势出现了,数据集的新条目中的信息更有可能已经包含在树的一部分中。这实际上可能比你想象的要快,有几个原因,其中最重要的是某些字母在句子中不会互相跟随。例如,作为不同分支并排放置的字符不遵循预期的均匀分布,并且可以垂直聚集到一个节点的字符序列比随机生成的文本更频繁。
作为一个题外话,这实际上允许我们相当容易地纠正错别字。包含
W的节点不太可能是包含g的节点的父节点,因此用户可能指的是在我们现有的树中出现在W之后的最常见的字符,或者是碰巧在键盘上附近的字符,这些标准通常会集中在h.上,树越大,这就越有把握。
新添加到树中的平均分支点在结构中变得越来越靠下,我们将开始为新条目的每个字符需要更少的新存储空间。这意味着随着数据集的增长,Algolia 的搜索索引(本质上只是巨大的树结构)变得越来越有性能。出于这个原因,一些最知名的 Algolia 客户正在建立令人难以置信的大索引(想想 GitLab 文件中的指南,或者亚瑟王烘焙发布的食谱,或者 T4 GoFundMe 的筹款人,或者关于古驰产品的细节。这就是说,搜索速度和这些大规模数据集的大小不会随着它们添加更多信息而线性增长,而是实际上趋向于某个地方——如果你有时间和耐心,理论上你可以计算出古驰产品数据库的存储空间和搜索速度的极限,因为记录数接近无穷大!
也许我们现在应该就此打住,因为如果我们继续这种思路,我们可能会陷入一个很深的兔子洞。但是如果你觉得这个解释很有趣,这里有一些要点、进一步研究的链接和值得思考的问题:
- 你每天都用树搜索。它们可能最常被实现为霍夫曼树,或者如果你是程序员,则被实现为 ASTs 。
- 就像闪电中的电子穿过天空并选择最导电的路径一样,我们的树搜索算法本质上只是我们的搜索查询沿着树向下移动并找到最接近的可用匹配。还有哪些自然现象是这样的?
- 优化树的大小和优化在树中搜索的速度是两码事:为了减小树的大小,我们将横向组合等价的节点,但是为了减少搜索时间,我们将纵向组合连续的单个子节点。这两个过程如何相互作用?
- 这种通用算法是 Algolia 在处理大型数据集时无与伦比的性能的核心。如果你有兴趣在小范围内进行测试,我们的免费层足够大,可以开始感受树搜索优化的好处。
我们希望你喜欢这种深入的树形搜索,如果你想让对话继续下去,请像往常一样,随时在 Twitter 上联系我们。




851

被折叠的 条评论
为什么被折叠?



