1

我想使用 ravendb 构建一个警报系统。

实际上我存储书籍如下:

public class Book
{
    public string Id { get; set; }
    public string Title { get; set; }
    public string Description {get;set;}
}

用户可以创建一些与书名和描述相匹配的警报。

警报是这样定义的:

public class Alert
{
    public string UserId{get;set;}
    public string Keywords{get;set;}
}

当一本书发布,或者一些编辑然后匹配用户警报时,我通知用户什么(通过电子邮件或类似的东西)。

因此,任何人都有最佳实践来建立一个有效的警报系统,而无需在每次发布或编辑一本书时循环所有警报并执行搜索查询以获得匹配的书?

编辑:我使用 Rhino.ESB 是为了在书籍发布或编辑时得到通知,我的问题不是关于如何获得书籍更新的通知。但实际上如何有效地将书籍与这些更新的警报相匹配。

编辑:StackOverFlow 似乎在标签上使用订阅机制来向用户发送与这些标签相关的问题的电子邮件。简要介绍这种机制应该是一个开始。任何的想法 ?

谢谢。

4

1 回答 1

1

约安,

你基本上做一个反向搜索。

public void Handle(BookUpdated msg)
{
    var book = Session.Load<Book>(msg.BookId);
    var alerts = Session.Query<Alerts>()
        .Search(x=>x.Keywords, book.Description)
        .ToList();



    // alert for book


}

请注意,您需要正确进行分页,并考虑如果您有一本书有很多警报会发生什么。

于 2012-04-27T23:01:09.737 回答