Azure搜索中的个性化搜索

时间:2017-09-09 09:19:20

标签: azure message azure-search

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

  • 消息:Id,Subject,Body,[...]
  • MessageRecipient:Id,MessageId,UserId,[...]

一封邮件有1:N个收件人。

我想要一个索引来搜索主题和正文消息,但必须在作为消息接收者的当前用户上过滤结果。我似乎无法找到一种很好的方法来实现这一点,因此它可以很好地扩展到高容量。从索引中返回所有搜索结果,然后在我的应用程序中对UserId进行过滤会产生大量不必要的开销。为每个UserId索引重复的每条消息的索引更糟糕。

您如何最好地实施收件人筛选的邮件搜索?

谢谢, TGM

1 个答案:

答案 0 :(得分:3)

在类似情况下,我在搜索索引中使用了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