我想使用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似乎在标签上使用订阅机制来发送用户电子邮件,其中包含与这些标签相关的问题。关于这种机制的简要说明应该是一个开始。有什么想法吗?
感谢。
答案 0 :(得分:1)
的Yoann,
你基本上做了反向搜索。
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
}
请注意,您需要正确进行分页,并考虑如果您有很多书籍警报会发生什么。