Azure 搜索中的个性化搜索

Personalized search in Azure Search

我正在查看 Azure 搜索消息服务。非常简单,我们在 SQL Azure 上有一个 Azure App Service (运行 .NET) 和两个表:

一条消息有 1:N 个收件人。

我想要一个索引来搜索邮件的主题和正文,但结果必须根据作为邮件收件人的当前用户进行过滤。我似乎找不到实现此功能的好方法,因此它可以很好地扩展到高容量。从索引返回所有搜索结果,然后在我的应用程序中过滤 UserId 会产生大量不必要的开销。并且为每个 UserId 复制的每条消息建立索引更糟糕。

您如何最好地实施收件人过滤邮件搜索?

谢谢, TGM

在类似情况下,我在搜索索引中使用了 Collection(Edm.String) 数据类型。因此,您索引中的示例文档如下所示:

{
    messageId : 1,
    subject : "Why Azure Search is cool",
    body: "Just because",
    recipientIds : ["123", "456", "789"]
}

recipientIds 字段在索引架构中定义为 Collection(Edm.String) 类型。

然后您可以使用 "any" 和 "all" OData 表达式来过滤您的搜索。因此,如果您想查找发送给收件人 ID 123 的邮件,您的过滤器表达式将如下所示:

$filter=recipientIds/any(r: r eq '123')

有关详细信息,请参阅 Azure Search OData expression docs