搜索“继承的”标签

时间:2013-08-01 08:57:52

标签: ravendb ravendb-studio

我有一系列制造商,他们每个都生产几种产品。制造商可以使用字符串标签,我想按照制造商标签搜索产品(这样标签就是产品从制造商那里继承的。)

这样做的一种方法是创建一个索引,在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"));

因为标签没有编入索引。我正在使用RavenDB Studio。

这是地图:

from product in docs.Products
select new {
    product.Id,
    product.ManufacturerId
}

我不清楚是否需要定义一个字段,我找不到任何解释该字段的文档。

这些是类:

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;}
}

请注意,我尝试避免在Product类中添加Tags字段(如果可能的话),因为这会给错误的印象,即可以在故事中设置标记。

1 个答案:

答案 0 :(得分:1)

您在Map中添加的内容是索引的内容以及您在TransformResults中放置的内容是您从成功查询中获得的内容。因此,除非您在地图中添加标记,否则永远无法查询标记。

您可以做的是在地图中使用LoadDocument。这是一个fairly new功能,可在2.0中使用。文档在这里:http://ravendb.net/docs/2.0/client-api/querying/static-indexes/indexing-related-documents

这可能是你的情况下地图的样子:

from product in docs.Products
select new {
    product.Id,
    product.ManufacturerId,
    Tags = LoadDocument("manufacturers/"+ product.ManufacturerId).Tags
}

您正在使用的TransformResults可以保持不变。

提示是使用管理工作室并查看索引内容。您可以在索引中执行此操作 - &gt; [您的索引] - &gt;查询然后从查询选项下拉列表中选中索引条目复选框。