使用RavenDb查询多个类型

时间:2015-02-12 06:04:58

标签: .net ravendb lucene.net

我第一次看raven db并且我注意到有一些非常强大的查询功能,当与Lucene.net结合使用时更是如此

如以下示例所示,您可以使用通配符。

BlogPost[] prefixedResultsWithMatch = session.Advanced
.LoadStartingWith<BlogPost>("blogposts/1", "*/Author/*t");

我希望能够做的一件事是跨多个对象类型进行查询。

例如,如果我有&#39;客户&#39;和&#39;商业&#39;使用属性&#39;姓名&#39;进行类型,我希望能够获得所有&#39;客户&#39;和&#39;企业&#39;在一次通话中(即使不是&#34;相关&#34;)。

RavenDb和Lucene可以实现吗?

1 个答案:

答案 0 :(得分:2)

不确定Lucene,但你可以用MultiMap索引做你要求的事情:

public class CustomerAndBusiness_ByName : AbstractMultiMapIndexCreationTask<CustomerBusiness>
{
    public CustomerAndBusiness_ByName()
    {
        AddMap<Business>(businesses => from business in businesses
                                       select new
                                       {
                                           business.Id,
                                           business.Name
                                       });

        AddMap<Customer>(customers => from customer in customers
                                       select new
                                       {
                                           customer.Id,
                                           customer.Name
                                       });

        Index(x => x.Name, FieldIndexing.Analyzed);
    }
}

然后像这样查询:

using (var session = documentStore.OpenSession())
{
    var results = session.Query<CustomerBusiness, CustomerAndBusiness_ByName>()
                            .Where(x => x.Name == "Name")
                            .ProjectFromIndexFieldsInto<CustomerBusiness>()
                            .ToList();
}

这当然只返回商业和客户实体(称为CustomerBusiness)的表示,而不是工作单元跟踪的实体本身。

在Ayende的博客上阅读更多相关信息:

http://ayende.com/blog/89089/ravendb-multi-maps-reduce-indexes

希望这有帮助!