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
}