我第一次看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可以实现吗?
答案 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
希望这有帮助!