【问题标题】:Query across multiple types using RavenDb使用 RavenDb 跨多种类型进行查询
【发布时间】:2015-02-12 18:19:29
【问题描述】:

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

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

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

我想做的一件事是跨多种对象类型进行查询。

例如,如果我的 'Customer' 和 'Business' 类型都具有属性 'Name',我希望能够在一次调用中获取所有 'Customers' 和 'Businesses'(即使不是“相关”)。

RavenDb 和 Lucene 可以做到这一点吗?

【问题讨论】:

    标签: .net ravendb lucene.net


    【解决方案1】:

    不确定 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();
    }
    

    这当然只会返回实体 Business 和 Customer(称为 CustomerBusiness)的表示,而不是由工作单元跟踪的实体本身。

    在 Ayende 的博客上了解更多信息:

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

    希望这会有所帮助!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多