我正在寻找Azure搜索的消息服务。非常简化,我们有一个Azure App Service(运行.NET)和SQL Azure上的两个表:
一封邮件有1:N个收件人。
我想要一个索引来搜索主题和正文消息,但必须在作为消息接收者的当前用户上过滤结果。我似乎无法找到一种很好的方法来实现这一点,因此它可以很好地扩展到高容量。从索引中返回所有搜索结果,然后在我的应用程序中对UserId进行过滤会产生大量不必要的开销。为每个UserId索引重复的每条消息的索引更糟糕。
您如何最好地实施收件人筛选的邮件搜索?
谢谢, TGM
答案 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。