Ravendb 在“上搜索”;继承的;标签
我有一个制造商的集合,他们每个人都生产几种产品。制造商可以有字符串标签,我希望通过制造商标签搜索产品(这样标签由产品从制造商继承) 一种方法是创建一个索引,在Ravendb 在“上搜索”;继承的;标签,ravendb,ravendb-studio,Ravendb,Ravendb Studio,我有一个制造商的集合,他们每个人都生产几种产品。制造商可以有字符串标签,我希望通过制造商标签搜索产品(这样标签由产品从制造商继承) 一种方法是创建一个索引,在TransformResults部分中,将制造商的标签添加到每个产品中 from product in results select new { ..., Tags = Database.Load("manufacturers/"+ product.ManufacturerId).Tags } 但我似乎无法质疑: this
TransformResults
部分中,将制造商的标签添加到每个产品中
from product in results
select new {
...,
Tags = Database.Load("manufacturers/"+ product.ManufacturerId).Tags
}
但我似乎无法质疑:
this.Query<T>("TaggedProducts").Where(s => s.Tags.Any(tag => tag=="reliable"));
我不清楚是否需要定义字段,我找不到任何文档来解释这一点
这些是课程:
class Manufacturer
{
public int Id {get; set;}
public List<string> Tags {get; set;}
}
class Product
{
public int ManufacturerId {get; set;}
public int Id {get; set;}
}
类制造商
{
公共int Id{get;set;}
公共列表标记{get;set;}
}
类产品
{
public int-ManufacturerId{get;set;}
公共int Id{get;set;}
}
请注意,如果可能的话,我会尽量避免在Product类中添加标记字段,因为这会给人一种错误的印象,即可以在故事中设置标记。在地图中输入的内容是正在索引的内容,在TransformResults中输入的内容是从成功的查询中得到的结果。因此,除非将标记添加到地图中,否则永远无法查询标记 您可以在地图中使用
LoadDocument
。这是2.0中提供的一项功能。文件如下:
在您的案例中,地图可能是这样的:
from product in docs.Products
select new {
product.Id,
product.ManufacturerId,
Tags = LoadDocument("manufacturers/"+ product.ManufacturerId).Tags
}
您使用的转换结果可以保持不变
提示是使用ManagementStudio并查看索引内容。您可以在Indexes->[your index]->查询中执行此操作,然后从“查询选项”下拉列表中选中“索引项”复选框。LoadDocument的功能与Database.Load类似,但它用于映射阶段,而不是TransformResults阶段。这是正确的。不管怎样,最终的结果是相似的。我不知道它们在索引过程中有什么影响。
from product in docs.Products
select new {
product.Id,
product.ManufacturerId,
Tags = LoadDocument("manufacturers/"+ product.ManufacturerId).Tags
}