# A/B 测试

在优化搜索体验的背景下, A/B 测试是指通过测试不同搜索和排序参数的效果,以实证方式确定哪组选项能为用户带来最相关的结果(以及转化率提升)的过程。

市面上有多种 A/B 测试平台可供选择,例如:

这些平台在各自领域都非常出色,因此 Typesense 不打算提供内置的 A/B 测试功能。 本文将探讨如何利用这些现有平台来运行搜索参数调优测试,从而优化 Typesense 的表现。

# A/B 测试类型

您可以对以下内容进行 A/B 测试:

  1. 任何可用的 搜索参数,如 sort_byfilter_by 等。
  2. 覆盖/策展规则
  3. 同义词

# 方法论

  1. 在您的 A/B 测试平台上创建一个实验(Experiment)或测试(Test),同时设置 N 个分组(buckets)或变体(variations)。
  2. 当用户访问页面/屏幕时,A/B 测试平台会将其分配到一个分组或变体中。
  3. 在前端应用中,您需要编写条件代码块来获取用户被分配到的分组/变体,然后配置 Typesense 搜索 API 调用,为该特定分组使用一组特定的搜索参数或特定的集合名称(如果您正在测试覆盖规则或同义词)。
  4. 您定义的转化事件会像往常一样在 A/B 测试平台中进行追踪,您可以在测试结果中查看参数更改的效果。

# 示例

假设我们有一个图书搜索功能,想要确定最佳的 query_by 字段(特别是字段的优先级顺序)。

我们首先会在 A/B 测试平台中创建一个名为 "Query By Priority" 的实验,包含以下变体:

  • title_priority(标题优先)
  • author_priority(作者优先)
  • control(对照组)

当用户访问页面时,A/B 测试平台会将他们分配到其中一个分组。

我们在前端会编写类似这样的条件判断:

const currentVariation = ABTestingLibrary.getCurrentVariation(); // 请参考您使用的 A/B 测试平台文档获取正确的方法

let queryBy = 'categories,title,author'

if(currentVariation === 'title_priority') {
  queryBy = 'title,author'
} else if(currentVariation === 'author_priority') {
  queryBy = 'author,title'
}

const typesenseClient = new TypesenseClient({...});

client.collections('books').documents().search({
  'q': query,
  'query_by': queryBy,
  //...
})

实际上,根据用户被分配到的分组,我们会为 query_by 使用不同的值。

我们可以使用类似的机制来切换集合名称,以测试覆盖规则和同义词,或者其他搜索参数。

为了跟踪结果,我们需要在搜索结果页面上添加代码,将点击事件发送到 A/B 测试平台,同时发送其他标准转化事件(如购买)。

然后 A/B 测试平台会汇总所有变体的结果,并根据您的目标展示哪个变体表现最佳。